burg算法实验编程报告 下载本文

内容发布更新时间 : 2024/5/18 11:41:21星期一 下面是文章的全部内容请认真阅读。

Burg算法的编程

一、实验目地:

(1)、理解Burg算法的递归过程; (2)、学会使用MATLAB编写Burg算法函数。

二、实验原理:

Burg算法是使前向预测误差和后向预测误差均方误差之和最小来求取Km的,它不对已知数据段之外的数据做认为假设。计算m阶预测误差的递推表示公式如下:

em(n)?em-1(n)?kmem-1(n-1)em(n)?em-1(n-1)?kmem-1(n) e0(n)?e0(n)?x(n)

求取反射系数的公式如下:

2E[em-1(n)em-1(n-1)]E{[em-1(n)]2?[em-1(n-1)]2}N-1ffbbbffbfbkm?-fb

对于平稳随机过程,可以用时间平均代替集合平均,因此上式可写成:

km???-???e(n)???efn?mN-1f2n?mm-12?em-1(n)em-1(n-1)bm-1?b?,m?1,2,?,p

(n-1)??2这样便可求得AR模型的反射系数。

将m阶AR模型的反射系数和m-1阶AR模型的系数代入到Levinson关系式中,可以求得AR模型其他的p-1个参数。

Levinson关系式如下:

am(i)?am-1(i)?kmam-1(m-i),i?1,2,?,m-1

m阶AR模型的第m+1个参数G,

G??2m,

其中

?m是预测误差功率,可由递推公式

m

???m-1(1-km)2 求得。

易知为进行该式的递推,必须知道0阶AR模型误差功率

?0

?0=Ex(n)?Rx(0)

?2?可知该式由给定序列易于求得。完成上述过程,即最终求得了表征该随机信号的AR模型的p+1个参数 。然后根据

j ?2j ?=?H(e) (e)?Sx2即可求得该随机信号的功率谱密度。

三、实验程序及过程

%注意:书上是从零开始的,这里是从一开始,即序列的起始位置是a(1)不是a(0)

clear all

N=1000;%选择的序列为1000个点 n=N;

M=3;%递归算法获得M-1阶误差 eq=zeros(M,n); eh=zeros(M,n);

h=1/3; %初始化等比序列的比例系数 for n=1:N+1 %初始化前想和后向误差 eq(1,n)=h^(n-1); eh(1,n)=h^(n-1); x(n)=h^(n-1); end

%%利用burg算法计算二阶反射系数Z(1)和Z(2) for m=2:M a=0; b=0; c=0;

for n=m:N+1

%a=(norm(eq(m-1,:),2))^2; a=a+eq(m-1,n)^2;

%b=(norm(eh(m-1,:),2))^2; b=b+eh(m-1,n-1)^2;

c=c+eq(m-1,n)*eh(m-1,n-1)';

Z(m-1)=-2*c/(a+b);%利用a,b,c求解反射系数Z

eq(m,n)=eq(m-1,n)+Z(m-1)*eh(m-1,n-1);%更新前向误差

eh(m,n)=eh(m-1,n-1)+conj(Z(m-1))*eh(m-1,n);%更新后向误差 end end

%求解零阶误差 w=0;

for n=1:N

w=w+x(n)^2;%累加w的值 end

W(1)=2*w;

%求解一阶误差

W(2)=(W(1)-eq(1,1)^2-eh(1,N)^2)*(1-Z(1)*Z(1));