The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design >> Mixed-Signal Design >> Help needed about Matlab's windowed fft precision!
https://designers-guide.org/forum/YaBB.pl?num=1184491436

Message started by greatqs on Jul 15th, 2007, 2:23am

Title: Help needed about Matlab's windowed fft precision!
Post by greatqs on Jul 15th, 2007, 2:23am

Hi everybody,


I've met a weird problem really makes me desperate.

The problem is as below,

As we know, hann window's spectrum is defined as[1]:
W(phi)=0.5*D(phi)+0.25(D(phi-2*pi/N)+D(phi+2*pi/N))
where, D(phi)=exp(j*phi)*sin(N/2*phi)/sin(1/2*phi) is the Dirichlet kernel, and N is number of DFT points
the amplitude of spectrum at the first fft bin (phi=0) should be N/2
the amplitude of spectrum at the second and last fft bin (phi=1*2pi/N and phi=(N-1)/N*2pi) should be N/4
the amplitude of spectrum at the rest of fft bins should be 0
hence, in theory, there should be 3 non-zero bins on the spectrum of hann window.

But when I do this in Matlab, I found that the rest of fft bins' amplitude is not so small that it cannot be simply neglected.
As can be seen from the picture in the attachment

for N=1024, the first and second bin's amplitude is 0dB and -6dB as expected, but the rest bins' amplitude are not

zero as theory says (they are around -70dB~-80dB).
The consequence of this problem is that when I do fft with any sine wave plus noise of which the noise floor is below these non-signal bins' amplitude (for example the noise floor is around -100dB), Matlab simply gives me the wrong SNR!!

I can not find any answers or related information from any textbook. I guess it is caused by Matlab fft's internal precision.

Anyone has idea about this?


Thanks a lot!
 
[1] "On the use of windows for harmonic analysis with the discrete fourier transform", F. J. Harris, Proceedings of the IEEE VOL.66 NO.1, Jan. 1978
 
the matlab script I used (I'm using Matlab R2006b):

close all;
nbpts=1024;
w=hann(nbpts);                  % generates hanning window vectors
W=fft(w)/sum(w);            % generates normalized fft spectrum
WM=abs(W);                  % gets amplitude spectrum                  
figure(1);
plot([1:nbpts],20*log10(WM),'bo-');
xlabel('fft bin');
ylabel('dB');
title('Hann window DFT with N=1024 normalized spectrum');
grid on;

Title: Re: Help needed about Matlab's windowed fft precis
Post by vivkr on Jul 16th, 2007, 2:57am

Hi,

The internal precision of MATLAB is quite high. I think you have misinterpreted the properties of the window you are
using, and mistaking the "main lobe width" for the number of nonzero bins. I don't think there is any window which
would have the excellent properties you seek.

Nevertheless, depending on the input signal which is operated on by the window, you may end up with just a finite number
of nonzero bins.

Regards
Vivek

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.