現代法譜估計(2)Levinson-Durbin遞推算法MATLAB及Python實現

原理

Levinson-Durbin遞推算法是解Yule Walker方程的快速有效的算法,Yule Walker方程是p+1元線性方程組,它的一般解法是矩陣求逆或高斯消去法。通常都儘量避免使用矩陣求逆運算,因爲它的運算量較大。如果利用高斯消去法直接求解線性方程組,其運算級約在p3數量級,而運用Levinson Durbin算法,可以將運算量減少到p2。
Levinson-Durbin算法是從一階開始,由p-1階模型的遞推求解p階模型的參數。用 ap(i)表示遞推過程中在階次爲p時AR模型的第i個係數,i=1,2,…,p。G^2表示預測誤差功率。將此功率用ρ表示,令 =ρ。再用ρp表示p階預測時的最小預測誤差功率,顯然
在這裏插入圖片描述
該式很容易理解,因爲零階預測就相當於信號直通過去,所以信號功率有多大,預測誤差功率就是多大。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
從上式可以看出,用Levinson-Durbin算法求解AR參數的關鍵,是自相關函數序列的估計。爲保證自相關函數的估計較準確,往往需要較多的樣本數據,所以,在短記錄的情況下,用Levinson-Durbin算法求解AR參數效果較差。反射係數相當於功率傳輸到終端接不匹配二端網絡時所引起的功率反射程度。

程序和結果

(出於維護版權原因,此處只放截圖)
MATLAB
程序:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結果:
在這裏插入圖片描述
在這裏插入圖片描述
Python
程序:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
結果:
在這裏插入圖片描述
在這裏插入圖片描述

分析

由上圖可見,我給程序輸入的N爲256,取的階數p爲128,信號中f1=0.1,f2=0.13,在圖中我們可以看到對應的位置出現了峯值,由於給定幅度大小不同,故峯值大小有很大差別。w的範圍是0到π弧度,也即用freqz函數求出的頻率響應只有0到π部分。由於h是複頻率響應矢量,因此要求其功率譜要對頻率響應求模平方。利用尋峯函數findpeaks來得出峯值對應的橫座標(Python中是自己寫了一個尋峯估計頻率的方法),程序中將所有的峯值及其索引分別放入到兩個數組中,且根據峯值大小降序排列,確定最大的兩個峯值和其索引位置,然後由索引位置除以2N (freqz函數得出的是單位圓上半部分,頻率範圍對應爲0-0.5,而對應的序列長度爲N,因此根據比例關係可知,索引值/N=頻率值/0.5也即,頻率值=索引值/2N)。

(因原博客是以word形式寫的,公式是用Mathtype打出來的,故部分地方直接採用了截圖形式)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章