【问题标题】:Calculate frequency bins of an audiosignal计算音频信号的频率区间
【发布时间】:2017-01-26 22:19:12
【问题描述】:

我正在对包含语音和音乐的音频文件执行 fft (stft)。我从信号中取出 1-200 的范围,并将其保存在一个变量中,例如,frequency_band1。我如何从变量中计算频率区间,该变量存储我之前应用过 fft 的特别选择的信号。?我想,在某处读到,我需要计算 fs/fftpoints。就我而言,44100/4096。我是否将它与我的变量 frequency_band1*(44100/4096) 相乘?这是在 matlab 上完成的,我需要用 stft 来完成。

【问题讨论】:

  • DFT (FFT) 的输出值位于频率 [0:n-1]/n*fs,其中 n 是 DFT 大小,fs 是采样频率
  • @Lusi Mendo,带“n”,你的意思是fft点吗?我不太确定,因为我是 matlab 的新手。这与我的问题有什么关系,如果您能启发我,我将不胜感激。
  • 我已经包含了一个示例的答案
  • @Luis Mendo 好的,谢谢,现在我明白了。最后一个问题,很抱歉打扰了,但是“numel”是否代表正弦曲线中的元素数量,以便您可以创建频率向量?
  • 是的,numel 是向量 x 的大小。您实际上应该使用fft 的输出大小,以防它与输入的大小不同(也就是说,如果您使用fft 的第二个参数)。我已经编辑了

标签: matlab audio signal-processing dft


【解决方案1】:

DFT (FFT) 的输出值位于频率 (0:n-1)/n*fs,其中 n 是 DFT 大小,fs 是采样频率。

这是一个例子。这会创建一个已知频率的正弦曲线,执行整个信号的 DFT(所以n 是信号大小),并使用上述频率值绘制频谱。

fs = 44100; % sample frequency
t = 0:1/fs:.1; % 0.1-second time axis
x = sin(2*pi*300*t); % sinusoid of frequency 220 Hz
X = fft(x); % DFT of x
f = (0:numel(X)-1)/numel(X)*fs; % frequency axis of DFT
plot(f, abs(X)) % plot the spectrum in absolute value
grid % add grid
axis([0 1000 -500 2500])

您可以检查该信号的谱线是否在其应有的位置,即300 (Hz)。

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2017-10-25
    • 2015-06-10
    • 2012-02-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多