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

Posted

技术标签:

【中文标题】dsp.Audiorecorder的Matlab傅里叶变换实时【英文标题】:Matlab Fourier transform of dsp.Audiorecorder in real-time 【发布时间】: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); 【参考方案1】:

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

f ~= index * Fs / N

这就是你遗漏的操作。

【讨论】:

以上是关于dsp.Audiorecorder的Matlab傅里叶变换实时的主要内容,如果未能解决你的问题,请参考以下文章

DSP音频功能块到音频输出

matlab计算结果问题

2021-05-21 Matlab实现快速傅里叶逆变换

用 Matlab 进行傅里叶变换

2021-05-10 Matlab短时傅里叶变换和小波变换的时频分析

2021-05-20 Matlab实现傅里叶变换