これはウィンドウアーティファクトです。
リンクされたコードは、長さが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に埋め込まれます。の長さがより大きい場合、シーケンスは切り捨てられます。がの場合、列の長さは同じ方法で調整されます。n
X
X
n
X
n
X
n
X
X
これは、「純粋な正弦波」のFFTを実際に取得していないことを意味します。つまり、その後にフラット信号を含む正弦波のFFTを取得しています。
これは、正弦波のFFTに正方窓関数を掛けたものと同等です。FFTスペクトルは、正弦波周波数スペクトル(インパルス関数)と方形波周波数スペクトル(sinc(f))の畳み込みです。
L = 16,384
信号のゼロパディングがないように変更すると、perfect
FFT が観測されます。
さらに検索キーワード:「スペクトル漏れ」、「窓関数」、「ハミング窓」。
編集:大学でこのトピックについて書いた資料を整理しました。これはかなり詳細になります。ブログに掲載しました。