3

cooley tukeyメソッドがどのように機能するかを読んでいますが、次のpythonスクリプトにいくつか問題があります。

def fft_CT_twiddles(x, inverse = False, verbose = False, twiddles = None) :
    """
    Computes the DFT of x using Cooley-Tukey's FFT algorithm. Twiddle factors
    are precalculated in the first function call, then passed down recursively.
    """
    t = time.clock()
    N = len(x)
    inv = -1 if not inverse else 1
    if N % 2 :
        return dft(x, inverse, False)
    M = N // 2
    if not twiddles :
        twiddles = [math.e**(inv*2j*math.pi*k/N) for k in xrange(M)]+[N]
    x_e = x[::2]
    x_o  = x[1::2]
    X_e = fft_CT_twiddles(x_e, inverse, False, twiddles)
    X_o  = fft_CT_twiddles(x_o, inverse, False, twiddles)
    X = []
    for k in range(M) :
        X += [X_e[k] + X_o[k] * twiddles[k * twiddles[-1] // N]]
    for k in range(M,N) :
        X += [X_e[k-M] - X_o[k-M] * twiddles[(k - M) * twiddles[-1] // N]]
    if inverse :
        X = [j/2 for j in X]
    t = time.clock() - t
    if verbose :
        print "Computed","an inverse" if inverse else "a","CT FFT of size",N,
        print "in",t,"sec."
    return X

xrange(M)]+[N]行のkのtwiddles=[math.e **(inv * 2j * math.pi * k / N)は何をしますか?配列のように見えますが、なぜ+ [N]なのですか?

では、なぜtwiddles[-1]値にアクセスするのでしょうか。

私はこれを理解することはできません

4

2 に答える 2

2

あなたが尋ねたコードは次のことをしています:

+[N] # appends N to the end of the array


twiddles[-1] # is the last element of the array ( the N in this case ).

このコードは、便宜上、twiddles配列の最後に「N」を追加しているように見えます。これにより、後で使用できるようになり、twiddles引数として関数に渡す代わりに、関数に簡単に渡すことができます。別の変数。

于 2011-05-15T19:53:50.167 に答える
2

質問をする人の専門知識のレベルが不明なときにコードを説明しようとするのは困難です。それはここにそれが行くと言った:

  1. Pythonには、シーケンスnlの連結演算子があります。+したがって、このtwiddles =行はある種のシーケンスを作成し、それに番号Nを追加します。
  2. twiddles[-1]Nコメントが示唆するように、ここの番号のシーケンスの最後の要素にアクセスします。
  3. シーケンス式は、twiddles複素数を使用して、単位円を等しいスライスNに分割することにより、単位円上の点で構成されるシーケンスを生成します。N
于 2011-05-15T20:01:15.620 に答える