【发布时间】: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 个点。