AR模型参数估计
为随机信号建立参数模型是研究随机信号的一种基本方法。
在对语音信号进行编码时,分析不同种类语音信号的特点及产生,用数学模型表示信源,而编码器根据输入信号计算模型参数,然后对模型参数进行编码,也就是说,只需要对编码后的参数进行传送(而不需要传送语音信号本身),解码器通过收到的模型参数,直接利用相同的数学模型即可重建出语音信号,大大减小了传送的数据量。
音频编码中的三种编码思路:
(1)参量编码:这种编码的思路是解构人发出语音的发声过程,将人发出的不同的声音抽象成相同的白噪声或者是周期性信号通过不同参数的滤波器而产生的随机信号。因此在传输过程中,仅仅需要传几个滤波器参数即可。而滤波器的阶数越高,则所需要传输的参数越多,信号的质量也越好。
(2)波形编码:与其他音频信号一样,语音编码也是音频信号的一种,可以和其他信号一样采用波形编码。通过超过奈奎斯特频率的采样,然后量化、利用波形的相关性编码。这样的编码对应编码速率要求高,压缩率也小。
(3)混合编码:在波形编码和参量编码做出了折中,在中低速率的基础上,利用复杂的算法,尽可能来获取高质量语音。
AR模型
对于平稳随机信号,主要有三种常用的线性模型:AR(自回归)模型、MA(滑动平均)模型和ARMA(自回归滑动平均)模型。
对于AR模型:
x(n)——随机信号
x(n−k)——由本身的若干次过去值
w(n)——当前的激励值
H(z)——系统函数
p ——是系统阶数
特点:仅通过时间序列变量的自身历史观测值来反映有关因素对预测目标的影响和作用,不受模型变量相互独立的假设条件约束。系统函数中只有极点,无零点,也称为全极点模型,系统由于极点的原因,要考虑到系统的稳定性,因而要注意极点的分布位置,用 AR( p )来表示。
AR模型参数与自相关函数的关系推导
利用将AR模型的输入输出等式两边同乘x(n-m)后求均值,经过化简以及自相关函数公式可得:
化作矩阵形式:
由于自相关函数是偶对称函数,因而自相关矩阵是对称矩阵,与主对角线平行的斜对角线的元素都是相同的。根据输入信号的自相关函数求解参数可用Levinson-Durbin(L-D)算法。
只要已知输出平稳信号的自相关函数,就可以求出AR模型中的{ak}。
matlab中函数:[a E] = aryule(x,p)
其中x为输入数据,p为阶数。输出a为估计的模型参数,E为噪声信号的方差估计。
(Levinson-Durbin(L-D)算法原理流程)
实验
求自相关序列:
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
for m = 5 : 6
Rxx(m) = 0;
for k = 1 : 3
Rxx(m) = Rxx(m) - a(k) * Rxx(m - k);
end
end
解得:
Rxx =
4.9377
4.3287
4.1964
3.8654
3.6481
3.4027
估计AR(3)及输入白噪声的方差
matlab代码:
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)];
Ans = R \ b
解得
Ans =
1.0000
-0.5833
-0.3750
0.0417
利用给出的AR模型,用计算机仿真给出32点观测值,并用观测值的自相关序列直接来估计AR(3)的参数
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]
matlab代码:
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 = xcorr(xn) ./ length(xn);
Rxx = Rxx(length(xn) : end)
解得
Rxx =
1.9271 1.6618 1.5381 1.3545 1.1349 0.9060 0.8673 0.7520
0.7637 0.8058 0.8497 0.8761 0.9608 0.8859 0.7868 0.7445
0.6830 0.5808 0.5622 0.5134 0.4301 0.3998 0.3050 0.2550
0.1997 0.1282 0.0637 0.0329 -0.0015 -0.0089 -0.0143 -0.0083
把Rxx(0),Rxx (1),Rxx(2),Rxx(3)带入矩阵方程,求得估计值:
估计值和真实的AR模型参数的误差为:
原因:我们只有一部分的观测数据,使自相关序列值和理想的值完全不同。
输入信号的方差误差比较大:
原因:其中一个是计算机仿真的白噪声只有32点长,32点序列的方差不可能刚好等于1。
给出一段观测值求AR模型参数这样解方程组,当阶数越高时直接解方程组计算就越复杂,因而要用特殊的算法使得计算量减小且精确度高。
上一篇: get和post方法的中文处理
下一篇: python数据分析之逻辑回归实践