Hello, for a final project I am doing a menu with the notes do, re and mi. The problem is that when I apply the Fourier transform fft, my spectrum looks very weird. Does anyone know if I'm doing anything wrong? Code: do=audioread('do.wav'); sound(do,44100) nota=audiorecorder(44100,16,1); disp('Grabando...') recordblocking(nota,4) disp('Listo.') bb=getaudiodata(nota); audiowrite('grabacion.wav',bb,88200) audio=audioread('grabacion.wav'); audiof=fft(audio); subplot(2,1,1); plot(audio) subplot(2,1,2); plot(audiof) sound(audio,44100) Image:

2 个评论

Please format your code using the "{} Code" button, such that it is readable. Attach images directly in the forum using the "Image" button instead of an external file hoster. Thanks.

请先登录,再进行评论。

 采纳的回答

Star Strider
Star Strider 2017-11-14

0 个投票

In the plot you posted, you are plotting the real and imaginary parts of the two-sided Fourier transform. You need to plot the magnitude (absolute value, using the abs function) instead.
A single-sided Fourier transform is easier to understand. See the documentation on the fft (link) function for details on correctly plotting a one-sided Fourier transform.

2 个评论

It was this, thank you very much! This was my first question here so I didn't know how to paste the code properly.
As always, my pleasure!
No worries — we were all new here once.

请先登录,再进行评论。

更多回答(1 个)

Did you read the documentation of fft. There you find an example for plotting:
Y = fft(audio);
L = length(audio);
FS = 44100;
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
plot(f,P1)

1 个评论

Thanks for this. Why did you divide by the L (length) when taking the magnitude?

请先登录,再进行评论。

类别

帮助中心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!

Translated by