首页 文章

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

提问于
浏览
0

我正在编写一些读取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 回答

  • 1

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

相关问题