huhucu 发表于 2008-4-9 16:21

利用FFT求简谐波频率幅值的问题

假设有信号x=a0*sin(2*pi*f0*t)+a1*sin(2*pi*f1*t),我想把其中的a0.a1.f0.f1检测出来,我的想法是先利用最简单的FFT,再改善算法。但是FFT只有幅频图中的数据与设定值相差很大,看过论坛的一些帖子,感觉还是似懂非懂,仅仅是*2/N的问题吗?

[ 本帖最后由 无水1324 于 2008-7-11 21:23 编辑 ]

songzy41 发表于 2008-4-9 17:37

看了楼主提供的程序,f1是f0的一倍,而幅值上要相差50db左右。要求出f0的幅值,可以有2种方法,一种是用窗函数,选择衰减较大的窗函数(现在用矩形窗,一个倍频程衰减6dB),所以很容易把f0淹没(或虚假的两者叠加在一起)而检不出正确的参数;另一种方法是对f1滤波,例如用自适应带陷滤波,对滤波后的信号检测f0的参数。

songzy41 发表于 2008-4-9 17:46

还可以有一个方法,就是整周期采样,使f0=ndf、f1=mdf,df是FFT后的分辨率,n和m都为整数,即在分析中没有泄漏发生。

huhucu 发表于 2008-4-10 18:11

谢谢!我需要检测出间谐波的幅值和频率, 整周期采样实现起来比较困难,加窗函数和插值应该能提高检测精度。

zhwang554 发表于 2008-7-6 20:32

用校正法求谐波频率幅值

要求频率,振幅必须要用校正法, 你的程序只作FFT幅频图不够,

这儿提供一个FFT和apFFT组合校正法程序, 可以校正相位,频率,振幅

对你提供的二个正弦波组成的信号, 运行结果:
频率校正值         fff1 =25                   fff2 =50
振幅校正值      aaa1 =1.8598         aaa2 =   310
初相位校正值   ppp1 =360度         ppp2 =   360度


附校正程序


[ 本帖最后由 zhwang554 于 2008-7-6 20:58 编辑 ]

jytan 发表于 2008-7-7 09:21

要对应上幅值肯定要注意归一化的问题,也就是你说的*2/N的问题。

jytan 发表于 2008-7-7 09:23

因为两个信号的幅值相差太大,肯定要滤掉大的一个,更利用检测小信号。

同时要想频率更接近一些,
可以加大数据长度,
或者像5楼说的,进行频率细化:可参考丁康教授的相关文献。

无水1324 发表于 2008-7-11 21:26

回复 2楼 的帖子

呵呵,终于找到一个答案了。我原来有一个问题也可以用这个方法解决了。

弯弓射大雕 发表于 2008-8-23 09:46

最好是用三角回归法

6314323 发表于 2008-12-29 19:25

fft的幅值与实测幅值相差较大,肯定需要校正,但具体应该怎么做,还是看看论坛中的相关帖子,最近我一直在关注。

kaka625 发表于 2011-7-4 14:46

学习了,APfft应该可以
页: [1]
查看完整版本: 利用FFT求简谐波频率幅值的问题