内容发布更新时间 : 2025/1/1 18:52:40星期一 下面是文章的全部内容请认真阅读。
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));