「ゼロパディングでは周波数分解能が実際に向上しない」と言うのはなぜですか


12

f = 236.4 Hzこれは周波数の正弦波(長さは10ミリ秒です。N=441サンプリングレートにポイントがありますfs=44100Hz)とそのDFTで、ゼロパディングはありません

ここに画像の説明を入力してください

DFTを確認することで得られる唯一の結論は、「周波数は約200Hzである」です。

これが信号とそのDFTであり、大きなゼロパディングがあります

ここに画像の説明を入力してください

これで、より正確な結論を得ることができます。「スペクトルの最大値を注意深く見れば、周波数236Hzを推定できます」(ズームして最大値が236に近いことがわかりました)。

私の質問は、「ゼロパディングでは解像度が向上しない」と言うのなぜですか?(私はこの文を頻繁に見ましたが、「補間を追加するだけです」と彼らは言っています)

=>私の例では、ゼロパディングによって、より正確な分解能で適切な周波数を見つけることができました。


1
この非常に古い質問について考えるもう1つの方法:時系列プロットがまったくなく、「低解像度」のFFTしかなかった場合-時系列に変換し、ゼロパッドを使用して、 -fftで236Hzを出力します。したがって、「低解像度」のfftには、スムーズなものと同じ情報がすべて含まれている必要あります。
ジョシュア

回答:


19

この文脈では、決議には非常に具体的な定義があります。これは、近くの周波数で2つの別々のトーンを解決する能力を指します。スペクトル推定のサンプルレートを上げましたが、たとえば236 Hzと237 Hzの2つのトーンを区別する機能がありません。代わりに、適用するゼロパディングの量に関係なく、1つのblobに「溶け込み」ます。

解像度を上げるための解決策は、より長い時間信号を観察してから、より大きなDFTを使用することです。これにより、幅がDFTサイズに反比例するメインローブが作成されるため、十分に長い時間観察すると、互いに近い複数のトーンの周波数を実際に解決できます。

-

これがどのように機能するかを確認するために、次の2つの信号の加算のズームインFFTのプロットを示します。元の正弦波と、0〜100 Hzだけ周波数が異なる正弦波です。

この2つを区別(解決)できるのは、プロットの100Hzの差の端(ここでは左側)だけです。

以下のプロットを生成するためのScilabコード。

ここに画像の説明を入力してください

f = 236.4;
d = 10;
N=441;
fs=44100;
extra_padding = 10000; 

t=[0:1/fs:(d/1000-1/fs)]
ff = [0:(N+extra_padding-1)]*fs/(N+extra_padding);

x = sin(2*%pi*f*t);

XX = [];

for delta_f = [0:100];
    y = sin(2*%pi*(f+delta_f)*t);
    FFTX = abs(fft([x+y zeros(1,extra_padding)]));
    XX = [XX; FFTX];
end

mtlb_axis([0 1300 0 500])

figure(1);
clf
[XXX,YYY] = meshgrid(ff,0:100);
mesh(XXX(1:100,[50:90]),YYY(1:100,[50:90]),XX(1:100,[50:90]))

ありがとう!わかりましたので、ゼロパディングは、近くの周波数で2つの別々のトーンを解決するのに役立ちません。ただし、私の例では、スペクトルのピークを見つけ、トーンの
基本

「ゼロパディングでは解像度が向上しない」とは、「ゼロパディングを使用して正確なピッチトラッキングを実行できない」ことを意味すると思いました(ここでは当てはまりません。この例では、ピッチを正確に検出できることを示しています)
Basj

正しく理解できたと思います。ゼロパディングには、粗いスペクトルからのピーク位置の詳細な推定など、その用途があります。それは特効薬ではありません。
Jason R

1
私はゼロパディング以外の何かを試しましたが、関連しています。x(n)0最後に)長くする代わりにx(n)、長さN を維持しますが、変更はここにあります:DFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)forの代わりにk=0,1,...,N-1、私はDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))for k=0,1,...,10*N-1...これは、ビン(周波数ビンの10 N代わりにNビン)を追加するのと同じですが、同じですx(n)長さのN。これで、ビンは10hz、20hz、...、100hz、110hz、120hz、...になります。=>これはゼロパディングと同じですか?実際の追加の解像度はなく、補間のみですか?
Basj 2013年

:より多くのビン(Nの代わりに10N)を追加していDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))ためk=0,1,...,10*N-1、同じに保つx(n)長さのをNゼロパディングよりも、同じ結果を与える:ない本当に多くの解像度が、唯一の補間?
Basj 2013年

13

「解決」という用語には複数の意味があり、2つの異なる意味を使用しているときにコミュニケーションしようとする人々を混乱させる可能性があります。

光学的な意味では、1つのぼやけたブロブの代わりに、2つの近くの明確に分離されたポイント(またはスペクトル内の2つの隣接するピーク)を解決できるため、ゼロパディングは役に立ちません。これは、ゼロパディングによって解像度が向上しないことを示すときに最もよく使用される意味です。

解像度の要件がスペクトルピーク間のディップ(たとえば、最低3 dBの低下)を必要とする場合、解像度はFFTビンの間隔よりもさらに低くなります。たとえば、Fs / Nでなくても、2倍から3倍以上、使用されるウィンドウ処理に応じて。分解能に対するより弱い要件は、DFTの直交基底ベクトルの周波数間隔(Fs / Nなど)だけかもしれません。

プロットポイントに関しては、はい、ゼロパディングを使用すると、DPI(1インチあたりのプロットポイント)解像度のように、プロットするポイントが増えます。これにより、眼球で極値を見つけやすくなります。ただし、これらはゼロパディングなしで非常に高品質のプロット補間(Sinc補間)を実行することで得られるポイントと同じなので、ゼロパディングなしでは計算できない情報は実際には追加されません。

ピッチトラッキングの観点から、ウィンドウ処理された非ゼロ埋め込みFFT結果の放物線またはSinc補間(FFT結果ビン間の補間)は、より計算量の多いより長いゼロ埋め込みFFTプロットと同じくらい良い結果をもたらす可能性があります。したがって、ゼロパディングは、非ゼロパディングおよび非補間ピークピッキングよりも「優れた」ピッチトラッキング結果を提供しますが、多くの場合、補間を使用するよりもはるかに非効率的です。

例にノイズを追加したが、信号よりわずかに小さい場合は、ゼロが埋め込まれたピークが、ゼロが埋め込まれていないピークと同じように不正確である場合があります。したがって、より一般的なケースでは、以前よりも正確な「正しい」周波数を見つけられなかった可能性があります。ゼロパディングは、ノイズによる不正確な結果のみを補間します。これは、解像度を上げないと言われているもう1つの理由です。


覚えておくべきこと:同じ正弦波f=236.4 hzが同じときに10msのみ、44.1khzではなくfs = 192khzである場合はどうなりますか?真の周波数分解能はそれより高くなりますか?
Basj 2013年

サンプルレートを上げると、高周波ビンが増えますが、関心のある低周波に近いDFTビンの間隔は同じです
hotpaw2

1
サンプルレートを上げると、sincDFTののような曲線が狭くなるかどうかがわかりますか?そうでない場合、これはサンプルレートを上げても解像度が向上しないことを意味します(周波数を解決するという意味で)
Basj

1/TT

周波数のSincの幅は、時間内のデータウィンドウの幅に関連し、ゼロパディングやサンプルレートの変更は実際には影響しません(サンプリングまたは量子化の問題以外)。
hotpaw2 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.