如何在Matlab中从复数FFT中得到正弦/余弦函数系数?

时间:2011-10-29 09:29:48

标签: matlab fft

我正在研究一种控制振动机器人手臂运动的控制系统。因为有一些死区时间,我需要研究有点嘈杂的信号的未来。 我的想法是使用采样信号中的频率并产生可用于外推的傅里叶函数。

我的问题:我已经拥有信号矢量的FFT(例如包含60-100个值)并且可以看到幅度谱中的主要频率。现在我想要一个适合信号的函数f(t),去除一些噪声,并可用于预测信号的不久的将来。如何从复数FFT数据中计算正弦/余弦函数的系数?

非常感谢你!

2 个答案:

答案 0 :(得分:2)

AFAIR FFT基本上将输出作为具有不同频率的正弦函数之和。每个频率的重要性是每个峰值的高度。所以你真正想做的就是过滤掉一些频率(即手臂的高频率轻轻移动),然后再回到时域。

在matlab中,这应该像通过你从fft得到的向量,将一些值设置为0(或做一些更复杂的东西),然后使用ifft回到时域并根据你得到了什么。

在这样做时你还应该考虑一件事 - 奈奎斯特频率 - 这意味着你在fft上获得的最高频率是采样频率的一半。

答案 1 :(得分:1)

如果对FFT孔径长度内不是周期性的数据使用FFT,则可能需要使用窗口来减少由于“频谱泄漏”引起的杂散频率。用于更好地估计“bin之间”频率内容的频率估计技术也可能是合适的。每个余弦正弦波相对于窗口边缘的相位通常为atan2(imag [i],real [i])。频率取决于采样率和箱数与FFT的长度。

您可能还想研究使用卡尔曼滤波器而不是FFT。

补充:如果您的信号在FFT长度中不是完全周期性的,那么您可能希望在FFT之前进行快移以将得到的相位测量参考点移动到数据矢量的中心,而不是可能的不连续的圆形边缘。