声音分析FFT

时间:2018-06-25 17:39:14

标签: matlab audio fft

我希望分析一台带有麦克风的机器的声音,该麦克风连接到DAQ板上以收集数据。数据存储在一个excel文件中,然后我想在MATLAB中读取该数据并执行FFT,以查看导致最大幅度噪声的频率。为了测试我的系统,我通过函数发生器将一些已知的频率输入到DAQ中。但是,当我从函数发生器向DAQ馈入400Hz信号,收集数据,将其上传到MATLAB并绘制图时,我看不到任何400 Hz的音调,只有一些更高的频率。我的代码有问题吗?

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));      

output graph of 400Hz function generator tone

1 个答案:

答案 0 :(得分:0)

“我通过函数发生器将一些已知的频率输入到DAQ中” –那时它对其他频率工作正常吗?

您看到的峰值可能是DAG中的噪声或频率发生器出现问题。

考虑到您的信号不到0.1秒,我希望在其中看到大约40个正弦波周期(实际上,由于您仅绘制了0.05 s,因此在您的图形中恰好是20个周期)。这个信号显然不是这种情况。

您用于计算和绘制频谱幅度的代码就可以了。