【问题标题】:Finding a one second sample of a fourier transform in matlab在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 更容易。

标签: matlab signal-processing fft


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多