ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:94.88KB ,
资源ID:5286437      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5286437.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用协方差法估计AR模型参数.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用协方差法估计AR模型参数.docx

1、利用协方差法估计AR模型参数随机信号分析基础大作业利用协方差法估计AR模型参数进而估计功率谱严 奎(学号:3*)陈 韬(学号:3*2)朱燕豪(学号:*1)2011年01月15日作业综述:本作业中采用面向对象的程序设计方法,将用到的子程序封装在一个类中,防止其他函数的干扰,具有良好的信息内聚性。类中定义的有获得(0,1)分布随机数的函数uniform(),产生高斯分布随机数的函数gauss(),产生自回归滑动平均模型ARMA(p,q)数据的函数arma(),用乔布斯基(Cholesky)算法求解对称正定方程组的函数cholesky(),计算ARMA模型的功率谱密度的函数psd(),用协方差方法估

2、计AR模型参数,进而实现功率谱估计的函数covar()。采用的编程工具是VC+6.0以及VS2010,用MATLAB对生成的数据进行画图。一题目要求给定一段信号数据及采样率,利用现代谱估计理论编程估计信号的功率谱。二基本原理及方法现代谱估计是通过观测数据估计参数模型再按照求参数模型输出功率的方法估计信号功率谱,主要是针对经典谱估计的分辨率低和方差性能不好等问题提出的,应用最广的是AR参数模型。现代谱估计的参数模型有自回归滑动平均(ARMA)模型、自回归(AR)模型、滑动平均(MA)模型,Wold分解定理阐明了三者之间的关系:任何有限方差的ARMA或MA模型的平稳随机过程可以用无限阶的AR模型表

3、示,任何有限方差的ARMA或MA模型的平稳随机过程可以用无限阶的AR模型表示。但是由于只有AR模型参数估计是一组线性方程,而实际的物理系统往往是全极点系统,因而AR应用最广。我们用协方差法估计AR模型参数,进而实现功率谱估计。若已知平稳随机序列x(n)的AR模型为其中a(i)是AR系数,w(n)是均值为零,均方差为的白噪声。1.计算协方差2.用乔布斯基算法解对称正定方程组N阶对称正定方程组的矩阵形式为AX=B,即矩阵A的乔布斯基分解这里D是主对角元素都为正实数的对角阵,即D=diag(d1,d2,dn),L为主对角元素是1的下三角矩阵。用乔布斯基算法解对称正定方程组的方法是,先用回代法求解方程

4、组LY=B,得到Y之后,再用回代法求解方程3.计算激励白噪声的方差4用AR模型参数的估计值,可以计算功率谱密度三算法设计与实现1程序流程图采用协方差的方法进行功率谱估计。如下图所示 图1算法流程图12.主要模块的设计:1.产生随机序列的函数uniform(),采用线性同余法由种子seed产生随机数。2.产生高斯白噪声的函数gauss(),gauss(double mean,double sigma,long int * s) int i;double x,y; for(x=0,i=0;i12;i+) x+=uniform(0.0,1.0,s); x=x-6.0; y=mean+x*sigma;

5、 return(y);3.ARMA模型数据的生成函数为arma()略4.乔里斯基算法解对称正定方程组的函数cholesky()略5.由协方差函数covar()求AR参数;6.再根据AR参数求出功率谱的函数psd()略;7.最终用MATLAB的 画图工具给出直观的功率谱图形,四结果分析输入平稳随机序列x(n)的AR模型为其中1,-2.76,3.809,-2.654,0.924为AR系数,根据要求产生W(n)是均值为零,方差为1的白噪声。根据均匀分布产生(0,1)分布的随机序列,再由均值和方差生成高斯白噪声如下图所示:由图可知产生的随机序列近似于高斯分布,符合题目要求。由白噪声求自回归滑动平均模型

6、ARMA(p,q)模型的数据,用协方差法估计AR模型参数,结果为:a(0)= 1.0000000a(1)=2.7310949a(2)= 3.7478402a(3)=2.5951549a(4)= 0.9022404可以看出估计出的AR模型参数与原AR模型系数基本接近,但是不相等,这是因为现代谱估计是由有限长序列估计无限长的随机序列AR模型参数,但是结果基本接近。其中预测误差功率是Pe=1.0995336,与原方差1较接近。计算AR模型系数功率谱密度根据已存储在covar1.dat的数据,用Matlab做图在归一化频率的基础上做的功率谱五任务分工 三人合作进行了前期的资料查找,阅读文献,确定现代谱

7、估计,分析算法。严 奎 (学号:3222008008)完成了程序调试,绘图。陈 韬 (学号:3222008022)完成答辩PPT的制作,以及负责主讲。朱燕豪 (学号:3222008021)完成论文的撰写。六.心得通过这次的大作业提高了我们的合作能力,文献查取能力,编程能力,使我们掌握了书本上的知识,复习了前面的高斯分布,白噪声的产生,特别是掌握了功率谱的多种分析方法,了解了现代谱估计的方法与原理,极大地提高了我们的综合能力。在选题时,我们以勇于专研问题的精神,选了现代谱分析。在做课题时,我们发现了很多问题,自己对谱分析的了解只停留在很基础的方面。特别是在完成算法分析时我们花了很多时间,开始我们

8、只建立了AR模型,为了更加完善,我们加上了ARMA模型,最后在此基础上我们采用协方差分析使结果更趋于逼真。程序编写时,我们参照了大量的网上资源,但是调试过程中,变量的定义出了很多问题,很多地方都出了问题,我们只能一步一步调试改进。虽然开始时我们遇到很多困难,编程能力太差,书本知识体系不完整缺少功率谱分析具体算法,上网条件差,图书馆资源有限等。但是怀着认真、踏实的态度我们完成了预期的任务,达到了一定的效果。总的来说,这次的课题我们都收获颇多。七参考文献1殷福亮,宋爱军数字信号C语言程序集.辽宁科技出版社,1997 2张贤达,现代信号处理,清华大学出版社,20023常建军,李海林,随机信号分析,科

9、学出版社,2006八附录程序源代码#include#include#includestdlib.h#includestdio.h#includemath.h#includemalloc.husing namespace std;class Powerpublic: Power() Power() double uniform(double a,double b,long int * seed); double gauss(double mean,double sigma,long int * s); void cholesky_1(double a,double b,int n); void

10、covar(double x,int n,int p,double a,double *v,int mode); void arma(double a,double b,int p,int q,double mean,double sigma,long *seed,double x,int n); void psd(double b,double a,int q,int p,double sigma2,double fs,double x,double freq,int len,int sign);double Power:uniform(double a,double b,long int

11、*seed) double t; *seed=2045*(*seed)+1; /seed为种子 *seed=*seed-(*seed/1048576)*1048576; t=(*seed)/1048576.0; t=a+(b-a)*t; return(t);double Power:gauss(double mean,double sigma,long int * s) int i;double x,y; for(x=0,i=0;i12;i+) x+=uniform(0.0,1.0,s); x=x-6.0; y=mean+x*sigma; return(y);void Power:choles

12、ky_1(double a,double b,int n) int i,j,k,m; double *d,*y,*xl,eps; d=(double *)malloc(n*sizeof(double); y=(double *)malloc(n*sizeof(double); xl=(double *)malloc(n*n*sizeof(double); eps=1.0e-15; m=0; d0=am; for(i=1;in;i+) for(j=0;ji;j+) m=m+1; xli*n+j=am/dj; if(j=0)continue; for(k=0;kj;k+) xli*n+j=xli*

13、n+k*xlj*n+k*dk/dj; m=m+1; di=am; for(k=0;ki;k+) di=di-dk*xli*n+k*xli*n+k; if(fabs(di)eps) printf(nill-conditioned! n); return; y0=b0; for(k=1;kn;k+) yk=bk; for(j=0;j=0;k-) bk=yk/dk; for(j=(k+1);jn;j+) bk=bk-xlj*n+k*bj; free(d); free(y); free(xl);void Power:covar(double x,int n,int p,double a,double

14、*v,int mode) int i,j,k,m; double cc,sum,*c; c=(double *)malloc(p*(p+1)/2)*sizeof(double); m=0; for(k=1;k=p;k+) for(j=1;j=k;j+) cm=0.0; for(i=p;in;i+) cm+=xi-j*xi-k; if(mode=1) for(i=0;i(n-p);i+) cm+=xi+j*xi+k;/ 计算Cxx(i,k) m=m+1; for(j=1;j=p;j+) aj-1=0.0; for(i=p;in;i+) aj-1-=xi-j*xi; if(mode=1) for(

15、i=0;i=0;k-) ak+1=ak; a0=1.0; sum=0.0; for(k=0;k=p;k+) cc=0.0; for(i=p;in;i+) cc+=xi*xi-k; if(mode=1) for(i=0;i(n-p);i+) cc+=xi*xi+k; /计算Cxx(0,k) if(k=0) sum+=cc; else sum+=cc*ak; /计算a(k)*Cxx(0,k) if(mode=1) v0=sum/(2*(n-p); else v0=sum/(n-p); /计算sigma2 free(c);void Power:arma(double a,double b,int p

16、,int q,double mean,double sigma,long *seed,double x,int n) int i,k,m; double s,*w; w=(double *)malloc(n*sizeof(double); for(k=0;kn;k+) wk=gauss(mean,sigma,seed); /得到高斯白噪声 x0=b0*w0; for(k=1;k=p;k+) /得到前p个数据 s=0.0; for(i=1;iq)?q:k; for(i=1;i=m;i+) s+=bi*wk-i; xk=s; for(k=(p+1);kn;k+) /得到p+1到n的数据 s=0.0

17、; for(i=1;i=p;i+) s+=ai*xk-i; s=b0*wk-s; if(q=0) xk=s; continue; for(i=1;i=q;i+) s+=bi*wk-i; xk=s; free(w); void Power:psd(double b,double a,int q,int p,double sigma2,double fs,double x,double freq,int len,int sign) int i,k; double ar,ai,br,bi,zr,zi,im,re,xre,xim; double ang,den,numr,numi,temp; for(

18、k=0;k0;i-) re=br; im=bi; br=(re+bi)*zr-im*zi; bi=(re+bi)*zi+im*zr; /分子的傅里叶变换 ar=0.0; ai=0.0; for(i=p;i0;i-) re=ar; im=ai; ar=(re+ai)*zr-im*zi; /分母的傅里叶变换 ai=(re+ai)*zi+im*zr; br=br+b0; ar=ar+1.0; numr=ar*br+ai*bi; /分母有理化后分子的实部 numi=ar*bi-ai*br; den=ar*ar+ai*ai; xre=numr/den; xim=numi/den; switch(sign

19、) case 0: xk=xre*xre+xim*xim; xk=sigma2*xk/fs; break; case 1: temp=xre*xre+xim*xim; temp=sigma2*temp/fs; if(temp=0.0) temp=1.0e-20; xk=10.0*log10(temp); void main() Power P; int i,n,p,q,len; long seed; double v,mean,var,c10,x500,freq200; double fs,sigma2; static double a5=1.0,-2.76,3.809,-2.645,0.92

20、4; static double b1=1.0; FILE *fp; p=4; q=0; seed=135791; mean=0.0; var=1.0; n=500; P.arma(a,b,p,q,mean,var,&seed,x,n); for(i=0;i300;i+) xi=xi+200; n=300; P.covar(x,n,p,c,&v,0); printf(The coefficient of AR modeln); for(i=0;i=p;i+) printf(a(%d)=%10.7lfn,i,ci); printf(The reflet coefficient of AR modeln); printf(Pe=%10.7lfn,v); fs=1.0; sigma2=v; len=200; P.psd(b,c,q,p,sigma2,fs,x,freq,len,1); fp=fopen(covar1.dat,w); for(i=0;ilen;i+) fprintf(fp,%lf %lfn,freqi,xi); fclose(fp);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1