在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中查找傅立叶变换的一秒样本的主要内容,如果未能解决你的问题,请参考以下文章
为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换