2011-11-30 64 views
0

我正在写一些读取wav声音文件的MATLAB代码,然后对收到的信号进行傅里叶变换。我试图在声音的1秒段中找到声音中的频率(应该在1000-4000hz左右),但是我的文件将我的频率返回到接近500Hz或更低的频率。在matlab中查找傅里叶变换的一秒样本

我的代码将信号分成几秒钟,然后每秒钟进行傅立叶变换。 (我的声音文件中有大约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))); 

当我绘制文件的任何第二长度,所述频率不是一样大,因为它们应该是。我认为我的索引可能是错的,但我找不到错过的位置。

+0

您可能会发现使用'periodogram'而不是'fft'更容易。 –

回答

1

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