FFT算法的频率准确性问题

FFT算法的频率准确性问题

1、问题描述

做项目需要对采样的正弦波数据进行幅值解析,因为不需要考虑相位关系,所以直接用FFT算法比较简单,而且matlab有封装好的函数,网上也有很多基于C和C++的源代码,学习起来也非常的方便。但是在计算频率时出现了得不到目标信号频率的准确值,而在频率周围的幅值比较大的问题。

eg目标信号为1kHz幅值为10与1.9khz幅值为20的正弦波,FFT后的2khz信号幅值在1.8kHz和2kHz比较大,而1.9kHz的值明显误差较大,如图1、图2:

在这里插入图片描述

图1:对1kHz与2KHz叠加后的曲线进行傅里叶分析

图2:FFT曲线在2kHz位置明显有误差

2、问题原因

采样数据在经过FFT算法之后可以得到离散信号在对应频率上的幅值。但是由于采样频率和采样点数量的选择问题,导致不能显示出对应频率点的幅值。

上面所提供示例只能列出1.8k与2kHz频率点,而无法列出1.9kHz目标频率点。

在这里插入图片描述

图3:图像无法标注出1.9kHz频率,导致计算有误差

3、解决方案

选择合适的采样频率和采样点数进行分析,使得可以计算出目标曲线的对应频率值即可得到非常高的FFT结果

另:

采样频率为 fs

采样点有 n

FFT后第 m 个点的频率为 m*fs/n ,则 m 必然为整数

若需要分析的信号包含两个频率的正弦波,其频率分别为 f1f2

则需要满足:

m1*fs/n=f1

m2*fs/n=f2

即:m1=f1*n/fsm2=f2*n/fs 均为整数

满足以上关系即可以获得比较准确的FFT结果。

以上举例中,将第二个频率改成 2kHz 即可满足以上关系,得到的FFT图像如下:

在这里插入图片描述

图4:图像可以标注出2kHz频率,计算准确
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值