Matlab 声音分析FFT

Matlab 声音分析FFT,matlab,audio,fft,Matlab,Audio,Fft,我正在寻找从一台连接到DAQ板的麦克风来收集数据的机器上分析声音。数据存储在excel文件中,然后我想在MATLAB中读取这些数据并执行FFT,以查看哪些频率会导致最大的噪声幅度。为了测试我的系统,我通过一个函数发生器将一些已知的频率输入DAQ。然而,当我将一个400Hz的信号从函数生成器馈送到DAQ,收集数据,上传到MATLAB并绘制它时,我在400Hz时没有看到任何音调,只有一些在更高的频率下。这是我的代码的问题吗 y = xlsread('TrialExcel400HzOscillosco

我正在寻找从一台连接到DAQ板的麦克风来收集数据的机器上分析声音。数据存储在excel文件中,然后我想在MATLAB中读取这些数据并执行FFT,以查看哪些频率会导致最大的噪声幅度。为了测试我的系统,我通过一个函数发生器将一些已知的频率输入DAQ。然而,当我将一个400Hz的信号从函数生成器馈送到DAQ,收集数据,上传到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));      

“我通过一个函数发生器将一些已知频率输入DAQ”——那么对于其他频率它工作正常吗

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

考虑到你的信号不到0.1秒,我预计会看到大约40个周期的正弦波(实际上,因为你只画了0.05秒,所以在你的图表中正好是20个周期)。这个信号显然不是这样


用于计算和绘制光谱幅度的代码正常。

什么是
n
?是否为长度(y)?这与nfft相比如何?因为这里要做的是计算信号中第一个
nfft
样本的DFT,而不是信号中第一个
nfft
频率的DFT。我建议改为设置
nfft=length(y)
!看起来我有点多余,因为nfft和length(y)是相同的值。DAQ只返回4096点。不,我尝试过的任何频率都不起作用。谢谢你的帮助!