【问题标题】:Matlab Fourier transform of dsp.Audiorecorder in real-timedsp.Audiorecorder的Matlab傅里叶变换实时
【发布时间】:2015-05-07 15:22:11
【问题描述】:

我正在使用dsp.Audiorecord 获取实时麦克风输入。声音输入是一系列不同频率的正弦曲线,频率范围从 500 到 2000Hz。每个声音都持续一秒钟。

我想实时知道当前罪的频率是多少,并且还想知道频率相同的两个罪一个接一个地变化。这就是我使用dsp.Audiorecord 的原因。

这就是我的代码现在的样子:

Microphone = dsp.AudioRecorder;
tic;
while(toc<30)
    audio = step(Microphone);
    [x, indexMax] = max(abs(fft(audio(:,1)-mean(audio(:,1)))));
    indexMax
end

indexMax 的所有节目都是从 25 到 40 范围内的数字。为了检索 [500;2000] 中的原始频率,显然遗漏了一个操作。

我也尝试将dsp.FFT() 直接应用于音频,但它告诉我:

Error using dsp.FFT/pvParse
Invalid property/value pair arguments.

如果有任何其他方法可以在dsp.Audiorecorder 上执行实时 FFT,我真的很想知道。或者,如果您看到一种方法来完成我在这里所做的事情,那也很棒。

【问题讨论】:

  • 我从来没有听说过这种数据表示,是不是就像名字所说的“按顺序”频率表示?因为如果是我想我可以利用它:)
  • hotpaw2 有你的答案。对于 dsp.FFT,您首先使用 fftObj = dsp.FFT; 创建对象。然后通过调用 step 方法来使用它,如 y = step(fftObj, u);

标签: matlab signal-processing fft audio-recording


【解决方案1】:

要近似估计什么频率与什么指数有关,您需要知道发送到 FFT 的数据的采样率(Fs),以及 FFT 的长度(N):

f ~= index * Fs / N

这就是你遗漏的操作。

【讨论】:

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