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

问题描述 投票:2回答:2

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

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

非常感谢!

matlab fft
2个回答
2
投票

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

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

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


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.