频率:在MATLAB中使用FFT的分贝图

时间:2013-12-29 07:43:22

标签: matlab audio fft wav pcm

我正在尝试使用MATLAB导入WAV文件并创建如下所示的图表类型。我基本上试图提取频率信息并根据分贝绘制它。这是我正在使用的代码,但它似乎没有正确地提取频率信息:

[x fs]=wavread('filename.wav');
dt=1/fs;%% time interval

X=fft(x);
df=1/(length(x)*dt); %% frequency interval
f=(1:length(X))*df;%% frequency vector

%% frequency domain plot, freq in hertz
figure
plot(f,abs(X))

Frequency:Decibel Diagram

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:2)

在您的代码中,“X”包含波形信息,而不是频率信息。要获取声音文件的频率信息,您可以使用FFT函数。我使用这个(更详细,但仍然很简单)代码来完成你想做的事情:

[FileName,PathName]=uigetfile('*.wav');
[y, Fs, nbits] = wavread(fullfile(PathName,FileName));
length_y=length(y);

NFFT = 2^nextpow2(length_y); % Next power of 2 from length of y
fft_y=fft(y,NFFT)/length_y;
f = Fs/2*linspace(0,1,NFFT/2+1);

semilogy(f,abs(fft_y(1:length(f))));
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

我希望这对你有用。该图不会像您所示的那样步骤,但也可以实现 - 使用“阶梯”绘图功能。