我有一个2列向量,包含数据子集的时间和速度,如下所示:
5 40
10 37
15 34
20 39
等等。我希望得到速度的傅立叶变换以获得频率。我如何通过快速傅里叶变换(fft)来实现这一目标?
如果我的矢量名称是sampleData,我试过
fft(sampleData);
但这给了我一个实数和虚数的向量。为了能够获得合理的数据,我将如何做到这一点?
答案 0 :(得分:3)
傅里叶变换将产生一个复杂的矢量,当你得到一个频率矢量时,每个都有一个光谱相位。这些阶段非常重要! (它们包含时域信号的大部分信息,如果没有它们,你将看不到干扰效应......)。如果你想绘制功率谱,你可以
plot(abs(fft(sampleData)));
要完成故事,您可能需要进行移位,并生成频率向量。这是一个更精细的代码:
% Assuming 'time' is the 1st col, and 'sampleData' is the 2nd col:
N=length(sampleData);
f=window(@hamming,N)';
dt=mean(diff(time));
df=1/(N*dt); % the frequency resolution (df=1/max_T)
if mod(N,2)==0
f_vec= df*((1:N)-1-N/2); % frequency vector for EVEN length vector
else
f_vec= df*((1:N)-0.5-N/2);
end
fft_data= fftshift(fft(fftshift(sampleData.*f))) ;
plot(f_vec,abs(fft_data))
答案 1 :(得分:0)
我建议您备份并考虑您要完成的任务,以及FFT是否适合您的情况。你说你想要...获得一个频率",但你究竟是什么意思呢?您是否知道此数据只有一个频率成分,并想知道频率是多少?您想知道组件的频率和相位吗?您是否想要大致了解存在多少个离散频率组件?您对测量中的噪声频谱感兴趣吗?你可以询问很多问题"频率"在数据集中,FFT和/或功率谱是否是获得答案的最佳方法取决于问题。
在上面的评论中你问过"有没有办法将功率谱与时间值相关联?"这让我感到困惑,但也让我觉得你真正想要回答的问题可能是"我有一个频率随时间变化的信号,我希望估计频率与时间的关系#34 ;.我确信在过去的几个月里,我已经在SO上看到了这样的问题,所以我会搜索一下。