我正在尝试使用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))
请帮忙!谢谢!
答案 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)|')
我希望这对你有用。该图不会像您所示的那样步骤,但也可以实现 - 使用“阶梯”绘图功能。