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

Posted

技术标签:

【中文标题】在matlab中查找傅立叶变换的一秒样本【英文标题】:Finding a one second sample of a fourier transform in matlab 【发布时间】: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 更容易。 【参考方案1】:

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

【讨论】:

以上是关于在matlab中查找傅立叶变换的一秒样本的主要内容,如果未能解决你的问题,请参考以下文章

语音识别基于傅立叶变换0-9的数字语音识别matlab源码

为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

matlab或mathematica怎样实现对离散点的傅立叶变换和逆变换

MATLAB实现图像的傅立叶变换

直接傅立叶变换的最大值

离散傅立叶变换频率界限?