频谱泄露 振动 matlab,关于MATLAB FFT频谱泄露和加窗
我們分析的信號,如果只含整數次諧波的話,用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窗的主瓣還要寬!
所以對于加窗函數我們要權衡利弊,根據具體需要來選擇!
總結
以上是生活随笔為你收集整理的频谱泄露 振动 matlab,关于MATLAB FFT频谱泄露和加窗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab cep,【CEP】重构和改
- 下一篇: java基础知识大全,java 基础知识