关于覆盆子pi / FFT的matlab / simulink吉他调谐器

时间:2016-11-18 14:10:14

标签: matlab audio raspberry-pi fft simulink

我需要创建一个带有simulink的吉他调音器,它在树莓派上运行,但我遇到了几个问题。

首先,我得到了这个代码来分析信号的频率:

Fs = 96000;

t = linspace(0,1,Fs);
x = cos(2*pi*4999*t)+randn(size(t));


xdft = fft(x);
fftabs = abs(xdft(1:length(x)/2+1));
freq = 0:Fs/length(x):(Fs/2);
[~,maxindex] = max(fftabs);

mx = freq(maxindex);
res = fftabs;

plot(fftabs);
fprintf('Frequency: %s Hz\n',mx );

它做得很好,当我运行它时,我得到了预期的结果“4999”。

但是当我用“音频设备阅读器”-Block的缓冲输出替换“x”时,我得到一些奇怪的结果,或者我的结果等于0。

在下图中,您可以看到我当前的型号: enter image description here

我目前正在Windows上进行测试,这就是为什么我没有使用“ALSA Audio Capture”块.MATLAB函数包含以下代码:

function res = fcn(x)
Fs = 96000;

xdft = fft(x);
fftabs = abs(xdft(1:length(x)/2+1));
freq = 0:Fs/length(x):(Fs/2);
[~,maxindex] = max(fftabs);

mx = freq(maxindex);
res = fftabs;

fprintf('Frequency: %s Hz\n',mx );

end

下一张图片包含Matlab函数输入和输出的可视化 enter image description here 输入是440赫兹的音调,但作为最大值,我仍然得到656赫兹。

任何想法,是什么导致我的问题? 提前致谢 米克

(我目前正在Windows上测试,这就是为什么我没有使用“ALSA Audio Capture”块。)

0 个答案:

没有答案