我正在使用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,我真的很想知道。或者,只要你看到一种方法来完成我在这里所做的事情,那也会很棒。
答案 0 :(得分:1)
要近似估计什么频率与哪个索引相关,您需要知道发送到FFT的数据的采样率(Fs)以及FFT的长度(N):
f ~= index * Fs / N
这是你遗漏的操作。