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傅里叶变换实时的主要内容,如果未能解决你的问题,请参考以下文章