数字信号处理3个作业-----作业3自相关与Burg求解AR模型系数以估计其功率谱

目录

  • 1.题目
  • 2. 分析
  • 3. 结果
  • 4. 程序

1.题目

书本592页14.12 利用习题14.11的实验数据(数据文件test.mat在https://github.com/jianjake/-test):
(1) 用自相关求解AR模型系数以估计其功率谱,模型阶次p=8,p=11,p=14,自己可调整。
(2) 用Burg方法重复(1)

2. 分析

自相关估计法(Yule-Walker AR方法),描述自回归序列参数与其协方差函数之间关系的方程,通过计算p+1阶自相关系数的Yule-Walker方程计算模型参数,先定义自相关函数为
数字信号处理3个作业-----作业3自相关与Burg求解AR模型系数以估计其功率谱_第1张图片
对于真实信号,由自相关函数的偶对称性质可得:
在这里插入图片描述
因此上式可以写为:
数字信号处理3个作业-----作业3自相关与Burg求解AR模型系数以估计其功率谱_第2张图片
接下来便可以使用Levinson-Durbin迭代算法计算AR模型的p+1个参数:

在这里插入图片描述
aryule进行参数估计,pyulear求出估计功率谱。
BurgBurg算法是首先令前后项预测误差功率之和为最小估计出反射系数ǩ(m ),进而利用Levinson-Durbin迭代估计出AR参数。基本思想是利用向前滤波误差f(n,t)和向后滤波误差b(n,t),求出保证平均滤波误差功率为最小的a(n,n),再按levinson算法计算a(n,i)。若观测时序{ x(t)}是AR序列时,levinson算法和burg算法相差不大。Burg算法得到的模型参数在计算AR谱时出现谱线分裂现象,特别是当信噪比较高,正弦波的起始相位为1/4个半周期的奇数倍、在L/4长度内有奇数个正弦成分的谐波以及n/N较大时,谱线分裂现象有出现。arburg进行参数估计,pburg求出估计功率谱。

3. 结果

数字信号处理3个作业-----作业3自相关与Burg求解AR模型系数以估计其功率谱_第3张图片
                                  自相关法与Burg法参数图
数字信号处理3个作业-----作业3自相关与Burg求解AR模型系数以估计其功率谱_第4张图片
                            自相关法与Burg法估计功率谱图

4. 程序

clc
clear all;

%调出数据
load test x;

N=4096;
fn=-0.5:1/N:0.5-1/N;
p=[8 11 14];

figure(1);
 % 用自相关法求AR模型的系数和最小预测误差能量;
titl=['自相关法求得参数:p=8 ';'自相关法求得参数:p=11';'自相关法求得参数:p=14'];
for j=1:1:3
    [a,E1]=aryule(x,p(j));
    subplot(3,2,2*j-1)
    stem(abs(a),'.');grid on;
    title(titl(j,:));
end

% 用Burg法求AR模型的系数、反射系数和最小预测误差能量;
titl=['Burg法求得参数:p=8 ';'Burg法求得参数:p=11';'Burg法求得参数:p=14'];
for i=1:1:3
    subplot(3,2,2*i)
    [a,E2,k]=arburg(x,p(i));
    stem(abs(a),'.');grid on;
    title(titl(i,:));
end

figure(2);
% 使用自相关矩阵功率谱估计;
titl=['自相关法估计功率谱:p=8 ';'自相关法估计功率谱:p=11';'自相关法估计功率谱:p=14'];
for j=1:1:3
    subplot(3,2,2*j-1)
    xpsd=pyulear(x',p(j),N);
    pmax=max(xpsd);
    xpsd=xpsd/pmax;
    xpsd=10*log10(xpsd+0.000001);
    for i=1:N
        xxpsd(i)=xpsd(N+1-i);%
    end
    plot(fn,fftshift(xxpsd));grid on;axis([-0.5 0.5 -65 5]);
    title(titl(j,:));
end
% 使用 Burg 算法得到功率谱估计;
titl=['Burg估计功率谱:p=8 ';'Burg估计功率谱:p=11';'Burg估计功率谱:p=14'];
for i=1:1:3
    subplot(3,2,2*i)
    xpsd=pburg(x,p(i),N);
    pmax=max(xpsd);
    xpsd=xpsd/pmax;
    xpsd=10*log10(xpsd+0.000001);
    plot(fn,fftshift(xpsd));grid on;axis([-0.5 0.5 -65 5]);
    title(titl(i,:));
end

你可能感兴趣的:(数字信号处理)