我需要创建一个带有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。
我目前正在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函数输入和输出的可视化 输入是440赫兹的音调,但作为最大值,我仍然得到656赫兹。
任何想法,是什么导致我的问题? 提前致谢 米克
(我目前正在Windows上测试,这就是为什么我没有使用“ALSA Audio Capture”块。)