我想知道我是否以正确的方式在 MATLAB 中使用傅立叶变换。我想要一首歌中频率的所有平均幅度。出于测试目的,我使用了贝多芬“为 Elise”的免费 mp3 下载,我使用Audacity将其转换为 8 kHz 单声道文件。
我的 MATLAB 代码如下:
clear all % be careful
% load file
% Für Elise Recording by Valentina Lisitsa
% from http://www.forelise.com/recordings/valentina_lisitsa
% Converted to 8 kHz mono using Audacity
allSamples = wavread('fur_elise_valentina_lisitsa_8khz_mono.wav');
% apply windowing function
w = hanning(length(allSamples));
allSamples = allSamples.*w;
% FFT needs input of length 2^x
NFFT = 2^nextpow2(length(allSamples))
% Apply FFT
fftBuckets=fft(allSamples, NFFT);
fftBuckets=fftBuckets(1:(NFFT/2+1)); % because of symetric/mirrored values
% calculate single side amplitude spectrum,
% normalize by dividing by NFFT to get the
% popular way of displaying amplitudes
% in a range of 0 to 1
fftBuckets = (2*abs(fftBuckets))/NFFT;
% plot it: max possible frequency is 4000, because sampling rate of input
% is 8000 Hz
x = linspace(1,4000,length(fftBuckets));
bar(x,fftBuckets);
然后输出如下所示:
- 有人可以告诉我我的代码是否正确吗?我特别想知道 0 附近的峰值。
- 为了规范化,我必须除以
NFFT
orlength(allSamples)
吗? - 对我来说,这看起来并不像条形图,但我想这是由于我正在绘制的许多值?
感谢您的任何提示!