首页 > 其他分享 >现代功率谱估计(2):Levinson-Durbin递推方法求解AR模型参数

现代功率谱估计(2):Levinson-Durbin递推方法求解AR模型参数

时间:2022-09-30 14:25:18浏览次数:74  
标签:系数 模型 谱估计 Rxx AR Levinson 递推 sigma2

现代功率谱估计(2):Levinson-Durbin递推方法求解AR模型参数

p阶AR模型的差分方程形式和系统函数分别为:

令\(z = e^{jw}\),则AR模型输出的功率谱密度为:

AR模型的系统输出信号为\(x(n)\),计算输出信号的自相关函数:

其中最后结果的后面一项,输出信号\(x(n)\)和输入系统的白噪声的互相关函数\(E[x(n)w(n+m)]\)满足关系:

其中\(\sigma^{2}_{w}\)为输入白噪声信号的方差,即噪声功率

因此上面的输入信号\(x(n)\)的自相关函数的最终取值应该分为两种情况讨论,分别式当\(R_{xx}(m)\)中表示时间差的\(m\)取\(m=0\)和\(m\ne0\)时,将\(E[x(n)w(n+m)]\)代入\(R_{xx}(m)\),即:

写成矩阵形式的Yuler-Walker方程为:

其中实信号的自相关函数满足偶对称,即\(R_{xx}(m)=R_{xx}(-m)\), 则上面的右边的自相关矩阵为Toeplitz矩阵,在确定AR模型阶数为\(p\)时,通过求解AR模型的\(p\)个系数,以及此时AR模型的输入白噪声的功率则可确定输出信号\(x(n)\)的功率谱密度分布。

p阶AR模型的系数分别为\(a_{pi}\),其中\(a\)的下标处第一个表示此时AR模型的阶数,也就是当前阶数情况下总共有几个系数,第二个下标i表示当前系数的序列索引。

以p=1,1阶AR模型为例,则写成矩阵形式的Yuler-Walker方程为:

求解未知数\(a_{11}\),\(\sigma^{2}_{1}\)为:

递推到p=2,2阶AR模型情况,写成矩阵形式的Yuler-Walker方程为:

求解p=2,2阶情况下的AR模型系数:

2阶AR模型的系数\(a_{21},a_{22},\sigma^{2}_{2}\)均可通过之前1阶AR模型的系数\(a_{11}\)和估计出的自相关函数得到。

以此类推,k阶AR模型系数\(a_{ki}\),白噪声功率\(\sigma^{2}_{k}\)均可通过第k-1阶AR模型的相关系数得到:

通过不断的往下一阶递推,可以得到较高阶AR模型,流程如下:

在循环递推开始之前,需要提前估计自相关函数,以及1阶情况的AR模型的相关系数和白噪声功率。

代码如下:

% levinson-durbin递推求解Yuler_Walker方程
clc; clear; close all;
N = 256;
p = 100;

n = 1: N;
fs = 2000;
t = n * 1/ fs;
f1 = 100; f2 = 230;
xn = 2 * sin(2 * pi * f1 * t + pi / 3) + sin(2 * pi * f2 * t + pi / 4) + randn(size(n));

Rx = xcorr(xn, 'biased');
Rxx = zeros(1, p+1);
for i = 1 : p+1
    Rxx(i) = Rx(N -1 + i);       % Rxx存储值为Rxx(0), Rxx(1), ......, Rxx(p) 共p+1个根据样本估计的自相关值
end

a = zeros(p, p);
sigma2 = zeros(1, p);

% 1阶AR模型的初始值
a(1, 1) = - Rxx(2)/Rxx(1);
sigma2(1) = (1 - a(1, 1)^2) * Rxx(1);

% 从p=2阶开始迭代,一直迭代到p阶
for m = 2 : p            % m表示当前迭代的AR模型的总的阶数
    
    
    a(m, m) = -Rxx(m + 1) / sigma2(m - 1);      % m阶AR模型总共m个系数中的第m个
    for i = 1 : m - 1
        a(m, m) = a(m, m) - (a(m-1, i) * Rxx(m +1 - i)) / sigma2(m - 1);
    end
    
    
    for k = 1 : m -1
        a(m, k) = a(m - 1, k) + a(m, m)  * a(m - 1, m - k)';    % m阶AR模型中的m个系数中的除最后一个系数以外的系数
    end
    
    
    sigma2(m) = (1 - a(m, m) ^ 2) * sigma2(m - 1);   % m阶AR模型当前对应的噪声功率
end

[H, w] = freqz(1, [1, a(p, :)], fs);
f = w / (2 * pi) * fs;
H = H * sigma2(m);
plot(f, abs(H).^2);

运行结果:

参考资料:
【1】 张贤达,现代信号处理,第3版
【2】 https://www.bilibili.com/video/BV1wS4y1D7ng/?p=1&vd_source=d7f21d136ca4d445e3fbba3c70c5c40e

标签:系数,模型,谱估计,Rxx,AR,Levinson,递推,sigma2
From: https://www.cnblogs.com/znhung/p/16744743.html

相关文章