【问题标题】:From time domaine to frequency domain从时域到频域
【发布时间】:2018-08-21 15:34:23
【问题描述】:

我的 MATLAB 程序有问题。我试图找到一个截止频率来为罗盘数据创建一个低通滤波器。我正在尝试从时域转到频域并找到一个Fc,所以我使用了 FFT,但似乎它不起作用。

这就是我所做的:

dataset=xlsread('data.xlsx','Feuil1','A1:A751');
t=1:length(dataset);
z=abs(fft(dataset));
subplot(2,2,3)
plot(dataset)
title('dataNonFiltrer')
subplot(2,2,4)
plot(z)
title('frequenciel')

我得到这个愿望似乎是不正确的:

【问题讨论】:

  • “不正确” 您希望看到什么?您已经成功绘制了 FFT 的输出,如果这不是您期望看到的,那么请分享您的期望,以便我们为您指明正确的方向。
  • 感谢您编辑我的消息并感谢您的回复,我希望在大约 100 赫兹的频率域中看到一个峰值......但我看到这里是一个 0 的峰值,这意味着它是不正确,而且在频率上,y 轴应该在频域中,但它仍然在时域 [0,400] 上,所以我有点困惑。对不起我的英语...... :)
  • 我要检查的第一件事是数据是否已从“data.xlsx”文件中正确读取,甚至可以在 Excel 中绘制并查看图表是否匹配。似乎您正在尝试从文件中读取 751 个值,但是当您在 MatLab 中绘制它时,x 轴从 0 到 ~375,我认为该图上应该有 ~751 个值但也许我缺少一些东西。
  • 0 处的峰值是直流分量。
  • 顺便说一句,您没有正确绘制它。查看文档以了解如何绘制 fft 组件。例如,注意它是对称的

标签: matlab filter fft lowpass-filter


【解决方案1】:

您只是没有正确绘制数据。

要绘制信号 Xfft,请执行 (from the docs):

Fs = 1000;   % Sampling frequency of your data. YOU NEED TO KNOW THIS, change             

L = length(X);             % Length of signal
Y = fft(X);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
plot(f,P1) 
title('frequenciel X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 2011-02-24
    • 2012-02-22
    • 2012-12-11
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多