为随机信号建立参数模型是研究随机信号的一种基本方法,其含义是认为随机信号x(n)是由白噪w(n)激励某一确定系统的响应(如图 7.5)。只要白噪的参数确定了,研究随机信号就可以转化成研究产生随机信号的系统。
经典信号建模法(classical modeling method for signal)前面已经指出,医学信号处理的目的是提取包含于随机信号中的确定性成分,以便在一定的准确性(最小二乘意义)上进行预测。这就是建立各种各样的确定性数学模型,包括代数、微分、积分、差分方程模型。这是经典的信号建模方法。
信号的现代建模方法(Modern modeling method for signal)是建立在具有最大的不确定性基础上的预测。提出了众多的数学模型( mathematical models)。根据 Wold 的证明:任何平稳的 ARMA(自回归移动平均)模型或 MA 模型均可用无限阶或阶数足够的 AR 模型去近似。因此本节着重介绍 AR 模型的基本原理和方法。
对平稳随机信号,三种常用的线性模型分别是 AR 模型(自回归模型 Auto-regression
model),MA 模型(滑动平均模型 Moving average model)和 ARMA 模型(自回归滑移平均模型 Auto-regression-Moving average model)。
随机信号x(n) 由本身的若干次过去值x(n-k)和当前的激励值w(n) 线性组合产生:
该模型的系统函数是:
p 是系统阶数,系统函数中只有极点,无零点,也称为全极点模型,系统由于极点的原因,要考虑到系统的稳定性,因而要注意极点的分布位置,用 AR( p )来表示。
随机信号的建模法最近在生物医学信号处理中应用相当普遍,在自发脑电、诱发脑电、肌电、心电、胃电等方面都有人尝试应用模型法进行研究。应用较多的是 AR 模型,因为建立这种的模型计算工作比较容易。作为数学逼进,三种模型都可以互相转换。实际中选用哪一种模型就要考虑到节约和计算量,选定模型后,剩下的任务就是用适当的算法估计模型参数( ak 、bk 、p 、 q),以便用模型对随机信号进行预测。
下面我们就以 AR 模型为例进行参数的估计。
1.AR 模型参数和自相关函数的关系
所以
将(7-35)和(7-36)结合,把该式的下标简化并写成矩阵的形式,可以写成单一的正规矩阵方程:
式(7-37)方程组的系数都是自相关矩阵 [R]p+1 ,由于自相关函数是偶对称函数:
Rxx(m)=Rxx(−m),因而自相关矩阵是对称矩阵,与主对角线平行的斜对角线上的元素都是相同的,是(p+1)x(p+1) 的维托毕兹(Toeplitz)矩阵,所以存在高效算法,其中应用广泛的有 Levinson-Durbin(L-D)算法。Yule-Walker(Y-W)方程表明,只要已知输出平稳随机信号的自相关函数,就能求出 AR 模型中的参数{ak },并且需要的观测数据较少。
a=[-14/24 -9/24 1/24];%模型参数{ak}
b=[1;0;0;0];
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];
%题a.自相关序列
Rxx=A\b
for m = 5 : 6
Rxx(m) = 0;
for k = 1 : 3
Rxx(m) = Rxx(m) - a(k) * Rxx(m - k);
end
end
Rxx
b. 已知自相关序列值,来估计 3 阶 AR 模型的参数{aˆ k }以及 2 σ w
利用式(7-37)得到矩阵:
Rxx_T=[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)];
ans=Rxx_T\b
可以发现对 AR 模型参数是无失真的估计,因为已知 AR 模型,我们可以得到完全的输出观测值,因而求得的自相关函数没有失真,当然也就可以不失真的估计
c. 利用给出的 32 点观测值,先求自相关序列(按照上节的样本自相关定义
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];
%自相关估计值
Rx=xcorr(xn)./length(xn);
Rx=Rx(length(xn):end)
R=[Rx(1),Rx(2),Rx(3),Rx(4);
Rx(2),Rx(1),Rx(2),Rx(3);
Rx(3),Rx(2),Rx(1),Rx(2);
Rx(4),Rx(3),Rx(2),Rx(1)];
a=fsolve(@(a)R*[1 a(1) a(2) a(3)].'-[a(4) 0 0 0].',rand(1,4))
e=abs(a-a_T)