FFTビンをゼロにすることでフィルタリングするのはなぜ悪い考えですか?


72

FFTを実行し、いくつかのビンをゼロにしてからIFFTを実行することで、信号をフィルタリングするのは非常に簡単です。例えば:

t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
X[64:192] = 0
y = ifft(X)

高周波成分は、この「ブリックウォール」FFTフィルターによって完全に除去されます。

しかし、これは良い方法ではないと聞いたことがあります。

  • なぜ一般に悪い考えですか?
  • それが大丈夫か良い選択かという状況はありますか?

[ pichenettesが示唆するとおり ]

回答:


74

周波数領域でビンをゼロにすることは、周波数領域で長方形のウィンドウを乗算することと同じです。周波数領域でウィンドウを乗算することは、時間領域でそのウィンドウを変換することによる循環たたみ込みと同じです。長方形ウィンドウの変換は、Sinc関数()です。Sinc関数には、多くの大きなリップルと、時間領域アパーチャの全幅を広げるリップルがあることに注意してください。これらすべてのリップル(リンギング)を出力できる時間領域フィルターが「悪い考え」である場合、ビンのゼロ化も同様です。sin(ωt)/ωt

これらのリップルは、「ビン間」またはFFT開口幅が非整数周期のスペクトルコンテンツに対して最大になります。したがって、元のFFT入力データが、そのウィンドウ内でやや非周期的なデータ(たとえば、ほとんどの非同期サンプリングされた「実世界」信号)のウィンドウである場合、それらの特定のアーティファクトはビンのゼロ化によって生成されます。

別の見方をすれば、各FFT結果ビンは時間領域で特定の周波数の正弦波を表します。したがって、ビンをゼロ化すると、その正弦波を減算するのと同じ結果が得られます。または、同等に、正確なFFTビンの中心周波数で逆位相の正弦波を加算します。時間領域の一部のコンテンツの周波数がFFT幅で純粋に整数周期でない場合、正確に整数の周期正弦波の逆数を追加してキャンセルしようとすると、無音ではなく、次のように見えることに注意してください「ビート」ノート(AM変調された異なる周波数の正弦波)。繰り返しますが、おそらく望んでいるものではありません。

逆に、元の時間領域信号が、FFTアパーチャ幅で正確に整数周期である数個の純粋な変調されていない正弦波である場合、ゼロ化FFTビンはアーティファクトなしで指定されたものを削除します。


3
この答えには良いものがありますが、ギブス効果にもっと焦点を当てたいと思います。
ジム・クレイ

4
ギブス効果への答えを得るための試みは、すでにここに頼まれた:dsp.stackexchange.com/questions/1144/...
hotpaw2

@ hotpaw2これは良い説明です。しかし、私はこれを参照する必要があり、それを特定するのに多少の困難を感じています。これが、周波数領域で動作するのではなく、時間領域フィルタリングを行う理由です。(また、時間領域はリアルタイムにすることができます。)しかし、これを述べることから始める人はいないようです!
ヒュー

これは、フィルター設計のウィンドウメソッドとどのように関係しますか?
フィリペピント

Von Hannウィンドウ(et.al.)の変換を任意の長方形ウィンドウの変換と比較します。一般に、特にストップバンドのFFTビン間で、はるかに優れたフィルター応答。一般に、ビンの急激なゼロ化は、遷移付近の非ゼロ化よりも悪いです。
hotpaw2

3

この質問は私を長い間混乱させてきました。@ hotpaw2の説明は良いです。matlabを使用した簡単な実験に興味があるかもしれません。

https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html


更新された情報。

この事実が単純であることを確認するには、FFTビンをゼロにする理想的な(?)バンドパスフィルターのインパルス応答のスペクトルを注意深く観察する必要があります。副詞を「慎重に」追加する必要があるのはなぜですか?同じサイズのFFTを使用してインパルスの応答を観察すると、図1に示すように欺かれます。それでも、フィルターの出力を観察するときにDFTの次数、つまりインパルス応答のゼロパディングを追加すると、図2に示すように、周波数領域のリップルであるいわゆるギブス現象を見つけることができます。

実際の結果は、ウィンドウ効果によるものです。問題を完全に理解したい場合は、DSPの聖書の7.6章と10.1-10.2章を参照してください(1)。要約すると、3つの重要なポイントがここに記載されています。

  1. ウィンドウのサイズとDFT(FFT)の順序は完全に独立しています。一緒に混ぜないでください。
  2. ウィンドウのプロパティ(タイプ/サイズ)は、DTFTの形状を支配します。(例:メインローブが広くなると、周波数応答の過渡帯域が広くなります。)
  3. DFTは、周波数領域でのDTFTの単なるサンプリングです。さらに、DFTの次数が高いほど、DFTのスペクトルは密になります。

したがって、図2のより密なスペクトルの助けを借りて、理想的な(偽の)バンドパスフィルターのマスクを通して見ることができます。

ここに画像の説明を入力してください偽りの頻度 応答。

ここに画像の説明を入力してくださいFreqのギブス現象。応答。

(1)Alan V. OppenheimおよびRonald W. Schafer。2009.離散時間信号処理(第3版)。Prentice Hall Press、米国ニュージャージー州アッパーサドルリバー。

fps = 15;

LPF = 1;
HPF = 2;

n = -511:512;
n0 = 0;
imp = (n==n0);

NyquistF = 1/2*fps;

%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);  
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];

% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];

N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');


N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');

%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)

    N = length(input_signal);
    n = 0:1:N-1;
    freq = ( n .* fs) ./ N;

    filered_signal = zeros(N, 1);

    for i = 1:N
        if freq(i) > w1 & freq(i) < w2
            filered_signal(i) = input_signal(i);
        end

    end
end

これをコメントに変換できますか?
エンドリス

申し訳ありませんが、評判が十分ではありません。URLの説明も自分で書いています。リップルの悪影響を視覚化できるテストコードを提供したいだけです。
ポーウェイファン

1

FFTは、時間分解能が不十分です。つまり、特定の周波数がいつ存在するかについて情報を提供しません。所定の信号持続時間の既存の周波数成分に関する情報を提供します。

FFTでビンをゼロ化すると、時間領域でIFFT後の解像度が低下します。


ただし、非常に長い信号がfftを取得してからifftを取得するのは計算上困難です。ジッター/リンギングを回避するには、信号のフィルタリングを通過帯域から阻止帯域にスムーズに移行する必要があります。
イッタグータミ

「FFTは時間分解能が低い」FFTは時間分解能を持たず、スペクトル領域変換であるため、後ほど述べたように、信号の周波数成分に関する情報のみを提供します。
エドパラドックス

FFTによって提供される解像度は、そのウィンドウの長さです。FFTのウィンドウ外にあるものは、FFTのウィンドウ内にあるものとして解決されません。
hotpaw2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.