分享

关于MATLAB FFT频谱泄露和加窗

 豆芽爱尚阅 2014-09-12
    我们分析的信号,如果只含整数次谐波的话,用FFT分析信号的频谱和相位是非常准确的,如果信号含有确定的间谐波,比如信号含有60HZ和65HZ的频率,那我们也可以准确的分析出信号的频谱和相位,我们只要用矩形窗截取10个周波的信号就可以分析出50HZ/10=5HZ以及5HZ的整数倍的信号的频谱和相位了,分析的相位和频谱都是非常准确的!如果我们需要分析的信号含有不确定的间谐波,比如我们根本不知道信号含有什么样的间谐波,那么此时用FFT分析,必然会有频谱泄露!那么怎么样才能减少频谱泄露呢(注意:这种情况下我们只能减少频谱泄露,而基本上不可能完全消除频谱泄露)?

    我们可以有两种方法:方法一:增加采样的长度,方法二:加窗函数。

    
增加采样长度可以分析出更多频率的信号,可以减少频谱泄露,不过增加采样长度必然会对数据处理的实时性造成影响!理想的窗函数是主瓣很窄,旁瓣衰减很快,矩形窗的主瓣很窄,但是旁瓣衰减却很慢,hanning窗、hamming窗、blackman窗等的旁瓣衰减有了明显的改进,但是主瓣却宽了很多,大概是矩形窗主瓣的二倍,blackman窗的主瓣还要宽,这就造成了信号频谱的频率识别率很低!什么叫频率识别率呢?简单举个例子解释一下:比如说我取十个周波(请注意:这里我用十个周波举例子是为了便于计算,实际中我们是不取10个周波的,因为基2的FFT运算要求取样点数是2的整数倍整数次幂,我们实际操作是取4、8或者16个周波等2的整数次幂),我用一个含有25HZ间谐波的信号做分析,那么我加hamming窗和hanning窗以后,在20HZ和30HZ处的频率点上都将有幅值,而且有趣的是:我们将20HZ、25HZ和30HZ频率点处的幅值相加以后基本上接近与信号在25HZ处的真实幅值(这一点我还没搞清楚,是否隐含什么关系),并且在频谱上看到的25HZ处的幅值要小于实际信号在25HZ处的幅值,所以我们要对加窗后的FFT变换的幅值要乘以一个恢复系数,不同窗的恢复系数也是不同,矩形窗的是1,hanning窗的是2,hamming窗的好像是1.84左右吧(不好意思,记不清了,大家可以在网上查到)!这样我们在分析25HZ频率点处的幅值时,对于20HZ和30HZ频率点处的幅值都是不可信的,所以我们至少要求20HZ和30HZ附近是不能有信号的,这样频率分辨率相对来说是不是就降低了?因为20HZ和30HZ是不能用的!(哈哈,语言组织能力差了点,有什么不严谨的地方大家包含啊)!

    大家可想而知,如果我的原始信号在20HZ和30HZ处本来就都有幅值,那么20HZ和30HZ处的频率也将反过来影响25HZ处的信号,这样测出来的幅值误差将会很大,所以我们在加窗时由一个要求:那就是谐波和间谐波,以及间谐波与间谐波之间要相隔较远,我觉得,至少要相隔2条谱线以上我们才能获得较高精度的幅值!blackman窗要求相隔的谱线还要多!这是因为blackman窗的主瓣还要宽!

    所以对于加窗函数我们要权衡利弊,根据具体需要来选择!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多