FFT in dB scale

430 views (last 30 days)
Alexander Voznesensky
Alexander Voznesensky on 23 Jan 2017
Hi everybody! I'm trying to use dB scale in FFT. I've found the example http://www.dsplib.ru/content/winex/winex.html
I'm trying to get the same results in MATLAB. But I can't. I have different amplitude levels. What's wrong? So, I do:
Fs=1000;
T=1/Fs;
N=1024;
t=(0:N-1)*T;
f=(0:Fs/(N-1):Fs);
A0=1;
A1=0.003;
A2=10e-4;
f0=220;
f1=240;
f2=230;
s=A0*cos(2*pi*f0*t)+A1*cos(2*pi*f1*t)+A2*cos(2*pi*f2*t);
plot(f,mag2db(abs(fft(s))));

Accepted Answer

David Goodmanson
David Goodmanson on 24 Jan 2017
hi Alexander I assume you are looking for a couple of peaks at -6 dB. Otherwise this answer will not be of help. But to get -6 dB you need to divide the fft result by N before taking mag2dB. Before getting into that, I believe your frequency grid with the factor of N-1 is not quite right. It should have a factor of N and should not end at Fs:
f = (0:N-1)*Fs/N;
That change only scales the frequency axis though, and puts the peaks in the right spot. It does not affect the peak value. You will still not get -6 dB (right now it's more like -7) because f0 = 220 does not represent an exact periodic frequency to the fft. To get a sharp peak at -6 dB, the frequency must be a multiple of Fs/N = 1000/1024. You could replace 220 by 225*1000/1024 which is pretty close, but I think the best way is to just use N = 1000. The fft is blazingly fast anyway, so unless you are in some production situation doing a ten million of these, N = 2^n is not really necessary.
  7 Comments
Alexander Voznesensky
Alexander Voznesensky on 22 Feb 2017
"Also, you have A2 = 10e-4 not 1e-4, so -60 dB."
Yes, it's my mistake. Now it's all right! Thank you very much!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!