随机信号的参数建模法及MATLAB实现
为随机信号建立参数模型是研究随机信号的一种基本方法。在对语音信号进行编码时,往往通过分析不同种类语音信号的特点及产生,用数学模型表示信源,而编码器根据输入信号计算模型参数,然后对模型参数进行编码,也就是说,只需要对编码后的参数进行传送(而不需要传送语音信号本身),解码器通过收到的模型参数,直接利用相同的数学模型即可重建出语音信号,大大减小了传送的数据量。本文将主要介绍AR模型的参数估计以及L-D算法。
一. 概述
在随机信号的参数模型中,我们认为随机信号 x ( n ) x(n) x(n)是由白噪声 w ( n ) w(n) w(n)激励某一确定系统的响应,只要 w ( n ) w(n) w(n)的参数确定了,研究随机信号就可以转化成研究产生随机信号的系统。
对于平稳随机信号,主要有三种常用的线性模型:AR(Auto-Regression,自回归)模型、MA(Moving Average,滑动平均)模型和ARMA(Auto-Regression-Moving Average,自回归滑动平均)模型。
1. MA模型
随机信号
x
(
n
)
x (n)
x(n)由当前的激励
w
(
n
)
w(n )
w(n)和若干次过去的激励
w
(
n
−
k
)
w( n − k )
w(n−k)线性组合产生:
x
(
n
)
=
∑
k
=
0
q
b
k
w
(
n
−
k
)
(1-1)
x(n)=\sum_{k=0}^{q} b_{k} w(n-k) \tag{1-1}
x(n)=k=0∑qbkw(n−k)(1-1)
两边进行
z
z
z变换,可得系统函数:
H
(
z
)
=
X
(
z
)
W
(
z
)
=
∑
k
=
0
q
b
k
z
−
k
(1-2)
H(z)=\frac{X(z)}{W(z)}=\sum_{k=0}^{q} b_{k} z^{-k} \tag{1-2}
H(z)=W(z)X(z)=k=0∑qbkz−k(1-2)
其中,
q
q
q表示系统阶数。
可以看出,MA模型的系统函数只有零点,没有极点,所以该系统一定是稳定的系统,也称为全零点模型,表示为 M A ( q ) {\rm MA}( q ) MA(q)。
2. AR模型
随机信号
x
(
n
)
x ( n)
x(n)由本身的若干次过去值
x
(
n
−
k
)
x ( n − k )
x(n−k)和当前的激励值
w
(
n
)
w( n )
w(n)线性组合产生:
x
(
n
)
=
w
(
n
)
−
∑
k
=
1
p
a
k
x
(
n
−
k
)
(1-3)
x(n)=w(n)-\sum_{k=1}^{p} a_{k} x(n-k) \tag{1-3}
x(n)=w(n)−k=1∑pakx(n−k)(1-3)
该模型的系统函数为:
H
(
z
)
=
1
1
+
∑
k
=
1
p
a
k
z
−
k
(1-4)
H(z)=\frac{1}{1+\sum_{k=1}^{p} a_{k} z^{-k}} \tag{1-4}
H(z)=1+∑k=1pakz−k1(1-4)
其中,
p
p
p为系统阶数。
该模型系统函数中只有极点,无零点,也称为全极点模型。系统由于极点的原因,要考虑到系统的稳定性,因而要注意极点的分布位置。可表示为 A R ( p ) {\rm AR}(p) AR(p)。
3. ARMA模型
ARMA模型是AR模型和MA模型的结合:
x
(
n
)
=
∑
k
=
0
q
b
k
w
(
n
−
k
)
−
∑
k
=
1
p
a
k
x
(
n
−
k
)
(1-5)
x(n)=\sum_{k=0}^{q} b_{k} w(n-k)-\sum_{k=1}^{p} a_{k} x(n-k) \tag{1-5}
x(n)=k=0∑qbkw(n−k)−k=1∑pakx(n−k)(1-5)
其系统函数为:
H
(
z
)
=
∑
k
=
0
q
b
k
z
−
k
1
+
∑
k
=
1
p
a
k
z
−
k
(1-6)
H(z)=\frac{\sum_{k=0}^{q} b_{k} z^{-k}}{1+\sum_{k=1}^{p} a_{k} z^{-k}} \tag{1-6}
H(z)=1+∑k=1pakz−k∑k=0qbkz−k(1-6)
可以看出,它既有零点又有极点,所以也称极零点模型,要考虑极零点的分布位置,保证系统的稳定。可表示为
A
R
M
R
(
p
,
q
)
{\rm ARMR}(p,q)
ARMR(p,q)。
二. AR模型的参数估计
以上三种模型实际上都可以进行相互转换,实际中选用哪一种模型就要考虑到节约和计算量,剩下的任务就是用适当的算法估计模型参数( a k , b k , p , q a_k,b_k,p,q ak,bk,p,q),以便用模型对随机信号进行预测。
实际应用中,使用较多的是AR模型,下面我们对AR模型进行参数估计,其它两种模型可以进行类比计算。
1. AR模型参数与自相关函数的关系
推导过程
对式
(
1
−
3
)
(1-3)
(1−3)两边同时乘以
x
(
n
−
m
)
x(n-m)
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
)
]
(2-1)
E[x(n) x(n-m)]=E\left[w(n) x(n-m)-\sum_{k=1}^{p} a_{k} x(n-k) x(n-m)\right] \tag{2-1}
E[x(n)x(n−m)]=E[w(n)x(n−m)−k=1∑pakx(n−k)x(n−m)](2-1)
根据自相关函数的偶对称特性,可进一步化简为:
R
x
x
(
m
)
=
R
x
w
(
m
)
−
∑
k
=
1
p
a
k
R
x
x
(
m
−
k
)
(2-2)
R_{x x}(m)=R_{x w}(m)-\sum_{k=1}^{p} a_{k} R_{x x}(m-k) \tag{2-2}
Rxx(m)=Rxw(m)−k=1∑pakRxx(m−k)(2-2)
根据
x
(
n
)
=
w
(
n
)
∗
h
(
n
)
=
∑
k
=
0
∞
h
(
k
)
w
(
n
−
k
)
(2-3)
x(n)=w(n) * h(n)=\sum_{k=0}^{\infty} h(k) w(n-k) \tag{2-3}
x(n)=w(n)∗h(n)=k=0∑∞h(k)w(n−k)(2-3)
有:
R
x
w
(
m
)
=
E
[
x
(
n
)
w
(
n
+
m
)
]
=
E
[
∑
k
=
0
∞
h
(
k
)
w
(
n
−
k
)
w
(
n
+
m
)
]
=
∑
k
=
0
∞
h
(
k
)
E
[
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
)
(2-4)
\begin{aligned} R_{x w}(m) &= E[x(n) w(n+m)] \\ &= E\left[\sum_{k=0}^{\infty} h(k) w(n-k) w(n+m)\right]\\ &= \sum_{k=0}^{\infty} h(k) E[w(n-k) w(n+m)] \\ &= \sum_{k=0}^{\infty} h(k) R_{w w}(m+k) \\ &= \sum_{k=0}^{\infty} h(k) \sigma_{w}^{2} \delta(m+k) \\ &= \sigma_{w}^{2} h(-m) \end{aligned} \tag{2-4}
Rxw(m)=E[x(n)w(n+m)]=E[k=0∑∞h(k)w(n−k)w(n+m)]=k=0∑∞h(k)E[w(n−k)w(n+m)]=k=0∑∞h(k)Rww(m+k)=k=0∑∞h(k)σw2δ(m+k)=σw2h(−m)(2-4)
由于系统的单位脉冲响应
h
(
n
)
h( n)
h(n)因果,故
R
x
w
(
m
)
=
{
σ
w
2
h
(
−
m
)
,
m
≤
0
0
,
m
>
0
(2-5)
R_{x w}(m)= \left\{\begin{array}{cc} \sigma_{w}^{2} h(-m) &, m \leq 0 \\ 0 &, m>0 \end{array}\right. \tag{2-5}
Rxw(m)={σw2h(−m)0,m≤0,m>0(2-5)
带入式
(
2
−
2
)
(2-2)
(2−2)得:
R
x
x
(
m
)
=
{
R
x
x
(
−
m
)
,
m
<
0
−
∑
k
=
1
p
a
k
R
x
x
(
m
−
k
)
+
h
(
0
)
σ
w
2
,
m
=
0
−
∑
k
=
1
p
a
k
R
x
x
(
m
−
k
)
,
m
>
0
(2-6)
R_{xx}(m)= \begin{cases} R_{x x}(-m) &, m<0 \\ -\sum_{k=1}^{p} a_{k} R_{x x}(m-k)+h(0) \sigma_{w}^{2} &, m=0 \\ -\sum_{k=1}^{p} a_{k} R_{x x}(m-k) &, m>0 \end{cases} \tag{2-6}
Rxx(m)=⎩⎪⎨⎪⎧Rxx(−m)−∑k=1pakRxx(m−k)+h(0)σw2−∑k=1pakRxx(m−k),m<0,m=0,m>0(2-6)
将式
(
1
−
4
)
(1-4)
(1−4)变换到时域得:
h
(
n
)
+
∑
k
=
1
p
a
k
h
(
n
−
k
)
=
δ
(
n
)
h(n)+\sum_{k=1}^{p} a_{k} h(n-k)=\delta(n)
h(n)+∑k=1pakh(n−k)=δ(n),故当
n
=
0
n=0
n=0时有
h
(
0
)
=
δ
(
0
)
=
1
h(0)=δ(0)=1
h(0)=δ(0)=1。
显然,结合式
(
2
−
2
)
(2-2)
(2−2)和式
(
2
−
5
)
(2-5)
(2−5)可得出AR模型输出信号的自相关函数的递推性质:
R
x
x
(
m
)
=
−
∑
k
=
1
p
a
k
R
x
x
(
m
−
k
)
,
m
>
0
(2-7)
R_{x x}(m)=-\sum_{k=1}^{p} a_{k} R_{x x}(m-k), \quad m>0 \tag{2-7}
Rxx(m)=−k=1∑pakRxx(m−k),m>0(2-7)
这就是著名的Yule-Walker(Y-W)方程,并将Y-W方程进行变换:
R
x
x
(
m
)
+
∑
k
=
1
p
a
k
R
x
x
(
m
−
k
)
=
0
,
m
>
0
(2-8)
R_{x x}(m)+\sum_{k=1}^{p} a_{k} R_{x x}(m-k)=0, \quad m>0 \tag{2-8}
Rxx(m)+k=1∑pakRxx(m−k)=0,m>0(2-8)
由
(
2
−
6
)
(2-6)
(2−6)可求得输入的白噪声方差为
R
x
x
(
0
)
+
∑
k
=
1
p
a
k
R
x
x
(
−
k
)
=
σ
w
2
,
m
=
0
(2-9)
R_{x x}(0)+\sum_{k=1}^{p} a_{k} R_{x x}(-k)=\sigma_{w}^{2}, \quad m=0 \tag{2-9}
Rxx(0)+k=1∑pakRxx(−k)=σw2,m=0(2-9)
再将式
(
2
−
8
)
(2-8)
(2−8)和
(
2
−
9
)
(2-9)
(2−9)结合,把该式的下标简化并写成矩阵的形式,可写成单一的正规矩阵方程:
[
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
]
(2-10)
\left[\begin{array}{cccc} R(0) & R(-1) & \cdots & R(-p) \\ R(1) & R(0) & \cdots & R(-p+1) \\ \vdots & \vdots & \ddots & \vdots \\ R(p) & R(p-1) & \cdots & R(0) \end{array}\right]\left[\begin{array}{c} 1 \\ a_{1} \\ \vdots \\ a_{p} \end{array}\right]=\left[\begin{array}{c} \sigma_{w}^{2} \\ 0 \\ \vdots \\ 0 \end{array}\right] \tag{2-10}
⎣⎢⎢⎢⎡R(0)R(1)⋮R(p)R(−1)R(0)⋮R(p−1)⋯⋯⋱⋯R(−p)R(−p+1)⋮R(0)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡1a1⋮ap⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡σw20⋮0⎦⎥⎥⎥⎤(2-10)
其中方程组的系数组成自相关矩阵
[
R
]
p
+
1
[\bold R]_{p+1}
[R]p+1,由于自相关函数是偶对称函数,即
R
x
x
(
m
)
=
R
x
x
(
−
m
)
R_{xx}(m)=R_{xx}(-m)
Rxx(m)=Rxx(−m),因而自相关矩阵为对称矩阵,与主对角线平行的斜对角线上的元素都是相同的,故存在高效算法,其中广泛应用的有Levinson-Durbin(L-D)算法。Y-W方程表明,只要已知输出平稳随机信号的自相关函数,就能求出AR模型中的参数
{
a
k
}
\left\{a_k\right\}
{ak},并且需要的观测数据较少。
实例
【例1】已知自回归信号模型 A R ( 3 ) {\rm AR}(3) AR(3)为:
x ( n ) = 14 24 x ( n − 1 ) + 9 24 x ( n − 2 ) − 1 24 x ( n − 3 ) + w ( n ) (2-11) x(n)=\frac{14}{24} x(n-1)+\frac{9}{24} x(n-2)-\frac{1}{24} x(n-3)+w(n) \tag{2-11} x(n)=2414x(n−1)+249x(n−2)−241x(n−3)+w(n)(2-11)
其中 w ( n ) w(n) w(n)是方差 σ w 2 = 1 σ_w^2=1 σw2=1的平稳白噪声,求:
- 自相关序列 R x x ( m ) , m = 0 , 1 , 2 , 3 , 4 , 5 R_{xx}(m),\ m=0,1,2,3,4,5 Rxx(m), m=0,1,2,3,4,5;
- 用上一问求出的自相关序列来估计 A R ( 3 ) {\rm AR}(3) AR(3)的参数 { a ^ k } \left\{\hat a_k\right\} {a^k},以及输入白噪声的方差 σ ^ w 2 \hat σ_w^2 σ^w2;
- 利用给出的AR模型,用计算机仿真给出32点观测值 x ( n ) = x(n) = x(n)=
[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 R ( 3 ) {\rm AR}(3) AR(3)的参数 { a ^ k } \left\{\hat a_k\right\} {a^k}以及输入白噪声的方差 σ ^ w 2 \hat σ_w^2 σ^w2。
【解】
-
由式 ( 2 − 11 ) (2-11) (2−11)可知模型参数 { a k } \left\{a_k\right\} {ak},即 a 1 = − 14 24 , a 2 = − 9 24 , a 3 = 1 24 a_1=-\dfrac {14}{24},\ a_2 = -\dfrac 9 {24}, \ a_3 = \dfrac 1 {24} a1=−2414, a2=−249, a3=241,我们只需要代入 ( 2 − 10 ) (2-10) (2−10)并利用其偶对称特性:
[ 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 ] = [ 1 0 0 0 ] (2-12) \left[\begin{array}{llll} 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}{c} 1 \\ a_1 \\ a_2 \\ a_3 \end{array}\right]=\left[\begin{array}{c} 1 \\ 0 \\ 0 \\ 0 \end{array}\right] \tag{2-12} ⎣⎢⎢⎡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)⎦⎥⎥⎤⎣⎢⎢⎡1a1a2a3⎦⎥⎥⎤=⎣⎢⎢⎡1000⎦⎥⎥⎤(2-12)
并重新整理,即可求出 R x x ( m ) R_{xx}(m) Rxx(m):
[ 1 a 1 a 2 a 3 a 1 1 + a 2 a 3 0 a 2 a 1 + a 3 1 0 a 3 a 2 a 1 1 ] [ R ( 0 ) R ( 1 ) R ( 2 ) R ( 3 ) ] = [ 1 0 0 0 ] (2-13) \begin{bmatrix} 1 & a_1 & a_2 & a_3 \\ a_1 & 1+a_2 & a_3 & 0 \\ a_2 & a_1 + a_3 & 1 & 0 \\ a_3 & a_2 & a_1 & 1 \end{bmatrix} \begin{bmatrix} R(0) \\ R(1) \\ R(2) \\ R(3) \end{bmatrix} = \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} \tag{2-13} ⎣⎢⎢⎡1a1a2a3a11+a2a1+a3a2a2a31a1a3001⎦⎥⎥⎤⎣⎢⎢⎡R(0)R(1)R(2)R(3)⎦⎥⎥⎤=⎣⎢⎢⎡1000⎦⎥⎥⎤(2-13)
对应的MATLAB程序为:a = [-14 / 24, -9 / 24, 1 / 24]; A = [1, a(1), a(2), a(3);... a(1), 1 + a(2), a(3), 0;... a(2), a(1)+a(3), 1, 0;... a(3), a(2), a(1), 1]; b = [1; 0; 0; 0]; Rxx = A \ b
运行结果:
Rxx = 4.9377 4.3287 4.1964 3.8654
对于 R ( 4 ) , R ( 5 ) , ⋯ R(4),R(5),\cdots R(4),R(5),⋯,可以根据式 ( 2 − 7 ) (2-7) (2−7): R x x ( m ) = − ∑ k = 1 p a k R x x ( m − k ) , m > 0 R_{x x}(m)=-\sum_{k=1}^{p} a_{k} R_{x x}(m-k), \quad m>0 Rxx(m)=−∑k=1pakRxx(m−k),m>0求出:
for m = 5 : 6 Rxx(m) = 0; for k = 1 : 3 Rxx(m) = Rxx(m) - a(k) * Rxx(m - k); end end Rxx
运行结果:
Rxx = 4.9377 4.3287 4.1964 3.8654 3.6481 3.4027
-
现在已知 R ( 0 ) , R ( 1 ) , R ( 2 ) , R ( 3 ) R(0),R(1),R(2),R(3) R(0),R(1),R(2),R(3),则只需要代入到 ( 2 − 12 ) (2-12) (2−12),即可反求出 a ^ 1 , a ^ 2 , a ^ 3 \hat a_1,\hat a_2,\hat a_3 a^1,a^2,a^3。相应代码如下:
R = [Rxx(1) Rxx(2) Rxx(3) Rxx(4);... Rxx(2) Rxx(1) Rxx(2) Rxx(3);... Rxx(3) Rxx(2) Rxx(1) Rxx(2);... Rxx(4) Rxx(3) Rxx(2) Rxx(1)]; R \ b
结果为:
ans = 1.0000 -0.5833 -0.3750 0.0417
其中后三个元素为参数 { a ^ k } \left\{\hat a_k\right\} {a^k}。可以看出对AR模型参数是无失真的估计,因为已知AR模型,我们可以得到完全的输出观测值,因而求得的自相关函数没有失真,当然也就可以不失真地估计。
-
根据
R x x ( m ) = 1 n ∑ i = 1 n x i x i + m (2-14) R_{x x}(m)=\frac{1}{n} \sum_{i=1}^{n} x_{i} x_{i+m} \tag{2-14} Rxx(m)=n1i=1∑nxixi+m(2-14)
可求出自相关序列 R x x ( m ) , m = 0 , 1 , ⋯ , 31 R_{xx}(m), \ m=0,1,\cdots, 31 Rxx(m), m=0,1,⋯,31。代码如下:
clear; clc; 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_obs = xcorr(xn) ./ length(xn); Rxx_obs = Rxx_obs(length(xn) : end)
结果如下:
Rxx_obs =
列 1 至 8
1.9271 1.6618 1.5381 1.3545 1.1349 0.9060 0.8673 0.7520
列 9 至 16
0.7637 0.8058 0.8497 0.8761 0.9608 0.8859 0.7868 0.7445
列 17 至 24
0.6830 0.5808 0.5622 0.5134 0.4301 0.3998 0.3050 0.2550
列 25 至 32
0.1997 0.1282 0.0637 0.0329 -0.0015 -0.0089 -0.0143 -0.0083
将 R x x ( 0 ) , R x x ( 1 ) , R x x ( 2 ) , R x x ( 3 ) R_{xx}(0),R_{xx}(1),R_{xx}(2),R_{xx}(3) Rxx(0),Rxx(1),Rxx(2),Rxx(3)代入 ( 2 − 12 ) (2-12) (2−12)可求得估计值: a ^ 1 = − 0.6984 , a ^ 2 = − 0.2748 , a ^ 3 = 0.0915 , a ^ 4 = 0.4678 \hat a_1 = -0.6984,\ \hat a_2 = -0.2748,\ \hat a_3 = 0.0915,\ \hat a_4 = 0.4678 a^1=−0.6984, a^2=−0.2748, a^3=0.0915, a^4=0.4678,与真实AR模型参数误差为: e 1 = 0.1151 , e 2 = 0.1002 , e 3 = 0.0498 e_1=0.1151,\ e_2=0.1002,\ e_3=0.0498 e1=0.1151, e2=0.1002, e3=0.0498,原因在于我们只有一部分的观测数据,使得自相关序列值有偏差。输入信号的方差误差比较大: e σ = 0.5322 e_σ=0.5322 eσ=0.5322,造成的原因比较多,如计算机仿真的白噪声由于只有32点长,其方差不可能刚好等于1。给出一段观测值求AR模型参数这样直接解方程组,当阶数越高时直接解方程组计算就越复杂,因而要用特殊的算法减小计算量并提高精度。
2. Yule-Walker方程的解法——Levinson-Durbin算法
准备工作
在上面的例子中,为了得到更精确的估计值并减小计算量,就要建立更高阶的AR模型。因此把 AR 模型和预测系统联系起来,换个方法来估计 AR 参数。
由式 ( 1 − 3 ) (1-3) (1−3): x ( n ) = w ( n ) − ∑ k = 1 p a k x ( n − k ) x(n)=w(n)-\sum_{k=1}^{p} a_{k} x(n-k) x(n)=w(n)−∑k=1pakx(n−k)知,模型的当前输出值与它过去的输出值有关。预测是推断一个给定序列的未来值,即利用信号前后的相关性来估计未来的信号值。
若序列的模型已知,而用过去观测的数据来推求现在和将来的数据的模型称为前向预测器,表示为:
x
^
(
n
)
=
−
∑
k
=
1
m
a
m
(
k
)
x
(
n
−
k
)
(2-15)
\hat{x}(n)=-\sum_{k=1}^{m} a_{m}(k) x(n-k) \tag{2-15}
x^(n)=−k=1∑mam(k)x(n−k)(2-15)
其中
{
a
(
k
)
}
,
k
=
1
,
2
,
⋯
,
m
\left\{a(k)\right\},k=1,2,\cdots,m
{a(k)},k=1,2,⋯,m表示
m
m
m阶预测器的预测系数,负号是为了与技术文献保持一致。显然预测出来的结果与真实的结果存在预测误差(或前向预测误差),设误差为
e
(
n
)
e(n)
e(n):
e
(
n
)
=
x
(
n
)
−
x
^
(
n
)
=
x
(
n
)
+
∑
k
=
1
m
a
m
(
k
)
x
(
n
−
k
)
(2-16)
e(n)=x(n)-\hat{x}(n)=x(n)+\sum_{k=1}^{m} a_{m}(k) x(n-k) \tag{2-16}
e(n)=x(n)−x^(n)=x(n)+k=1∑mam(k)x(n−k)(2-16)
把
e
(
n
)
e( n)
e(n)看成是系统的输出,
x
(
n
)
x ( n)
x(n)看成是系统的输入,得到系统函数
E
(
z
)
X
(
z
)
=
1
+
∑
k
=
1
m
a
m
(
k
)
z
−
k
(2-17)
\frac{E(z)}{X(z)}=1+\sum_{k=1}^{m} a_{m}(k) z^{-k} \tag{2-17}
X(z)E(z)=1+k=1∑mam(k)z−k(2-17)
设
m
=
p
m=p
m=p,且预测系数与AR模型参数相同,比较
(
1
−
4
)
(1-4)
(1−4):
H
(
z
)
=
1
1
+
∑
k
=
1
p
a
k
z
−
k
H(z)=\dfrac{1}{1+\sum_{k=1}^{p} a_{k} z^{-k}}
H(z)=1+∑k=1pakz−k1与上式,可以看出系统函数互为倒数。结合图2-1,则有
w
(
n
)
=
e
(
n
)
w(n)=e(n)
w(n)=e(n),即前向预测误差系统中的输入为
x
(
n
)
x ( n)
x(n),输出为预测误差
e
(
n
)
e(n)
e(n)等于白噪声。也就是说前向预测误差系统对观测信号起了白化的作用。由于AR模型和前向预测误差系统函数互为倒数,所以求AR模型参数就可以通过求预测误差系统的预测系数来实现。
对
(
2
−
16
)
(2-16)
(2−16)求预测误差均方值:
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
)
(2-18)
\begin{aligned} E\left[e^{2}(n)\right] &= E\left[\left(x(n)+\sum_{k=1}^{m} a_{m}(k) x(n-k)\right)^{2}\right] \\ &=R_{x x}(0)+2\left[\sum_{k=1}^{m} a_{m}(k) R_{x x}(k)\right]+\sum_{k=1}^{m} \sum_{l=1}^{m} a_{m}(l) a_{m}(k) R_{x x}(l-k) \end{aligned} \tag{2-18}
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)(2-18)
要使均方误差最小,将上式右边对预测系数求偏导并且等于零,得到
m
m
m个等式:
R
x
x
(
l
)
=
−
∑
k
=
1
m
a
m
(
k
)
R
x
x
(
l
−
k
)
l
=
1
,
2
,
⋯
m
(2-19)
R_{x x}(l)=-\sum_{k=1}^{m} a_{m}(k) R_{x x}(l-k) \quad l=1,2, \cdots m \tag{2-19}
Rxx(l)=−k=1∑mam(k)Rxx(l−k)l=1,2,⋯m(2-19)
并代入
(
2
−
18
)
(2-18)
(2−18),可得最小均方误差:
E
m
[
e
2
(
n
)
]
=
R
x
x
(
0
)
+
∑
k
=
1
m
a
m
(
k
)
R
x
x
(
k
)
(2-20)
E_{m}\left[e^{2}(n)\right]=R_{x x}(0)+\sum_{k=1}^{m} a_{m}(k) R_{x x}(k) \tag{2-20}
Em[e2(n)]=Rxx(0)+k=1∑mam(k)Rxx(k)(2-20)
由于
E
p
[
e
2
(
n
)
]
=
R
x
x
(
0
)
+
∑
k
=
1
p
a
k
R
x
x
(
k
)
(2-21)
E_{p}\left[e^{2}(n)\right]=R_{x x}(0)+\sum_{k=1}^{p} a_{k} R_{x x}(k) \tag{2-21}
Ep[e2(n)]=Rxx(0)+k=1∑pakRxx(k)(2-21)
则有
a
k
=
a
m
(
k
)
,
m
=
p
(2-22)
a_k = a_m (k),\quad m=p \tag{2-22}
ak=am(k),m=p(2-22)
也就是
p
p
p阶预测器的预测系数等于
p
p
p阶AR模型的参数,由于
e
(
n
)
=
w
(
n
)
e(n)=w(n)
e(n)=w(n),所以最小均方预测误差等于白噪声方差,即
E
p
[
e
2
(
n
)
]
=
σ
w
2
E_p\left[ e^2(n) \right]=σ_w^2
Ep[e2(n)]=σw2。
使用L-D算法估计AR模型参数
有了上面的知识后,我们再看如何使用L-D模型估计AR模型参数,即如何估计参数 { a k , p , σ w 2 } \left\{ a_k,p,σ_w^2 \right\} {ak,p,σw2}。L-D算法的基本思想基于Y-W方程式或 ( 2 − 19 ) , ( 2 − 20 ) , ( 2 − 21 ) (2-19),(2-20),(2-21) (2−19),(2−20),(2−21)和自相关序列具有递推的性质。L-D递推算法是模型阶数逐渐加大的一种算法,先计算阶次 m = 1 m=1 m=1时的预测系数 { a m ( k ) } = a 1 ( 1 ) \left\{ a_m(k)\right\}=a_1(1) {am(k)}=a1(1)和 σ w 1 2 σ_{w1}^2 σw12,再计算 m = 2 m=2 m=2时的预测系数 { a m ( k ) } = a 2 ( 1 ) , a 2 ( 2 ) \left\{ a_m(k)\right\}=a_2(1),\ a_2(2) {am(k)}=a2(1), a2(2)和 σ w 2 2 σ_{w2}^2 σw22,一直计算到 m = p m=p m=p阶时的 a p ( 1 ) , a p ( 2 ) , ⋯ , a p ( p ) a_p(1),a_p(2),\cdots, a_p(p) ap(1),ap(2),⋯,ap(p)及 σ w p 2 σ_{wp}^2 σwp2。这种递推算法的特点是,每一阶次参数的计算是从低一阶次的模型参数推算出来的,既可减少工作量又便于寻找最佳的阶数值,满足精度时就停止递推。
经过一系列推到,最终可以得到:
{
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
)
]
(2-23)
\begin{cases} a_{m}(k)=a_{m-1}(k)+a_{m}(m) a_{m-1}(m-k) \\ a_{m}(m)=-\dfrac{R(m)+\sum_{k=1}^{m-1} a_{m-1}(k) R(m-k)}{E_{m-1}} \\ E_{m}=\sigma_{w m}^{2}=\left[1-a_{m}^{2}(m)\right] E_{m-1}=R(0) \prod_{k=1}^{m}\left[1-a_{k}^{2}(k)\right] \end{cases} \tag{2-23}
⎩⎪⎪⎪⎨⎪⎪⎪⎧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)](2-23)
其中,
a
m
(
m
)
a_m(m)
am(m)称为反射系数,从上式知道整个迭代过程需要已知自相关函数,给定初始值
E
0
=
R
(
0
)
,
a
0
(
0
)
=
1
E_0=R(0),\ a_0(0)=1
E0=R(0), a0(0)=1以及AR模型的阶数
p
p
p,就可以按照图2-2所示的流程图进行估计。
L-D算法的特点
L-D算法的优点就是计算速度快,求得的AR模型必定稳定,且均方预测误差随着阶次的增加而减小。
由于使用L-D算法在求自相关序列时,我们假设除了观测值之外的数据都为零,因此必然会引入较大误差。
实例
【例2】已知自回归信号模型 A R ( 3 ) {\rm AR}(3) AR(3)为:
x ( n ) = 14 24 x ( n − 1 ) + 9 24 x ( n − 2 ) − 1 24 x ( n − 3 ) + w ( n ) (2-11) x(n)=\frac{14}{24} x(n-1)+\frac{9}{24} x(n-2)-\frac{1}{24} x(n-3)+w(n) \tag{2-11} x(n)=2414x(n−1)+249x(n−2)−241x(n−3)+w(n)(2-11)
其中 w ( n ) w(n) w(n)是方差 σ w 2 = 1 σ_w^2=1 σw2=1的平稳白噪声。利用给出的AR模型,用计算机仿真给出32点观测值 x ( n ) = x(n) = x(n)=
[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]
,用L-D算法来估计 A R ( 3 ) {\rm AR}(3) AR(3)的参数 { a ^ k } \left\{\hat a_k\right\} {a^k}以及输入白噪声的方差 σ ^ w 2 \hat σ_w^2 σ^w2。
【解】
-
步骤1:求 R x x ( m ) , m = 0 , 1 , ⋯ , 31 R_{xx}(m),\ m = 0,1,\cdots,31 Rxx(m), m=0,1,⋯,31,这部分计算的方法与例1中第3问完全相同,这里不再赘述。
-
步骤2:初始化: E 0 = R x x ( 0 ) = 1.9271 , a 0 = 1 E_{0}=R_{x x}(0)=1.9271, \quad a_{0}=1 E0=Rxx(0)=1.9271,a0=1
-
步骤3:根据 ( 2 − 23 ) (2-23) (2−23)有:
m = 1 : { a 1 ( 1 ) = − R ( 1 ) E 0 = − 1.6618 1.9271 = − 0.8623 E 1 = R ( 0 ) [ 1 − a 1 2 ( 1 ) ] = 0.4942 m = 2 : { a 2 ( 2 ) = − R ( 2 ) + a 1 ( 1 ) R ( 1 ) E 1 = − 0.2127 a 2 ( 1 ) = a 1 ( 1 ) [ 1 + a 2 ( 2 ) ] = − 0.6789 E 2 = E 1 [ 1 − a 2 2 ( 2 ) ] = 0.4718 m = 3 : { a 3 ( 3 ) = − R ( 3 ) + a 2 ( 1 ) R ( 2 ) + a 2 ( 2 ) R ( 1 ) E 2 = 0.0914 a 3 ( 1 ) = a 2 ( 1 ) + a 3 ( 3 ) a 2 ( 2 ) = − 0.6983 a 3 ( 2 ) = a 2 ( 2 ) + a 3 ( 3 ) a 2 ( 1 ) = − 0.2748 E 3 = E 2 [ 1 − a 3 2 ( 3 ) ] = 0.4679 \begin{aligned} & m=1: \begin{cases} a_{1}(1)=-\dfrac{R(1)}{E_{0}}=-\dfrac{1.6618}{1.9271}=-0.8623 \\ E_{1}=R(0)\left[1-a_{1}^{2}(1)\right]=0.4942 \end{cases}\\ \\ & m=2: \begin{cases} a_{2}(2)=-\dfrac{R(2)+a_{1}(1) R(1)}{E_{1}}=-0.2127 \\ a_{2}(1)=a_{1}(1)\left[1+a_{2}(2)\right]=-0.6789 \\ E_{2}=E_{1}\left[1-a_{2}^{2}(2)\right]=0.4718 \end{cases}\\ \\ & m=3: \begin{cases} a_{3}(3)=-\dfrac{R(3)+a_{2}(1) R(2)+a_{2}(2) R(1)}{E_{2}}=0.0914 \\ a_{3}(1)=a_{2}(1)+a_{3}(3) a_{2}(2)=-0.6983 \\ a_{3}(2)=a_{2}(2)+a_{3}(3) a_{2}(1)=-0.2748 \\ E_{3}=E_{2}\left[1-a_{3}^{2}(3)\right]=0.4679 \end{cases} \end{aligned} m=1:⎩⎨⎧a1(1)=−E0R(1)=−1.92711.6618=−0.8623E1=R(0)[1−a12(1)]=0.4942m=2:⎩⎪⎪⎨⎪⎪⎧a2(2)=−E1R(2)+a1(1)R(1)=−0.2127a2(1)=a1(1)[1+a2(2)]=−0.6789E2=E1[1−a22(2)]=0.4718m=3:⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧a3(3)=−E2R(3)+a2(1)R(2)+a2(2)R(1)=0.0914a3(1)=a2(1)+a3(3)a2(2)=−0.6983a3(2)=a2(2)+a3(3)a2(1)=−0.2748E3=E2[1−a32(3)]=0.4679
因而当 p = 3 p=3 p=3时,估计得到的AR模型参数为: a ^ 1 = − 0.6983 , a ^ 2 = − 0.2748 , a ^ 3 = 0.0914 \hat{a}_{1}=-0.6983,\ \hat{a}_{2}=-0.2748,\ \hat{a}_{3}=0.0914 a^1=−0.6983, a^2=−0.2748, a^3=0.0914,估计的输入信号方差为 σ w 2 = E 3 = 0.4679 σ_w^2=E_3=0.4679 σw2=E3=0.4679,这与例1的第3问结果一致。
在MATLAB中,有专门的函数[a E] = aryule(x, p)
来实现L-D算法的AR模型参数估计,其中x
表示观测信号,p
表示阶数,a
表示估计的模型参数,E
表示噪声信号的方差估计。本例的代码为:
[a E] = aryule(xn, 3)
运行结果为:
a =
1.0000 -0.6984 -0.2748 0.0915
E =
0.4678
我们也可以使用更高阶的AR模型来进行估计,如 p = 12 p=12 p=12:
a =
列 1 至 8
1.0000 -0.6703 -0.3254 -0.0793 0.1407 0.3676 -0.2451 0.0483
列 9 至 13
-0.0912 -0.0522 0.0515 0.0186 -0.0955
E =
0.3783
可见阶数越高,均方误差就越小( 0.3783 < 0.4678 0.3783<0.4678 0.3783<0.4678)。
3. AR模型参数估计的各种算法的比较和阶数的选择
Burg算法
为了克服L-D算法导致的误差,1968年Burg提出了Burg算法,其基本思想是对观测的数据进行前向和后向预测,然后让两者的均方误差之和为最小作为估计的准则估计处反射系数,进而通过L-D算法的递推公式求出AR模型参数。Burg算法的优点是,求得的AR模型是稳定的,较高的计算效率,但递推还是用的L-D算法,因此仍然存在明显的缺点。
MATLAB中也有专门的函数来实现Burg算法的AR模型参数估计:[a E] = arburg(x, p)
,例如上面例2在
p
=
3
p=3
p=3时和
p
=
12
p=12
p=12时的计算结果分别为
a =
1.0000 -0.6982 -0.2626 0.0739
E =
0.4567
和
a =
列 1 至 8
1.0000 -0.6495 -0.3066 -0.0934 0.0987 0.4076 -0.1786 -0.0126
列 9 至 13
-0.0805 -0.0899 0.0382 0.1628 -0.2501
E =
0.3237
结果与L-D算法略有不同,Burg算法略微更精确些。
Marple算法
1980年Marple在前人的基础上提出一种高效算法,Marple算法或者称不受约束的最小二乘法(LS),该算法的思想是,让每一个预测系数的确定直接与前向、后向预测的总的平方误差最小,这样预测系数就不能由低一阶的系数递推确定了,所以不能用L-D算法求解,实践表明该算法比L-D、Burg算法优越。由于该算法是从整体上选择所有的模型参数达到总的均方误差最小,与自适应算法类似,不足是该算法不能保证AR模型的稳定性。
AR模型阶数的选择
AR模型的阶数选择对模型效果有有较大的影响,因而如何选择阶数很重要。因此国内外学者在这方面都做了许多研究工作,其中基于均方误差最小的最终预测误差(FPE)准则是确定AR模型阶次比较有效的准则。
最终预测误差准则定义如下:给定观测长度为
N
N
N,从某个过程的一次观测数据中估计到了预测系数,然后用该预测系数构成的系统处理另一次观察数据,则有预测均方误差,该误差在某个阶数
p
p
p时为最小,其表达式为:
F
P
E
(
p
)
=
σ
^
w
p
2
(
N
+
p
+
1
n
−
p
−
1
)
(7-24)
{\rm FPE}(p) = \hat \sigma_{wp}^2 \left( \dfrac {N+p+1}{n-p-1} \right) \tag{7-24}
FPE(p)=σ^wp2(n−p−1N+p+1)(7-24)
上式中估计的方差随着阶数的增加而减小,而括号内的值随着
p
p
p的增加而增加,因而一定存在一个最佳的
p
p
p,使得FPE最小。
我们还可以使用试验的方法来进行阶数的选择。如果某一个 p p p值满足预先规定的某些要求,则认为该 p p p值是最优的。在短数据情况下,根据经验,AR模型的阶次选在 N 3 ∼ N 2 \dfrac N 3 \sim \dfrac N 2 3N∼2N的范围内较好。