在matlab中找到一个傅里叶变换的一秒样本

时间:2011-11-30 01:24:46

标签: matlab signal-processing fft

我正在写一些读取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)));

当我绘制文件的任何一秒时,频率不会像它们应该的那样大。我认为我的索引可能是错误的,但我无法找到我错过的地方。

1 个答案:

答案 0 :(得分:1)

对于1秒数据的FFT,对于从0到FFT长度一半的索引,得到的频率范围为0到FS / 2。对于实际输入,另一半只是前半部分的共轭对称反射。