【发布时间】:2011-11-30 01:24:46
【问题描述】:
我正在编写一些读取 wav 声音文件的 MATLAB 代码,然后对接收到的信号进行傅立叶变换。我试图在声音的 1 秒段中找到声音中的频率(应该在 1000-4000hz 左右),但我的文件返回的频率接近 500hz 或更低。
我的代码将信号分成几秒钟,然后对每一秒钟进行傅立叶变换。 (我的声音文件中大约有 15 秒)。
Fs 是采样率。 L是样本的长度
[signal, Fs, bits] = wavread ('sound.wav');
L=length(signal);
f=Fs*linspace(0,1,L/2+1);
one_sec_sample=zeros(Fs,15);
Y_code = zeros(Fs,15);
for i=1:15
one_sec_sample(:,i) = signal(((i-1)*Fs+1):(i*Fs));
Y_code(:,i) = fft(one_sec_sample(:,i));
end
figure (1);
%plotting 1 second of the transform. Fs is 16000 for my sound.
plot(f(1:16000),abs(Y_code(1:16000)));
当我绘制文件的任何一秒时,频率没有应有的那么大。我认为我的索引可能是错误的,但我找不到我错过的地方。
【问题讨论】:
-
您可能会发现使用
periodogram比使用fft更容易。
标签: matlab signal-processing fft