fft scalloping or window effect
17 次查看(过去 30 天)
显示 更早的评论
why is the magnitude higher in the plot below without using the flattop window than when it is used. I thought the flattop window should compensate for the window effect
fs=1000;
T=1/fs;
N=512;
n=0:1:512-1;
t=(0:1:N-1)*T;
xt=sin(2*pi*101.6*t);
xn=sin(2*pi*101.6/fs*n);
t=(0:1:N-1)*T;
f=fs*(0:length(xn)-1)/length(xn)
wn = flattopwin(N);
% xn=xn(:);
% xn=xn.*(wn);
Xk=fft(xn,length(xn));
% Xk=(Xk)';
G=abs(Xk);
plot(wn)
0 个评论
采纳的回答
Wayne King
2012-2-16
Lisa, you are correcting above for the window, which is what I said initially. You're not working with power in the above example, which is why you are only using sum(w).
The factor of two gives you the correction for a single-sided spectral estimate for all frequencies except 0 and the Nyquist.
You should not multiply 0 and the Nyquist by two.
The mistake you have is that you are plotting the whole spectrum [-Nyquist,Nyquist). You only want to apply the factor of two if you are plotting just a single side, so:
fs=1000;
T=1/fs;
N=512;
n=0:1:512-1;
t=(0:1:N-1)*T;
xn=2*sin(2*pi*100/fs*n);
t=(0:1:N-1)*T;
w=flattopwin(N);
xn=xn(:);
xn1=xn.*w;
ws=sum(w);
Xk = fft(xn1);
Xk = Xk(1:length(Xk)/2+1);
Xk = Xk.*(1/ws);
Xk(2:end-1) = Xk(2:end-1)*2;
plot(abs(Xk));
3 个评论
Wayne King
2012-2-16
Lisa, I used 2 as the amplitude in the above example (not 1). Change it to 1 and you see that you now get approximately 1 as the amplitude estimate. Or change it to 4 and see what happens. I have to tried to tell you many times in this thread what the job of sum(w) is. You have to divide out the effect of the window, that is what 1/sum(w) is doing.
更多回答(4 个)
Wayne King
2012-2-15
Hi Lisa, If you use the msspectrum method for spectrum.periodogram with the flat top window, you see that it does an awfully good job.
Fs = 1e3;
t = linspace(0,1,1000);
x = cos(2*pi*100*t);
Hft = msspectrum(spectrum.periodogram('Flat Top'),x,'Fs',1e3,'NFFT',length(x));
sqrt(2*Hft.Data(101))
Hnw = msspectrum(spectrum.periodogram,x,'Fs',1e3,'NFFT',length(x));
sqrt(2*Hnw.Data(101))
% flat top actually does a better job than no window
Wayne King
2012-2-15
Lisa, you have to compensate for the L2 norm of the window, regardless of which window you use. Keep in mind that you are multiplying the signal by the window, which means that you are convolving the signal's spectrum with the spectrum of the window.
Wayne King
2012-2-15
The L2 norm is the energy of the window, not the length.
You can use Hft.Data that has the doubles that you need.
Hft.Frequencies has the corresponding frequencies.
3 个评论
Dr. Seis
2012-2-16
Nooooo... The FFT should be scaled by the time increment (dt = 1/fs). You apply this correction to ALL the amplitudes in the frequency domain, not just the ones that aren't at 0 Hz or the Nyquist.
See my reasons here:
It has to do with the conservation of energy between the time domain and its representation in the frequency domain.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!