dsp.Audiorecorder 的实时 Matlab 傅里叶变换

Matlab Fourier transform of dsp.Audiorecorder in real-time

我正在使用 dsp.Audiorecord 获取实时麦克风输入。声音输入是一系列频率从 500 到 2000Hz 不等的正弦波。每个声音一秒钟。

我想实时知道当前sin的频率是多少,也想区分两个频率相同的sin一个接一个。这就是我使用 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,我真的很想知道。或者,如果您能找到一种方法来完成我在这里所做的工作,那也很棒。

要大致估计什么频率对应什么索引,您需要知道发送到 FFT 的数据的采样率 (Fs),以及 FFT 的长度 (N):

f ~= index * Fs / N

这是您遗漏的操作。