0

我有一个 2 列向量,其中包含数据子集的时间和速度,如下所示:

5 40
10 37
15 34
20 39

等等。我想获得速度的傅立叶变换以获得频率。我将如何使用快速傅立叶变换(fft)来做到这一点?

如果我的向量名称是 sampleData,我已经尝试过

fft(sampleData);

但这给了我一个实数和虚数的向量。为了能够获得合理的数据来绘制,我将如何去做呢?

4

2 回答 2

3

傅立叶变换将产生一个复矢量,当您得到一个频率矢量时,每个频率都有一个频谱相位。这些阶段可能非常重要!(它们包含时域信号的大部分信息,没有它们你不会看到干扰效应等......)。如果要绘制功率谱,可以

plot(abs(fft(sampleData)));

要完成这个故事,您可能需要 fftshift,并生成一个频率向量。这是一个更详细的代码:

% 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))
于 2012-10-24T17:43:09.987 回答
0

我建议您备份并考虑您要完成的工作,以及 FFT 是否适合您的情况。你说你“想要……得到一个频率”,但你到底是什么意思?你知道这个数据只有一个频率分量,想知道频率是多少吗?您想知道组件的频率和相位吗?您是否只想大致了解存在多少离散频率分量?您对测量中的噪声频谱感兴趣吗?您可以就数据集中的“频率”提出许多问题,而 FFT 和/或功率谱是否是获得答案的最佳方法取决于问题。

在上面的评论中,您问“有没有办法将功率谱与时间值相关联?” 这让我觉得这是一个困惑的问题,但也让我觉得你真正想要回答的问题可能是“我有一个频率随时间变化的信号,我想估计频率与时间的关系”。我敢肯定,在过去的几个月里,我在 SO 上看到过类似的问题,所以我会搜索它。

于 2012-10-24T23:16:43.443 回答