単一の正弦波サイクルのフーリエ変換が単一のバーではないのはなぜですか?


12

単一の正弦波でさまざまなフーリエ変換コードを試してみましたが、理論的には単一のバーを表示するはずの信号周波数で共鳴する分布スペクトルを生成します。

サンプリング周波数はほとんど効果がありませんが(ここでは10kHz)、サイクル数は次のようになります。

1サイクル:

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

100サイクル:

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

100000サイクル:

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

フーリエ変換は無限のサイクル数でのみ収束するようですが、なぜですか?正確に1サイクルのタイムウィンドウがNサイクルの結果と同じ結果をもたらすべきではないでしょうか?

アプリケーション:これは、好奇心からでもありますし、一次システムのステップ応答が機械的アセンブリの共振をどれだけ刺激するかを知りたいからです。したがって、応答の正確なフーリエ変換が必要です...これはもう信用できません。「正弦波」の場合に基づいて、精度を改善するために何ができますか?

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

PS:これらの特定のスクリーンショットは、こちらのコードに基づいています。


6
受け入れられた答えに加えて、離散時間フーリエ変換(DFTを使用して計算している)が正弦波の1周期である入力信号のインパルスになると信じる理由はないことに注意してください。正弦波の連続時間フーリエ変換はインパルスですが、はい、しかしその正弦波の持続時間は無限です。信号を時間内に制限すると、それは長方形のウィンドウ関数で乗算することに相当します。周波数領域の結果は、インパルスとウィンドウのフーリエ変換の畳み込みであり、これは本質的にあなたが観察しているものです。
ジェイソンR

発言ありがとうございます。では、NFFT数をベクトルの長さに変更すると、結果は1本のバーになることをどのように説明できますか?
ミスターミステア

1
良い質問。これは、DFTに固有の前提があるために発生します。DFTの入力で与えられる有限長の信号は、無限の継続時間で両方向に周期的に広がると想定されます。したがって、DFTの「開口」内に整数のサイクル数がある場合、無限期間の正弦波の変換、つまり単一のインパルスになります。これは、スペクトル漏れが正確にゼロの場合に対応し、実際にはほとんど発生しません。
ジェイソンR

回答:


30

これはウィンドウアーティファクトです。

リンクされたコードは、長さが2の累乗になるように、10,000個のサンプル信号にゼロを埋め込みます。

%% Author :- Embedded Laboratory

%%This Project shows how to apply FFT on a signal and its physical 
% significance.

fSampling = 10000;          %Sampling Frequency
tSampling = 1/fSampling;    %Sampling Time
L = 10000;                  %Length of Signal
t = (0:L-1)*tSampling;      %Time Vector
F = 100;                    %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
...

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
...

上記のコードでは、FFTはFFTサイズで撮影されることに注意してくださいNFFT(この場合、16,384)の信号長よりも大きな2のべき乗であるから、Mathworks社のfft()マニュアル

Y = fft(X,n)n点DFTを返します。fft(X)は、最初の1でない次元のサイズであるfft(X, n)where と同等です。の長さが未満の場合、末尾のゼロがlengthに埋め込まれます。の長さがより大きい場合、シーケンスは切り捨てられます。がの場合、列の長さは同じ方法で調整されます。nXXnXnXnXX

これは、「純粋な正弦波」のFFTを実際に取得していないことを意味します。つまり、その後にフラット信号を含む正弦波のFFTを取得しています。

これは、正弦波のFFTに正方窓関数を掛けたものと同等です。FFTスペクトルは、正弦波周波数スペクトル(インパルス関数)と方形波周波数スペクトル(sinc(f))の畳み込みです。

L = 16,384信号のゼロパディングがないように変更すると、perfectFFT が観測されます。

さらに検索キーワード:「スペクトル漏れ」、「窓関数」、「ハミング窓」。


編集:大学でこのトピックについて書いた資料を整理しました。これはかなり詳細になります。ブログに掲載しました


この間ずっと私の顔の前にあった。よくやった、私はNFFT番号をベクトルの長さに変更しただけでした。
ミスターミステア

1
@MisterMystère:大学で書いた関連資料へのリンクについては、編集を参照してください。写真を含む、より徹底的な説明。
李アウンイップ

(私は数学の数式を再入力するのを忘れていました-今修正されました。)
李アウンイップ

私は(最速フーリエ西に変換)FFTWであると考えていnextpow2使用してMatlabのFFTのalgoriths、にパディングにはほとんど利点があるだけでリマインダー
スコット・サイドマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.