在进行语音信号编码传输时,往往对语音信号信源进行建模,然后对模型参数进行编码,只传送编码后的模型参数。
这样在解码端获得模型参数重建信源模型后,即可获得重建后的语音信号。
信号的现代建模法是建立在具有最大的不确定性基础上的预测。其广义定义为:随机信号x(n)由白噪w(n)激励某一确定系统的响应。确定了白噪就,研究随机信号就等价于研究产生随机信号的系统。
对平稳随机信号,三种常用的线性模型为:
着重介绍AR模型的基本原理和方法
随机信号x(n)由当前激励w(n)和若干次过去的激励w(n-k)线性组合产生:
x ( n ) = ∑ k = 0 q b k w ( n − k ) x(n)=\sum_{k=0}^{q}{b_kw(n-k)} x(n)=k=0∑qbkw(n−k)
系统函数为
H ( z ) = X ( z ) W ( z ) = ∑ k = 0 q z − k H(z)=\frac{X(z)}{W(z)}=\sum_{k=0}^{q}{z^{-k}} H(z)=W(z)X(z)=k=0∑qz−k
其中q表示阶数。系统函数只有零点没有极点,为全零点模型,一定是稳定的。全零点用MA(q)表示。
随机信号由本身的若干次过去值x(n-k)和当前激励w(n)线性组合产生:
x ( n ) = w ( n ) − ∑ k = 1 P a k x ( n − k ) x(n)=w(n)-\sum_{k=1}^{P}{a_kx(n-k)} x(n)=w(n)−k=1∑Pakx(n−k)
系统函数为:
H ( z ) = 1 1 + ∑ k = 1 P a k z − k H(z)=\frac{1}{1+\sum_{k=1}^{P}{a_kz^{-k}}} H(z)=1+∑k=1Pakz−k1
其中p为阶数。这是个全极点模型,只有极点没有零点。系统的稳定性取决于极点的分布位置,用AR§表示。
是AR模型和MA模型的结合,由数个x(n-k)和w(n-k)线性组合形成:
x ( n ) = ∑ k = 0 q b k w ( n − k ) − ∑ k = 1 p a k x ( n − k ) x(n)=\sum_{k=0}^{q}{b_kw(n-k)}-\sum_{k=1}^{p}{a_kx(n-k)} x(n)=k=0∑qbkw(n−k)−k=1∑pakx(n−k)
系统函数为
H ( z ) = ∑ k = 0 q b k z − k 1 + ∑ k = 1 p a k z − k H(z)=\frac{\sum_{k=0}^{q}{b_kz^{-k}}}{1+\sum_{k=1}^{p}{a_kz^{-k}}} H(z)=1+∑k=1pakz−k∑k=0qbkz−k
既有零点又有极点。稳定性由零极点分布确定,表示为ARMA(p,q).
使用AR模型的场合较多,这是因为计算工作比较容易。实际上三种模型都可以相互转化,选择哪一种模型主要取决于计算量和节约。选定模型后下一步就是确定模型参数了。
对之前的ZR模型x(n)表达式等式两边同乘x(n-m),然后求均值
E [ x ( n ) x ( n − m ) ] = E [ w ( n ) x ( n − m ) − ∑ k = 1 P a k x ( n − k ) x ( n − m ) ] E[x(n)x(n-m)]=E[w(n)x(n-m)-\sum_{k=1}^{P}{a_kx(n-k)x(n-m)}] E[x(n)x(n−m)]=E[w(n)x(n−m)−k=1∑Pakx(n−k)x(n−m)]
有自相关函数:
R x x ( m ) = E [ x ( n ) x ( n + m ) ] = E [ x ( k − m ) x ( k ) ] = E [ x ( n ) x ( n − m ) ] = R x x ( − m ) R_{xx}(m)=E[x(n)x(n+m)]=E[x(k-m)x(k)]=E[x(n)x(n-m)]=R_{xx}(-m) Rxx(m)=E[x(n)x(n+m)]=E[x(k−m)x(k)]=E[x(n)x(n−m)]=Rxx(−m)
呈偶对成,所以原式可化为:
R x x ( m ) = R x w ( m ) − ∑ k = 1 p a k R x x ( m − k ) R_{xx}(m)=R_{xw}(m)-\sum_{k=1}^{p}{a_kR_{xx}(m-k)} Rxx(m)=Rxw(m)−k=1∑pakRxx(m−k)
系统的单位脉冲响应h(n)是因果的,有下列推导:
R x w ( m ) = E [ x ( n ) w ( n + m ) ] x ( N ) = w ( n ) ∗ h ( n ) = ∑ k = 0 ∞ h ( k ) w ( n − k ) R x w ( m ) = E [ ∑ k = 0 ∞ h ( k ) w ( n − k ) w ( n + m ) ] = h ( k ) E [ ∑ k = 0 ∞ w ( n − k ) w ( n + m ) ] = ∑ k = 0 ∞ h ( k ) R w w ( m + k ) = ∑ k = 0 ∞ h ( k ) σ w 2 δ ( m + k ) = σ w 2 h ( − m ) R_{xw}(m)=E[x(n)w(n+m)]\\ x(N)=w(n)*h(n)=\sum_{k=0}^{\infty}{h(k)w(n-k)}\\ R_{xw}(m)=E[\sum_{k=0}^{\infty}{h(k)w(n-k)}w(n+m)]=h(k)E[\sum_{k=0}^{\infty}{w(n-k)}w(n+m)]\\ =\sum_{k=0}^{\infty}{h(k)R_{ww}(m+k)}=\sum_{k=0}^{\infty}{h(k)\sigma_w^2\delta(m+k)}=\sigma_w^2h(-m) Rxw(m)=E[x(n)w(n+m)]x(N)=w(n)∗h(n)=k=0∑∞h(k)w(n−k)Rxw(m)=E[k=0∑∞h(k)w(n−k)w(n+m)]=h(k)E[k=0∑∞w(n−k)w(n+m)]=k=0∑∞h(k)Rww(m+k)=k=0∑∞h(k)σw2δ(m+k)=σw2h(−m)
最后可得
R x w ( m ) = { 0 m > 0 σ w 2 h ( − m ) m ≤ 0 R_{xw}(m)=\begin{cases} 0&m>0\\ \sigma_w^2h(-m)&m\le0 \end{cases} Rxw(m)={ 0σw2h(−m)m>0m≤0
带入自相关函数可得
R x x ( m ) = { − ∑ k = 1 p a k R x x ( m − k ) m > 0 − ∑ k = 1 p a k R x x ( m − k ) + h ( 0 ) σ w 2 m = 0 R x x ( − m ) m < 0 R_{xx}(m)=\begin{cases} -\sum_{k=1}^{p}{a_kR_{xx}(m-k)}&m>0\\ -\sum_{k=1}^{p}{a_kR_{xx}(m-k)}+h(0)\sigma_w^2&m=0\\ R_{xx}(-m)&m<0 \end{cases} Rxx(m)=⎩⎪⎨⎪⎧−∑k=1pakRxx(m−k)−∑k=1pakRxx(m−k)+h(0)σw2Rxx(−m)m>0m=0m<0
其中由系统函数可得h(0)=1。
可得AR模型输出信号自相关函数由递推性质:
R x x ( m ) = − ∑ k = 1 p a k R x x ( m − k ) m > 0 R_{xx}(m)=-\sum_{k=1}^{p}{a_kR_{xx}(m-k)}\quad m>0 Rxx(m)=−k=1∑pakRxx(m−k)m>0
这也就是Yule-Walker(Y-W)方程,变化后渴求输入白噪方差:
0 = R x x ( m ) + ∑ k = 1 p a k R x x ( m − k ) m > 0 s i g m a w 2 = R x x ( 0 ) + ∑ k = 1 p a k R x x ( − k ) m = 0 0=R_{xx}(m)+\sum_{k=1}^{p}{a_kR_{xx}(m-k)}\quad m>0\\ sigma_w^2=R_{xx}(0)+\sum_{k=1}^{p}{a_kR_{xx}(-k)}\quad m=0 0=Rxx(m)+k=1∑pakRxx(m−k)m>0sigmaw2=Rxx(0)+k=1∑pakRxx(−k)m=0
写成矩阵形式,可得单一的正规矩阵方程:
[ R ( 0 ) R ( − 1 ) . . . R ( − p ) R ( 1 ) R ( 0 ) . . . R ( − p + 1 ) . . . . . . . . . . . . R ( p ) R ( p − 1 ) . . . R ( 0 ) ] [ 1 a 1 . . . a p ] = [ σ w 2 0 . . . 0 ] \left[ \begin{array}{ccc} R(0) & R(-1) & ... & R(-p)\\ R(1) & R(0) & ... & R(-p+1)\\ ... & ... & ... & ...\\ R(p) & R(p-1) & ...& R(0)\\ \end{array} \right] \left[ \begin{array}{ccc} 1 \\ a_1 \\ ... \\ a_p\\ \end{array} \right] = \left[ \begin{array}{ccc} \sigma_w^2 \\ 0 \\ ... \\ 0\\ \end{array} \right] ⎣⎢⎢⎡R(0)R(1)...R(p)R(−1)R(0)...R(p−1)............R(−p)R(−p+1)...R(0)⎦⎥⎥⎤⎣⎢⎢⎡1a1...ap⎦⎥⎥⎤=⎣⎢⎢⎡σw20...0⎦⎥⎥⎤
第一个矩阵的元素都是自相关函数。由于自相关函数是偶函数,对角线上的元素相同,存在高效算法。
只要已知输出平稳随机信号的自相关函数,就可的AR模型参数,且不需要很多观测数据。
x(n)表达式中的系数即为a1,a2,a3.代入矩阵表达式可得:
[ R ( 0 ) R ( 1 ) R ( 2 ) R ( 3 ) R ( 1 ) R ( 0 ) R ( 1 ) R ( 2 ) R ( 2 ) R ( 1 ) R ( 0 ) R ( 1 ) R ( 3 ) R ( 2 ) R ( 1 ) R ( 0 ) ] [ 1 − 14 24 − 9 24 1 24 ] = [ σ w 2 0 . . . 0 ] \left[ \begin{array}{ccc} R(0) & R(1) & R(2) & R(3)\\ R(1) & R(0) & R(1) & R(2)\\ R(2) & R(1) & R(0) & R(1)\\ R(3) & R(2) & R(1) & R(0)\\ \end{array} \right] \left[ \begin{array}{ccc} 1\\ -\frac{14}{24} \\ -\frac{9}{24} \\ \frac{1}{24}\\ \end{array} \right] = \left[ \begin{array}{ccc} \sigma_w^2 \\ 0 \\ ... \\ 0\\ \end{array} \right] ⎣⎢⎢⎡R(0)R(1)R(2)R(3)R(1)R(0)R(1)R(2)R(2)R(1)R(0)R(1)R(3)R(2)R(1)R(0)⎦⎥⎥⎤⎣⎢⎢⎡1−2414−249241⎦⎥⎥⎤=⎣⎢⎢⎡σw20...0⎦⎥⎥⎤
转化可得:
[ a ( 1 ) a ( 2 ) a ( 3 ) a ( 4 ) a ( 2 ) a ( 1 ) + a ( 3 ) a ( 4 ) 0 a ( 3 ) a ( 2 ) + a ( 4 ) a ( 1 ) 0 a ( 4 ) a ( 3 ) a ( 2 ) a ( 1 ) ] [ R ( 0 ) R ( 1 ) R ( 2 ) R ( 3 ) ] = [ 1 0 . . . 0 ] \left[ \begin{array}{ccc} a(1) & a(2) & a(3) & a(4)\\ a(2) & a(1)+a(3) & a(4) & 0\\ a(3) & a(2)+a(4) & a(1) & 0\\ a(4) & a(3) & a(2) & a(1)\\ \end{array} \right] \left[ \begin{array}{ccc} R(0) \\ R(1) \\ R(2) \\ R(3) \\ \end{array} \right] = \left[ \begin{array}{ccc} 1 \\ 0 \\ ... \\ 0\\ \end{array} \right] ⎣⎢⎢⎡a(1)a(2)a(3)a(4)a(2)a(1)+a(3)a(2)+a(4)a(3)a(3)a(4)a(1)a(2)a(4)00a(1)⎦⎥⎥⎤⎣⎢⎢⎡R(0)R(1)R(2)R(3)⎦⎥⎥⎤=⎣⎢⎢⎡10...0⎦⎥⎥⎤
利用matlab解线性方程组:
a = [1, -14/24, -9/24, 1/24];
A = [a(1) a(2) a(3) a(4);
a(2) a(1)+a(3) a(4) 0;
a(3) a(2)+a(4) a(1) 0;
a(4) a(3) a(2) a(1)];
B = [1; 0; 0; 0];
Rxx = A \ B
可得R(0)-R(3):
Rxx =
4.9377
4.3287
4.1964
3.8654
通过推导公式可得R(4)R(5):
R ( 4 ) = − ∑ k = 1 3 a k R x x ( 4 − k ) = 3.6418 R ( 4 ) = − ∑ k = 1 3 a k R x x ( 5 − k ) = 3.4027 R(4)=-\sum_{k=1}^{3}{a_kR_{xx}(4-k)}=3.6418\\ R(4)=-\sum_{k=1}^{3}{a_kR_{xx}(5-k)}=3.4027 R(4)=−k=1∑3akRxx(4−k)=3.6418R(4)=−k=1∑3akRxx(5−k)=3.4027
将R(0)-R(3)带入矩阵表达式
[ R ( 0 ) R ( 1 ) R ( 2 ) R ( 3 ) R ( 1 ) R ( 0 ) R ( 1 ) R ( 2 ) R ( 2 ) R ( 1 ) R ( 0 ) R ( 1 ) R ( 3 ) R ( 2 ) R ( 1 ) R ( 0 ) ] [ 1 a ^ 1 a ^ 2 a ^ 3 ] = [ σ ^ w 2 0 . . . 0 ] \left[ \begin{array}{ccc} R(0) & R(1) & R(2) & R(3)\\ R(1) & R(0) & R(1) & R(2)\\ R(2) & R(1) & R(0) & R(1)\\ R(3) & R(2) & R(1) & R(0)\\ \end{array} \right] \left[ \begin{array}{ccc} 1 \\ \hat a_1 \\ \hat a_2 \\ \hat a_3\\ \end{array} \right] = \left[ \begin{array}{ccc} \hat\sigma_w^2 \\ 0 \\ ... \\ 0\\ \end{array} \right] ⎣⎢⎢⎡R(0)R(1)R(2)R(3)R(1)R(0)R(1)R(2)R(2)R(1)R(0)R(1)R(3)R(2)R(1)R(0)⎦⎥⎥⎤⎣⎢⎢⎡1a^1a^2a^3⎦⎥⎥⎤=⎣⎢⎢⎡σ^w20...0⎦⎥⎥⎤
通过计算可得
a ^ 1 = − 14 24 a ^ 2 = − 9 24 a ^ 3 = − 1 24 σ ^ w 2 = 1 \hat a_1=-\frac{14}{24}\\ \hat a_2=-\frac{9}{24}\\ \hat a_3=-\frac{1}{24}\\ \hat\sigma_w^2=1 a^1=−2414a^2=−249a^3=−241σ^w2=1
和题目中参数一样,没有失真,这是因为AR模型已知。
已有一定长的观察值,则可以求自相关函数:
xn = [0.4282 1.1454 1.5597 1.8994 1.6854 2.3075 2.4679 1.9790 1.6063 1.2804 -0.2083 0.0577 0.0206 0.3572 1.6572 0.7488 1.6666 1.9830 2.6914 1.2521 1.8691 1.6855 0.6242 0.1763 1.3490 0.6955 1.2941 1.0475 0.4319 0.0312 0.5802 -0.6177];
Rxx = zeros( 1, length(xn) );
for m = 0 : length(xn) - 1
i = 1;
while i+m <= length(xn)
Rxx(m+1) = Rxx(m+1) + xn(i) * xn(i + m);
i = i + 1;
end
Rxx(m+1) = Rxx(m+1) / 32;
end
Rxx
%结果
Rxx =
1 至 10 列
1.9271 1.6618 1.5381 1.3545 1.1349 0.9060 0.8673 0.7520 0.7637 0.8058
11 至 20 列
0.8497 0.8761 0.9608 0.8859 0.7868 0.7445 0.6830 0.5808 0.5622 0.5134
21 至 30 列
0.4301 0.3998 0.3050 0.2550 0.1997 0.1282 0.0637 0.0329 -0.0015 -0.0089
31 至 32 列
-0.0143 -0.0083
由此可得Rxx,取前四位,即R(0)-R(3),带入矩阵,用同样的方法可得估计值:
a ^ 1 = − 0.6984 a ^ 2 = − 0.2748 a ^ 3 = 0.0915 σ ^ w 2 = 0.4678 \hat a_1=-0.6984\\ \hat a_2=-0.2748\\ \hat a_3=0.0915\\ \hat\sigma_w^2=0.4678 a^1=−0.6984a^2=−0.2748a^3=0.0915σ^w2=0.4678
与真实AR模型有以下误差:
e 1 = 0.1151 e 2 = 0.1001 e 3 = 0.0498 e σ = 0.5322 e_1=0.1151\\ e_2=0.1001\\ e_3=0.0498\\ e_\sigma=0.5322 e1=0.1151e2=0.1001e3=0.0498eσ=0.5322
这是因为只有一部分观测数值,不能完全理想的还原AR模型,且模拟的白噪声长度也只有32点。
为了获得更精确的估计值,就要建立更高阶的AR模型,但同时观测值求解的计算量会增加很多。因此把AR模型和预测系统联系起来,用另一个方法估计AR模型参数。
从AR模型表达式可知其当前输出值与过去输出值有关。可以通过预测的方法利用信号的前后相关性估计未来的信号值,即前向预测,可以表示为:
x ^ ( n ) = − ∑ k = 1 m a m ( k ) x ( n − k ) \hat x(n)=-\sum_{k=1}^{m}{a_m(k)x(n-k)} x^(n)=−k=1∑mam(k)x(n−k)
m为预测器的阶数,k=1,2,3…m。
预测结果与真实值之间的误差,即前向预测误差e(n):
e ( n ) = x ( n ) − x ^ ( n ) = x ( n ) + ∑ k = 1 m a m ( k ) x ( n − k ) e(n)=x(n)-\hat x(n)=x(n)+\sum_{k=1}^{m}{a_m(k)x(n-k)} e(n)=x(n)−x^(n)=x(n)+k=1∑mam(k)x(n−k)
将e(n)看作系统的输出,x(n)看作输入,得到系统函数:
E ( z ) X ( z ) = 1 + ∑ k = 1 m a m ( k ) z − k \frac{E(z)}{X(z)}=1+\sum_{k=1}^{m}{a_m(k)z^{-k}} X(z)E(z)=1+k=1∑mam(k)z−k
这里假设m=p,即两个系统——预测器和AR模型阶数相同,且预测系数和AR模型参数相同。
有w(n)=e(n)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7OnSGXlF-1592722510260)(E:\大三下\数据压缩\作业七\两个系统.png)]
求预测误差均方值:
E [ e 2 ( n ) ] = E [ ( x ( n ) + ∑ k = 1 m a m ( k ) x ( n − k ) ) 2 ] = R x x ( 0 ) + 2 [ ∑ k = 1 m a m ( k ) R x x ( k ) + ∑ k = 1 m ∑ l = 1 m a m ( l ) a m ( k ) R x x ( l − k ) ] E[e^2(n)]=E[(x(n)+\sum_{k=1}^{m}{a_m(k)x(n-k)})^2]\\ =R_{xx}(0)+2[\sum_{k=1}^{m}{a_m(k)R_{xx}(k)}+\sum_{k=1}^{m}\sum_{l=1}^{m}{a_m(l)a_m(k)R_{xx}(l-k)}] E[e2(n)]=E[(x(n)+k=1∑mam(k)x(n−k))2]=Rxx(0)+2[k=1∑mam(k)Rxx(k)+k=1∑ml=1∑mam(l)am(k)Rxx(l−k)]
要是均方误差最小,即对等式右侧求偏导使其等于零,得到m个等式:
R x x ( l ) = − ∑ k = 1 m a m ( k ) + R x x ( l − k ) l = 1 , 2 , . . . , m R_{xx}(l)=-\sum_{k=1}^{m}{a_m(k)+R_{xx}(l-k)}\quad l=1,2,...,m Rxx(l)=−k=1∑mam(k)+Rxx(l−k)l=1,2,...,m
带入均方误差表达式,可得:
R x x ( l ) = R x x ( 0 ) + ∑ k = 1 m a m ( k ) R x x ( k ) 或 E p [ e 2 ( n ) ] = R x x ( 0 ) + ∑ k = 1 m a k R x x ( k ) a k = a m ( k ) m = p R_{xx}(l)=R_{xx}(0)+\sum_{k=1}^{m}{a_m(k)R_{xx}(k)}\\ 或\quad E_p[e^2(n)]=R_{xx}(0)+\sum_{k=1}^{m}{akR_{xx}(k)}\\ a_k=a_m(k)\quad m=p Rxx(l)=Rxx(0)+k=1∑mam(k)Rxx(k)或Ep[e2(n)]=Rxx(0)+k=1∑makRxx(k)ak=am(k)m=p
同时由于e(n)=w(n),最小均方误差即等于白噪声方差。
如此,在计算AR模型参数的时候使用L-D算法,即使用Y-W方程式(递推式)。L-D递推算法是模型阶数逐渐增大的一种算法。
首先计算m=1时的预测系数和预测均方误差(白噪声),然后计算m=2的,一直计算到m=p。每一阶的参数都是从低一阶的参数推导得到的。这样在减小计算量的同时也可以同时寻找最佳阶数,满足精度要求即可停止递推,选定阶数。
大致流程图如下:
推导式为:
{ a m ( k ) = a m − 1 ( k ) + a m ( m ) a m − 1 ( m − k ) a m ( m ) = − R ( m ) + ∑ k = 1 m − 1 a m − 1 ( k ) R ( m − k ) E m − 1 E m = σ w m 2 = [ 1 − a m 2 ( m ) ] E m − 1 = R ( 0 ) ∏ k = 1 m [ 1 − a k 2 ( k ) ] \begin{cases} a_m(k)=a_{m-1}(k)+a_m(m)a_{m-1}(m-k)\\ a_m(m)=-\frac{R(m)+\sum_{k=1}^{m-1}{a_{m-1}(k)R(m-k)}}{E_{m-1}}\\ E_m=\sigma^2_{wm}=[1-a_m^2(m)]E_{m-1}=R(0)\prod_{k=1}^{m}{[1-a_k^2(k)]} \end{cases} ⎩⎪⎨⎪⎧am(k)=am−1(k)+am(m)am−1(m−k)am(m)=−Em−1R(m)+∑k=1m−1am−1(k)R(m−k)Em=σwm2=[1−am2(m)]Em−1=R(0)∏k=1m[1−ak2(k)]
其中am(m)称为反射系数。通过初始化E0=R(0),a(0)=1,阶数p,就可以按照流程图进行AR模型参数估计。
L-D算法的优点时计算速度快,所得AR模型必定稳定,且均方误差随着阶数上升而下降。其缺点时在求自相关系数时,假设除了观测值之外的数据都为0,会引入较大误差。
首先和之前一样,先根据观测值求自相关序列Rxx。
随后根据原理进行初始化,E0=Rxx(0)=1.9271,a0=1,阶数p.
然后根据递推式计算m=1,2,3,当p=3时所得均方误差和前一例题一致,说明这一阶数比较合理。
matlab中有专门实现L-D算法的函数aryule()。
xn = [0.4282 1.1454 1.5597 1.8994 1.6854 2.3075 2.4679 1.9790 1.6063 1.2804 -0.2083 0.0577 0.0206 0.3572 1.6572 0.7488 1.6666 1.9830 2.6914 1.2521 1.8691 1.6855 0.6242 0.1763 1.3490 0.6955 1.2941 1.0475 0.4319 0.0312 0.5802 -0.6177];
Rxx = zeros(1, length(xn));
for m = 0 : length(xn) - 1
i = 1;
while i+m <= length(xn)
Rxx(m+1) = Rxx(m+1) + xn(i) * xn(i + m);
i = i + 1;
end
Rxx(m+1) = Rxx(m+1) / 32;
end
p = 4;
E = zeros(1, p); E(1) = Rxx(1);
a = zeros(p, 3); a(1, 1) = 1;
for m = 1:3
a(m + 1, m) = Rxx(m + 1);
for k = 1:(m - 1)
a(m + 1, m) = a(m + 1, m) + a(m, k) * Rxx(m + 1 - k);
end
a(m + 1, m) = - a(m + 1, m) / E(m);
for k = 1:(m - 1)
a(m + 1, k) = a(m, k) + a(m + 1, m) * a(m, m - k);
end
E(m + 1) = (1 - a(m + 1, m).^2) * E(m);
end
%结果
a =
1.0000 0 0 %m=0
-0.8623 0 0 %m=1
-0.6789 -0.2127 0 %m=2
-0.6984 -0.2748 0.0915 %m=3=p
E =
1.9271 0.4941 0.4718 0.4678 %m=0,1,2,3
也可以直接使用matlab提供的函数:
xn = [0.4282 1.1454 1.5597 1.8994 1.6854 2.3075 2.4679 1.9790 1.6063 1.2804 -0.2083 0.0577 0.0206 0.3572 1.6572 0.7488 1.6666 1.9830 2.6914 1.2521 1.8691 1.6855 0.6242 0.1763 1.3490 0.6955 1.2941 1.0475 0.4319 0.0312 0.5802 -0.6177];
[a,E]=aryule(xn,3)
%结果
a =
1.0000 -0.6984 -0.2748 0.0915
E =
0.4678
为了克服L-D算法的缺点,1968年Burg提出了Burg算法,基本思想是对数据同时机型前项和后向预测,两者的均方误差值和最小为估计准则,进而通过L-F算法递推得到AR模型参数。
其优点为计算效率高,所得AR模型稳定,但递推使用的仍然为L-D算法,没有解决根本缺点。
matlab中有专门的函数arburg(),使用方法如下:
xn = [0.4282 1.1454 1.5597 1.8994 1.6854 2.3075 2.4679 1.9790 1.6063 1.2804 -0.2083 0.0577 0.0206 0.3572 1.6572 0.7488 1.6666 1.9830 2.6914 1.2521 1.8691 1.6855 0.6242 0.1763 1.3490 0.6955 1.2941 1.0475 0.4319 0.0312 0.5802 -0.6177];
[a,E]=arburg(xn,3)
%结果
a =
1.0000 -0.6982 -0.2626 0.0739
E =
0.4567
%高阶计算
[a,E]=arburg(xn,12)
%结果
a =
1 至 10 列
1.0000 -0.6495 -0.3066 -0.0934 0.0987 0.4076 -0.1786 -0.0126 -0.0805 -0.0899
11 至 13 列
0.0382 0.1628 -0.2501
E =
0.3237
计算速度比原来的方法快了很多。
1980年Marple在前人基础上提出了一种高效算法——Marple算法或称不受约束的最小二乘法(LS)。基本思想为:让每一个预测系数的确定直接与前向后向预测的总平方误差最小,此时系数不能从低一阶的系数推导得到了,脱离了L-D算法的大框架。实践表明这种算法更加优越,但不能保证AR模型的稳定性。
FPE(final predidyion error)准则定义:给定观测长度N,从某个过程的一次观测数据中估计到了预测系数,然后用该预测系数构成的系统处理另一次观察数据,则有预测均方误差,该误差在某个阶数时为最小,其表达式为:
F P E ( p ) = σ ^ w p 2 ( N + P + 1 N − P − 1 ) FPE(p)=\hat\sigma_{wp}^2(\frac{N+P+1}{N-P-1}) FPE(p)=σ^wp2(N−P−1N+P+1)
随着阶数p的增加,方差减小,而括号内的值增加。因此可以找到最佳的p使FPE最小。