【问题标题】:Dominating frequencies time series主导频率时间序列
【发布时间】:2016-08-23 07:07:55
【问题描述】:

我有一个时间序列数据。我使用matlab对其进行了fft:

ft=fft(data);

我们如何获得主导频率。我尝试取 ft 的最大值,但它似乎是错误的。我们如何获得主导频率

【问题讨论】:

  • 需要数据的采样率才能找到主导频率。
  • 我的数据的采样率为1
  • 你的意思是你的数据的采样频率是1Hz?
  • 我的时间序列是采样的,这样我在每个时间步都有一个值。
  • 我需要你的时间步长。它表示第一个样本和第二个样本之间的时间。

标签: matlab fft


【解决方案1】:

您需要取复数 FFT 输出的 幅度 并找到峰值:

ft=fft(data);
mag_ft = abs(ft);    % take magnitude of FFT complex output values

【讨论】:

  • 在我的代码中,我需要计算 1/主导频率。使用上面的代码,我得到最大频率为 1783.4,使得 1/1783.4 非常小。可以吗,如果我将 fft 标准化为 ft=fft(data)/length(data)?它是否会以负面的方式阻碍结果
  • 如果您只想找到最大峰值的 频率,那么无论是否标准化幅度都没有区别,因为您只是将所有幅度缩放相同的常数值。峰值仍将处于相同的频率。
【解决方案2】:

首先,需要频率轴来查找 fft 数据的频率。由于您的采样率仅为 1,因此您可以检查的最大频率为 0.5 Hz。

dt=1; % your time step

N=length(data);  % data length

df=1/(dt*N);  %frequency bin

f_axis=(0:N-1)*df; % frequency axis

然后,用频率轴绘制 fft 数据。

ft=fft(data);
plot(f_axis,abs(ft));

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 2013-02-12
    • 1970-01-01
    • 2013-10-13
    • 2018-06-24
    • 2021-05-12
    • 2018-02-03
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多