Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用fft-matlab求时间序列数据的主频_Matlab_Time Series_Fft_Forecasting - Fatal编程技术网

用fft-matlab求时间序列数据的主频

用fft-matlab求时间序列数据的主频,matlab,time-series,fft,forecasting,Matlab,Time Series,Fft,Forecasting,我试图使用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'),

我试图使用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,我不确定它是否正确。请提供一些反馈,特别是如果财政司司长在这种情况下很重要

试试下面的方法

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

x=0:0.1:100

y=0

因为i=1:10

y=y+sin2*pi*rand1*10*x

结束

2使用pwelch获取功率谱。作为窗口fct,请使用flattopwin。这确保了扇形loos很小,信号的振幅将是正确的

3使用[link]中的缩放等式11获得正确的振幅

4检查振幅:将PSD转换为线性频谱->这不是必需的。然而,我经常想知道振幅的值。但是,请注意,pwelch计算的是均方根振幅,而不是峰值振幅。将峰值振幅乘以sqrt2


最好是,Jonas

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

您正在分析的数据非常短且非周期性。你不大可能从这些数据的频率分析中得到任何有用的东西。谢谢……代码呢?试着通过总结不同的正弦来组合数据,看看你是否得到了最强大的正弦的频率。注意奈奎斯特频率。代码似乎没有问题,频率为0表示类似于直流信号,fft图是什么样子的?y=fftx,nfft应产生频率响应。也可能是由于泄漏,请尝试将fs设置为更高的值,然后查看响应的样子EFS=1000;%采样频率1 kHz t=0:1/Fs:0.296;%时间刻度f=100;%Hz,嵌入主频x=cos2*pift+randnsizet;%时间序列谢谢..我修改了代码替换了这个,现在我的主频是100,这是预期的。你说的泄漏是什么意思?好的,我也会试试这个