12

私は DSP の専門家ではありませんが、離散時間領域フィルタを離散時間領域波形に適用するには 2 つの方法があることは理解しています。1 つ目は、時間領域でそれらを畳み込むことです。2 つ目は、両方の FFT を取得し、両方の複素スペクトルを乗算して、結果の IFFT を取得することです。これらの方法の主な違いの 1 つは、2 番目のアプローチが循環畳み込みの影響を受けることです。

例として、フィルターと波形が両方とも N ポイントの長さである場合、最初のアプローチ (つまり、畳み込み) は N+N-1 ポイントの長さの結果を生成します。この応答の前半はフィルターがいっぱいになり、2 番目は半分はフィルターを空にすることです。定常状態の応答を得るには、フィルターのポイント数がフィルター処理される波形よりも少ない必要があります。

この例を 2 番目のアプローチで続け、離散時間領域波形データがすべて実数 (複素数ではない) であると仮定すると、フィルターの FFT と波形の両方が N ポイント長の FFT を生成します。両方のスペクトルを乗算して結果を IFFT すると、時間領域の結果も N ポイントの長さになります。ここでは、フィルターがいっぱいになる応答と空になる応答が時間領域で重なり合っており、定常状態の応答はありません。これが循環畳み込みの効果です。これを回避するには、通常、フィルタ サイズを波形サイズよりも小さくし、両方をゼロ パディングして、2 つのスペクトルの積の IFFT 後に時間内に周波数畳み込みが拡大するためのスペースを確保します。

私の質問は、定評のある専門家/企業の文献で、離散 (実) 時間領域波形 (N ポイント) を持ち、それを FFT し、何らかのフィルター (これも N ポイント) を乗算する研究をよく目にします。その後の処理のために結果を IFFT します。私の素朴な考えでは、この結果には定常状態の応答が含まれていないため、結果のデータの解釈でエラーにつながるフィルターの充填/空化によるアーティファクトが含まれているはずですが、何かが欠けているに違いありません。どのような状況で、これは有効なアプローチになり得るでしょうか?

どんな洞察も大歓迎です

4

4 に答える 4

8

基本的な問題は、ゼロパディングと想定される周期性に関するものではありませんが、フーリエ解析は信号を正弦波に分解します。正弦波は、最も基本的なレベルでは、範囲が無限であると想定されます。 両方のアプローチは、フルFFTを使用するIFFTが正確な入力波形を返すという点で正しいです。また、フルスペクトル未満を使用すると、エッジ(通常は数波長に及ぶ)に影響を与える可能性があるという点で、どちらのアプローチも正しくありません。唯一の違いは、仮定を行っているかどうかではなく、残りの無限大を埋めると仮定する内容の詳細にあります。

最初の段落に戻る:通常、DSPで、FFTで遭遇する最大の問題は、FFTが非因果的であるということです。このため、たとえば、FIRおよびIIRフィルターを使用して、時間領域にとどまることがよくあります。 。

アップデート:

質問文では、OPは、FFTを使用して信号をフィルタリングするときに発生する可能性のある問題のいくつかを正しく指摘しています。たとえば、エッジ効果は、長さが(時間領域で)同等の畳み込みを行うときに特に問題になる可能性があります。 )サンプリングされた波形に。ただし、すべてのフィルタリングがFFTを使用して行われるわけではなく、OPが引用した論文では、FFTフィルターを使用しておらず、FFTフィルターの実装で発生する問題はFFTを使用しても発生しないことに注意してください。

たとえば、2つの異なる実装を使用して、128個のサンプルポイントにわたる単純な平均を実装するフィルターについて考えてみます。

FFT:FFT /畳み込みアプローチでは、たとえば256ポイントのサンプルがあり、前半は一定で後半はゼロになるwfmでこれを畳み込みます。ここでの問題は(このシステムが数サイクル実行された後でも)、結果の最初のポイントの値を決定するものは何ですか?FFTは、wfmが円形(つまり、無限に周期的)であると想定しているため、結果の最初のポイントは、wfmの最後の127(つまり、将来)のサンプル(wfmの中央をスキップ)または127個のゼロによって決定されます。ゼロパッドの場合。どちらも正しくありません。

FIR:別のアプローチは、FIRフィルターを使用して平均を実装することです。たとえば、ここでは、128レジスタのFIFOキューの値の平均を使用できます。つまり、各サンプルポイントが入ると、1)キューに入れ、2)最も古いアイテムをデキューし、3)キューに残っている128個のアイテムすべてを平均します。これが、このサンプルポイントの結果です。このアプローチは継続的に実行され、一度に1つのポイントを処理し、各サンプルの後にフィルター処理された結果を返します。有限のサンプルチャンクに適用されるため、FFTから発生する問題はありません。各結果は、現在のサンプルとその前に来た127個のサンプルの平均です。

OPが引用している論文は、FFTフィルターよりもFIRフィルターに非常によく似たアプローチを採用しています(ただし、論文のフィルターはより複雑であり、論文全体は基本的にこのフィルターの分析です)。たとえば、を参照してください。 、さまざまなフィルターを分析して適用する方法を説明するこの無料の本。また、FIRおよびIIRフィルターの分析に対するラプラスのアプローチは、引用された論文にあるものと非常に似ていることにも注意してください。

于 2010-10-03T18:23:10.243 に答える
8

DFT(循環畳み込み)と線形畳み込みのゼロパディングなしの畳み込みの例を次に示します。これは、長さ M=32 のシーケンスと長さ L=128 のシーケンスの畳み込みです (Numpy/Matplotlib を使用):

f = rand(32); g = rand(128)
h1 = convolve(f, g)
h2 = real(ifft(fft(f, 128)*fft(g)))
plot(h1); plot(h2,'r')
grid()

代替テキスト 最初の M-1 ポイントが異なり、ゼロが埋め込まれていないため、M-1 ポイント分不足しています。これらの違いは、ブロック畳み込みを行う場合に問題になりますが、この問題を克服するために、オーバーラップして保存またはオーバーラップして追加するなどの手法が使用されます。そうではなく、1 回限りのフィルタリング操作を計算している場合、有効な結果はインデックス M-1 で始まり、インデックス L-1 で終わり、長さは L-M+1 になります。

引用された論文に関して、付録 A の MATLAB コードを見ました。私は、Hfinal 伝達関数を最初に共役せずに負の周波数に適用するという間違いを犯したと思います。それ以外の場合は、クロック ジッタが周期的な信号であることをグラフで確認できるため、定常状態の解析には循環畳み込みを使用しても問題ありません。

編集:伝達関数の共役に関して、PLLには実数値のインパルス応答があり、すべての実数値の信号には共役対称スペクトルがあります。コードでは、共役を取らずに Hfinal[Ni] を使用して負の周波数を取得していることがわかります。-50 MHz から 50 MHz までの伝達関数をプロットしました。

N = 150000                    # number of samples. Need >50k to get a good spectrum. 
res = 100e6/N                 # resolution of single freq point  
f = res * arange(-N/2, N/2)   # set the frequency sweep [-50MHz,50MHz), N points
s = 2j*pi*f                   # set the xfer function to complex radians 

f1 = 22e6       # define 3dB corner frequency for H1 
zeta1 = 0.54    # define peaking for H1 
f2 = 7e6        # define 3dB corner frequency for H2 
zeta2 = 0.54    # define peaking for H2    
f3 = 1.0e6      # define 3dB corner frequency for H3 

# w1 = natural frequency   
w1 = 2*pi*f1/((1 + 2*zeta1**2 + ((1 + 2*zeta1**2)**2 + 1)**0.5)**0.5)  
# H1 transfer function 
H1 = ((2*zeta1*w1*s + w1**2)/(s**2 + 2*zeta1*w1*s + w1**2))            

# w2 = natural frequency 
w2 = 2*pi*f2/((1 + 2*zeta2**2 + ((1 + 2*zeta2**2)**2 + 1)**0.5)**0.5)  
# H2 transfer function  
H2 = ((2*zeta2*w2*s + w2**2)/(s**2 + 2*zeta2*w2*s + w2**2))            

w3 = 2*pi*f3        # w3 = 3dB point for a single pole high pass function. 
H3 = s/(s+w3)       # the H3 xfer function is a high pass

Ht = 2*(H1-H2)*H3   # Final transfer based on the difference functions

subplot(311); plot(f, abs(Ht)); ylabel("abs")
subplot(312); plot(f, real(Ht)); ylabel("real")
subplot(313); plot(f, imag(Ht)); ylabel("imag")

代替テキスト

ご覧のとおり、実数成分は偶数対称で、虚数成分は奇数対称です。彼らのコードでは、loglog プロットの正の頻度のみを計算しました (十分に合理的です)。ただし、逆変換を計算するために、彼らは Hfinal[Ni] をインデックス付けすることによって負の周波数の正の周波数の値を使用しましたが、共役するのを忘れていました。

于 2010-11-19T09:06:21.223 に答える
2

FFTが適用される前に「ウィンドウ処理」が適用される理由に光を当てることができます。

すでに指摘したように、FFTは無限の信号があることを前提としています。有限時間Tにわたってサンプルを取得する場合、これは数学的には信号に矩形関数を乗算することと同じです。

時間領域での乗算は、周波数領域での畳み込みになります。長方形の周波数応答は、同期関数、つまりsin(x)/xです。分子のxは、O(1 / N)で消滅するため、キッカーです。

1 / Tの正確な倍数である周波数成分がある場合、同期関数は1である周波数を除いてすべてのポイントでゼロであるため、これは重要ではありません。

ただし、2点の間にある正弦がある場合は、周波数点でサンプリングされた同期関数が表示されます。それは同期機能の拡大バージョンのように見え、畳み込みによって引き起こされる「ゴースト」信号は1/Nまたは6dB/オクターブで消滅します。ノイズフロアの60db上に信号がある場合、メイン信号から左右に1000周波数のノイズは表示されず、同期機能の「スカート」に圧倒されます。

別の時間ウィンドウを使用すると、別の周波数応答が得られます。たとえば、正弦波は1 / x ^ 2で消滅し、さまざまな測定用の特殊なウィンドウがあります。ハニングウィンドウは、汎用ウィンドウとしてよく使用されます。

重要なのは、「ウィンドウ関数」を適用しないときに使用される長方形のウィンドウは、適切に選択されたウィンドウよりもはるかに悪いアーティファクトを作成するということです。つまり、時間サンプルを「歪める」ことにより、周波数領域ではるかに優れた画像が得られます。これは、「現実」、つまり私たちが期待して見たい「現実」によく似ています。

于 2010-10-04T22:03:55.627 に答える
1

データの矩形ウィンドウが FFT アパーチャ幅で周期的であると仮定すると、アーティファクトが発生しますが、これは十分なゼロ パディングなしで循環畳み込みが行うことの解釈の 1 つですが、その差は、質問。

于 2010-10-03T16:29:13.620 に答える