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