声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2181|回复: 6

[FFT] 请教:VC下实现apFFT,但幅度校正不准确,高手帮忙看看

[复制链接]
发表于 2009-11-20 12:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x

我在VC下实现了apFFT算法,但是幅度校正不准确,情况如下:
#define  DATA_PER_T    (512)   //采样点数
i - DATA_PER_T+1 2* DATA_PER_T – 1的范围。
Fsig是输入的信号频率。
测试信号:2.356+8.365 * cos(2 * M_PI * Fsig * (i-DATA_PER_T)/DATA_PER_T - M_PI * 1/6 )
所有数据采用float型,采用apFFT/apFFT算法,对相位、频率、幅度进行校正。
测试结果发现,相位和频率校正非常准确,但是幅度校正值较差。实际幅度为8.365,当频点在.9.4时(比如36.9、36.2、36.4等等),幅度校正结果在8.36左右,当从.4.8变化时,幅度由8.358105递减到8.335485,最大误差有0.38%。这是什么原因?是否有什么改进的方法让精度高一些?还是我的算法有什么问题?

幅度的校正算法如下:
p大于0.5时,也就是频点大于.5时,a2取最大点前面的一个,否则取最大点的幅值。
p为相位差,在0-1之间。
a = 2*M_PI*p*(1-p*p)/sin(M_PI*p);
a2 = (a*a)*a2/2;
a2即为校正的幅值。

详细测试结果见附件。初始相角值不正确,实际计算的不是按照下面的相角,另作了处理的。

[ 本帖最后由 fudeyun 于 2009-11-20 17:05 编辑 ]

log.txt

5.94 KB, 下载次数: 31

apFFT测试结果

回复
分享到:

使用道具 举报

发表于 2009-11-20 22:50 | 显示全部楼层

回复楼主fudeyun的贴子

你的程序对,但p大于0.5时,不在峰值处取值, 取最大点前面的一个,有时影响精度

    可参见whoru 发表于 2009-6-23 16:33 的贴子"求教:apFFT频谱校正问题!'中的程序

http://forum.vibunion.com/thread-83661-1-1.html
     这个程序始终在峰值处取值

      另外apfft程序中的hanning和hanning卷积窗 可改为 hann和hanning卷积窗 一试

[ 本帖最后由 zhwang554 于 2009-11-21 01:07 编辑 ]
 楼主| 发表于 2009-12-2 21:30 | 显示全部楼层

好的,我试试

多谢赐教,非常感谢!
发表于 2009-12-2 22:20 | 显示全部楼层

回复板凳fudeyun的贴子

可参见 振动论坛上  下日志
<apfft谱分析中的振幅校正精度>
zhwang554     2009-12-01 01:40
http://home.vibunion.com/blog-62061-17986.html

[ 本帖最后由 zhwang554 于 2009-12-2 22:23 编辑 ]
发表于 2011-5-22 11:23 | 显示全部楼层
王老师就是厉害啊!中国的学术强人!
发表于 2011-5-22 11:24 | 显示全部楼层
感谢楼主的提问?为中国的学术做出了贡献!
发表于 2011-5-22 11:25 | 显示全部楼层
APFFT是一个很好的算法,向王老师的科研团队致敬!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 10:27 , Processed in 0.057904 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表