AR模型估计功率谱

假设信号为,添加的噪声为方差0.1的白噪声。请采用AR模型估计其功率谱。

  • 设计过程
  1. 分析时间序列和回归一样,目的都是预测。在回归里面,我们有一元回归于多元回归,在时间序列里面,我们有自回归。与一元、多元一样,我们分为一阶与多阶自回归。其实还是那样的理念,只不过之前是变量与应变量,现在是存在时滞的序列之间的关系。

一阶自回归AR,也就是,Yt=b*Yt-1+ut。

  1. 首先来生成一个时间序列,其自回归方程如下:

yt = 0.8 * yt-1 + c

其中c是残差项,我们用白噪音,也就是正态分布来表示。

  1. AR模型阶数的选取:采用AIC准则进行选取。

 

选取最小的K,就是AR模型的阶次。

 

   、程序

N=400;

%%%%%%%  生成x(n)的前200个样本  %%%%%%%%%%%%%%%%%%%%%%%%

R = normrnd(0,0.1,N);

for i=1:N

  x(i)=R(i)+sin(i/100)*sin(i/20);

end

 

theta=[];

for i=1:N

    sum=0;

    for k=1:N-i

        sum=sum+x(k)*x(i+k-1);

    end

    theta(i)=1/(N-i+1)*sum;

end

 

 

for k=-N:N

    w=pi*k/N;

    p=0;

    for i=2:N

        p=p+theta(i)*(exp(-j*w*(i-1))+exp(j*w*(i-1)));

    end

    q(k+N+1)=p+theta(1);

end

 

for k=-N:N

    w=pi*k/N;

     X(k+N+1)=0;

    for i=1:N

        X(k+N+1)= X(k+N+1)+x(i)*exp(-j*w*(i-1));

    end

end

for i=1:2*N+1

    X(i)=(1/N)*(abs(X(i)))^2;

end    

 

 

%%%%%%%%%%%%%%%%ARMA模型%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

s=100;

for l=1:s

   W=zeros(l+1,l+1);

   NI=zeros(l+1,l+1);

   %%%%%%%        构造矩阵M     %%%%%%%%%%%%%

   for e=1:l+1

      for f=e:l+1

        W(e,f)=theta(f-e+1);

        W(f,e)=W(e,f);

      end

   end

   %%%%%%  利用AIC准则判断最优阶次  %%%%%%%%%%

  NI=W^(-1);

 det=1/NI(1,1);

 AIC(l)=N*log(det)+2*l;

 

end

det1=min(AIC);

%%%%%%%%  找到最优阶次  %%%%%%%%%%%%%%%%%%%%%%

for i=1:s

    if AIC(i)==det1;

        disp('最优阶次是:')

        jc=i

    end

end

%%%%%%%%%%%%%%  利用AR来计算功率谱密度  %%%%%%

 bb=NI*det1;

for i=1:s

    aa(i,1)=bb(i+1,1);

end

for k=-N:N

     w=pi*k/N;

     SUM=0;

     for i=1:s

         SUM=SUM+aa(i,1)*exp(-j*w*i);

     end

     u(k+N+1)=det*(abs(1/(1+SUM)))^2;

end

plot(abs(q),'r');

hold on

plot(abs(X),'k')

hold on

plot(u)

legend('自相关法','周期图法','AR模型')

四、结果图

 

最优阶次是:jc =80

 

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中AR模型功率谱估计AR阶次估计的实现-psd_my.rar (最近看了几个关于功率谱的问题,有关AR模型估计,在此分享一下,希望大家不吝指正) (声明:本文内容摘自我的毕业论文——心率变异信号的预处理及功率谱估计) (按:AR模型功率谱估计是对非平稳随机信号功率谱估计的常用方法,但是其模型阶次的估计,除了HOSA工具箱里的arorder函数外,没有现成的函数可用,arorder函数是基于矩阵SVD分解的阶次估计方法,为了比较各种阶次估计方法的区别,下面的函数使用了'FPE', 'AIC', 'MDL', 'CAT'集中准则一并估计,并采用试验方法确定那一个阶次更好。) ………………………………以上省略…………………………………………………………………… 假设原始数据序列为x,那么n阶参数使用最小二乘估计在MATLAB中实现如下: Y = x; Y(1:n) = []; m = N-n; X = [];% 构造系数矩阵 for i = 1:m     for j = 1:n         X(i,j) = xt(n i-j);     end end beta = inv(X'*X)*X'*Y'; 复制代码 beta即为用最小二乘法估计出的模型参数。 此外,还有估计AR模型参数的Yule-Walker方程法、基于线性预测理论的Burg算法和修正的协方差算法等[26]。相应的参数估计方法在MATLAB中都有现成的函数,比如aryule、arburg以及arcov等。 4.3.3 AR模型阶次的选择及实验设计 文献[26]中介绍了五种不同的AR模型定阶准则,分别为矩阵奇异值分解(Singular Value Decomposition, SVD)定阶法、最小预测定误差阶准则(Final Prediction Error Criterion, FPE)、AIC定阶准则(Akaika’s Information theoretic Criterion, AIC)、MDL定阶准则以及CAT定阶准则。文献[28]中还介绍了一种BIC定阶准则。SVD方法是对Yule-Walker方程中的自相关矩阵进行SVD分解来实现的,在MATLAB工具箱中arorder函数就是使用的该算法。其他五种算法的基本思想都是建立目标函数,阶次估计的标准是使目标函数最小化。 以上定阶准则在MATLAB中也可以方便的实现,下面是本文实现FPE、AIC、MDL、CAT定阶准则的程序(部分): for m = 1:N-1    ……       % 判断是否达到所选定阶准则的要求    if strcmp(criterion,'FPE')        objectfun(m 1) = (N (m 1))/(N-(m 1))*E(m 1);    elseif strcmp(criterion,'AIC')        objectfun(m 1) = N*log(E(m 1)) 2*(m 1);    elseif strcmp(criterion,'MDL')        objectfun(m 1) = N*log(E(m 1)) (m 1)*log(N);    elseif strcmp(criterion,'CAT')        for index = 1:m 1            temp = temp (N-index)/(N*E(index));        end        objectfun(m 1) = 1/N*temp-(N-(m 1))/(N*E(m 1));    end        if objectfun(m 1) >= objectfun(m)        orderpredict = m;        break;    end end 复制代码 orderpredict变量即为使用相应准则预测的AR模型阶次。 (注:以上代码为结合MATLAB工具箱函数pburg,arburg两个功率谱估计函数增加而得,修改后的pburg等函数会在附件中示意,名为pburgwithcriterion) 登录/注册后可看大图 程序1.JPG (35.14 KB, 下载次数: 20352) 下载附件  保存到相册 2009-8-28 20:54 上传 登录/注册后可看大图 程序2.JPG (51.78 KB, 下载次数: 15377) 下载附件  保存到相册 2009-8-28 20:54 上传
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值