首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声音分析FFT

声音分析FFT
EN

Stack Overflow用户
提问于 2018-06-26 01:39:14
回答 1查看 173关注 0票数 0

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

代码语言:javascript
复制
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));      

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 03:42:35

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

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

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

你的计算和绘制光谱大小的代码是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51029074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档