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
这是您遗漏的操作。
我正在使用 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
这是您遗漏的操作。