声音分析 FFT
Posted
技术标签:
【中文标题】声音分析 FFT【英文标题】:Sound Analysis FFT 【发布时间】:2018-06-25 17:39:13 【问题描述】:我正在寻找分析机器的声音,该机器带有连接到 DAQ 板的麦克风以收集数据。数据存储在一个 excel 文件中,然后我想在 MATLAB 中读取该数据并执行 FFT 以查看导致最大噪声幅度的频率。为了测试我的系统,我通过函数发生器将一些已知频率输入 DAQ。然而,当我从函数发生器向 DAQ 输入 400Hz 信号,收集数据,将其上传到 MATLAB 并绘制它时,我没有看到任何 400Hz 的音调,只有一些更高频率的音调。这是我的代码有问题吗?
y = xlsread('TrialExcel400HzOscilloscope.xlsx');
y = detrend(y);
n = length(y);
Fs = 48000;
nfft = 4096;
Ts = 1/Fs;
t = 0:Ts:(n*Ts)-Ts;
numUniq = ceil((nfft+1)/2);
f = (0:numUniq-1)'*Fs/nfft;
figure(1)
hAx(1) = subplot(211);
hLine(1) = line('XData',t,'YData',nan(size(t)), 'Color','b', 'Parent', hAx(1));
xlim([0 0.05]);
ylim([-10 10]);
xlabel('Time (s)');
ylabel('Amplitude (Volts)');
title('Time Domain');
hAx(2) = subplot(212);
hLine(2) = line('XData', f, 'YData', nan(size(f)), 'Color', 'b', 'Parent', hAx(2));
grid
xlim([0 25000]);
ylim([0 80]);
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Frequency Domain');
a = 20*log10(abs(fft(y,nfft)));
set(hLine(1), 'YData',y);
set(hLine(2), 'YData', a(1:numUniq));
【问题讨论】:
什么是n
?是length(y)
吗?这与nfft
相比如何?因为您在这里所做的是计算信号中第一个 nfft
样本的 DFT,而不是信号中的第一个 nfft
频率。我建议改为设置nfft=length(y)
。
是的 n 是长度(y) 我只是忘了定义它!看来我有点多余,因为 nfft 和 length(y) 是相同的值。 DAQ 仅返回 4096 个点。
【参考方案1】:
“我通过函数发生器将一些已知频率输入到 DAQ”——那么其他频率是否可以正常工作?
您看到的峰值可能是 DAG 中的噪声或频率发生器的问题。
考虑到您的信号略低于 0.1 秒,我希望在其中看到大约 40 个正弦波周期(实际上,由于您仅绘制了 0.05 秒,因此在您的图表中正好是 20 个周期)。这个信号显然不是这样的。
您用于计算和绘制频谱幅度的代码是可以的。
【讨论】:
不,它在我尝试过的任何频率下都不起作用。感谢您的帮助!以上是关于声音分析 FFT的主要内容,如果未能解决你的问题,请参考以下文章