我要加入 登录
声振论坛 返回首页

bcyangbc的个人空间 http://home.vibunion.com/?85116 [收藏] [复制] [分享] [RSS]

日志

[转]全相位FFT在VC下的测试结果和分析

已有 1118 次阅读2010-1-3 17:43 |

http://blog.163.com/fdy_001/blog/static/12010203320091027111614878/

关键字:全相位 FFT 校正精度

通过对apFFT算法在VC下的编码实现,证实了一些问题,也发现了一些问题。现在将我的测试过程和结果做一个叙述,以便为有需要的人提供一点参考。

首先,可以肯定的是,这个算法的意义,非常重大,毋庸置疑。在此,对王兆华教授及其团队致以崇高的敬意。但是,书中的一些数据和说法略失偏颇。我对信号处理知之甚少,工作的需要,做了一些了解,在此发表一点自己的观点和看法,欢迎指正。

我测试的结果有两大发现:1,测试结果显示,apFFT确实有初始相位不变性,精度非常高,具体多高,后面有相关的测试数据。
                      2,校正的精度并没有作者所说的那么高。具体的校正精度到底怎么样,没有详细的表述。

作者在书中说,apFFT对相位、频率和幅值都可以高精度的校准。从他的测试方式和相关的数据来看,这种说法是不严密的。
理由如下:
1,他的测试都是基于FFT的分辨率为1Hz的条件来测试的,这一点可以从数据抽取函数看出。
2,他的测试只是测试了很多离散的频点,不具有一般性。

首先说一下,我的算法的结果和matlab的结果一致,也就是说我的算法本身是没有问题的。
我最开始试图采用apFFT/apFFT来做校正,测试发现,相位和频率的精度非常高,但是,幅度的校正精度最差达0.38%。由于我的测试系统的精度要求是0.2%,这达不到我的要求。为此,我在振动论坛上发帖,希望得到答案。但是,最近我老是上不了论坛,不知道怎么回事?

于是,我寻求别的解决办法,通过对比FFT/apFFT和apFFT/apFFT的校正公式,发现它们不同。于是,我用FFT/apFFT算法,再做了一次测试,发现幅度的校正精度比apFFT/apFFT的高,满足我的工程需要。至此,算是真正解决了非同步采样的FFT校正算法的问题。

我测试的前提是:测试的信号时直流加单频信号,采样点数均相同,所有的数据类型都是float型。对于多频率的信号,只要分辨率足够高,是完全可以分离的,这一点不用怀疑。我的测试方法和王教授的有些不同,具体如下:
1,使用不同的FFT分辨率做测试。
2,选取多个频点做测试。我的频点选取更具一般性,选取50.0到60.0,频率步进为0.1Hz。由于校正的原理是根据相位差来校正的,而为整数频点时相位差为0,随着频率的增大,相位差增大。也就是说,我选取的频点覆盖率很多的相位差,因此,更具一般性。

测试结果如下:
 
序号    算法    频率范围    分辨率    采样点数    频率精度    幅值精度    相位精度       
1    FFT/APFFT    50:0.1:60    16    256    2.77e-4    2.05e-3    1.67e-6       
2    FFT/APFFT    50:0.1:60    10    256    7.27e-5    4.22e-4    2.2e-7       
3    FFT/APFFT    50:0.1:60    8    256    2.55e-4    2.05e-4    6.7e-8       
4    FFT/APFFT    50:0.1:60    4    256    1.56e-4    2.96e-5    3.3e-7       
5    FFT/APFFT    50:0.1:60    1    256    3.87e-5    2.85e-6    2.77e-7    

对一组频率做校正后,我取最大偏差来计算校正精度。从数据上看,精度似乎不是随分辨率的降低而降低的。这是因为我取的频点少,数据不能较准确的反映真实的最大偏差。但是,上述结果还是能说明一些问题。

分析测试结果不难发现:
1,随着分辨率的升高,相位、频率和幅值的校正精度也逐渐升高。
2,相同的分辨率,相位的精度最高,频率的精度和幅值的精度差不多。
3,随着分辨率的降低,幅值的精度略低于频率,相差越来越大。

王教授得出精度可以达到10的-12次方的结果的原因是,他选取的频率多接近整数频率,而一般接近整数频率的相差小,所以,误差也就小,精度自然也就高。当然,很多实际的情况是频率偏差较小,多在整数附近,因此,我们有时可以这样认为。

由于时间紧迫,没有做更多频点的分析,同时,我认为我的这个测试结果已经可以说明问题,不必再做更细的分析。

FFT的分辨率为:采样率除以一次FFT计算的点数。比如,采样率是512sps,数据进行256点FFT,那么FFT的分辨率就为2Hz,也就是说FFT变换的结果之间的间隔是2Hz。同时,我们也看到,一秒钟只能采样2组数据,能分析的最大频率为256Hz。因此,要想分析更高的频率,需要更高的采样率,而要想更高的分辨率,必须采样足够长的时间,他们是相互矛盾的。我们在实际工程中,希望尽快的计算得到结果,也希望有足够高的分辨率,只能权衡而确定一个合理的采样率和FFT计算点数。我们的系统的精度要求是0.2%,因此,选择分辨率为8Hz,较为合适。如果你的系统中需要分析两个频点很近的信号,建议保证两根谱线间的间距大于3。

全部作者的其他最新日志

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 我要加入

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

GMT+8, 2024-5-5 23:17 , Processed in 0.026916 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部