【问题标题】:Finding the dominant frequency of a time series data using fft matlab使用 fft matlab 查找时间序列数据的主频率
【发布时间】:2015-05-20 02:09:55
【问题描述】:

我正在尝试使用 matlab 中的 fft 函数确定时间序列数据的主频率。我的数据表示为一个向量,而我的时间尺度也是一个向量。以下是我的示例代码:

Fs = 10; % sampling frequency 1 kHz
t =  [0,10,20,30,40,50,60,70,80,90]; % time scale
x = [10,120,130,120,120,100,123,456,78,89]; % time series
plot(t,x), axis('tight'), grid('on'), title('Time series'), figure
nfft = 512; % next larger power of 2
y = fft(x,nfft); % Fast Fourier Transform
y = abs(y.^2); % raw power spectrum density
y = y(1:1+nfft/2); % half-spectrum
[v,k] = max(y); % find maximum
f_scale = (0:nfft/2)* Fs/nfft; % frequency scale
plot(f_scale, y),axis('tight'),grid('on'),title('Dominant Frequency')
fest = f_scale(k); % dominant frequency estimate
fprintf('Dominant freq.: true %f Hz, estimated %f Hznn', f, fest)
fprintf('Frequency step (resolution) = %f Hznn', f_scale(2))

问题是我这里的主导频率是 0,不太确定它是否正确。请有人对此提供反馈,特别是如果 Fs 在这种情况下很重要!

【问题讨论】:

  • 您正在分析的数据非常短且非周期性。您不太可能从对这些数据的频率分析中获得任何有用的信息。
  • 谢谢...那代码呢?
  • 尝试通过总结不同的正弦来组合你的数据,看看你是否得到了最强大的频率。并注意奈奎斯特频率..
  • 代码似乎没有问题,0 频率表示类似 DC 信号,您的 fft 图是什么样的? y = fft(x,nfft) 应该产生频率响应。也可能是由于泄漏,尝试将 fs 设置为更高的值,看看响应是什么样的
  • Fs = 1000; % 采样频率 1 kHz t = 0:1/Fs:0.296; % 时间尺度 f = 100; % Hz,嵌入的主频率 x = cos(2*pift) + randn(size(t)); % 时间序列 谢谢..我通过替换它修改了代码,现在我的主频率是 100,这是预期的。泄漏是什么意思?

标签: matlab time-series fft forecasting


【解决方案1】:

试试下面的

1) 生成包含多个频率的信号

x = 0:0.1:100;

y = 0;

对于 i = 1:10,

y = y + sin(2*pi*rand(1)*10*x);

结束

2) 使用 pwelch 获得功率谱。作为窗口 fct 使用 flattopwin。这样可以确保扇形线很小(信号幅度正确)

3) 使用 [link]http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.fhnw.ch%2Ftechnik%2Fime%2Fpublikationen%2F2012%2Fhow-to-use-the-fft-and-matlab2019s-pwelch-function-for-signal-and-noise-simulations-and-measurements&ei=V3EIVZrhHMPeOLeugbAH&usg=AFQjCNF6Fw1yrHI8EN20vzaBpJFXGjARxA&sig2=8VueptB1v3SA2Xp4A9cyYg&bvm=bv.88528373,d.ZWU&cad=rja[/link] 中的缩放方程 (11) 获得正确的幅度。

4) 检查幅度:将 PSD 转换为线性频谱 --> 这不是必需的。但是,我经常想知道幅度的值。但是,请注意,pwelch 计算的是 rms 幅度而不是峰值幅度。得到峰值幅度乘以 sqrt(2)。

最好的,乔纳斯

【讨论】:

  • 好的,我也试试这个
【解决方案2】:

如果输入数据向量的平均值相对于数据元素较大,则表示 DC 偏移量很大,并且可能在 FFT 结果中显示为 0 的主频率。您可以从每个元素中减去数据向量的平均值,以消除此 DC 偏移。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 2013-10-13
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多