www.gusucode.com > AR模型功率谱估计源码程序 > AR模型功率谱估计源码程序/功率谱估计/Mainfun.m
clear; clc; x = [101 82 66 35 31 7 20 92 154 125 85 68 38 23 10 24 83 132 131 118 90 67 60 47 41 21 16 6 4 7 14 34 45 43 48 42 28 10 8 2 0 1 5 12 14 35 46 41 30 24 16 7 4 2 8 17 36 50 62 67 71 48 28 8 13 57 122 138 103 86 63 37 24 11 15 40 62 98 124 96 66 64 54 39 21 7 4 23 55 94 96 77 59 44 47 30 16 7 37 74]; N=length(x); %调用自相关函数求得x的自相关R R=ZXG(x); H=1024;%FFT点数 %han=zeros(1,1024); %定义一个窗长为N的汉明窗 for i=1:N han(i)=100*(0.54-0.46*cos(2*pi*i/N)); end %用周期图法求数据的功率谱估计P X=abs(fft(x,H)); for i=1:H P(i)=X(i)*X(i)/N; end %改进之后的周期图法,u为汉明窗 for i=1:99 u(i)=R(i)*han(i); end UU=abs(fft(u,H)); %三阶AR模型参数得其功率谱 a_11=-R(2)/R(1); D_1=(1-abs(a_11)*abs(a_11))*R(1); a_22=-(R(3)+a_11*R(2))/D_1; a_21=a_11+a_22*a_11; D_2=(1-abs(a_22)*abs(a_22))*D_1; a_33=-(R(4)+a_21*R(3)+a_22*R(2))/D_2; a_32=a_22+a_33*a_21; a_31=a_21+a_33*a_22; D_3=(1-abs(a_33)*abs(a_33))*D_2; A=[a_31 a_32 a_33]; D=abs(fft(A,H)); for i=1:H PP(i)=D_3/((1+D(i))*(1+D(i))); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% 因为AR谱估计高阶算法与三阶算法类似,而这种 %%% %%% 方法与线性预测谱估计等效,故可以直接直接调 %%% %%% 用求线性预测的系统函数LPC(X,N)求取高阶AR %%% %%% 谱估计 %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %取阶数为70 L=LPC(x,70); LL=abs(fft(L,H)); for i=1:H PPP(i)=D_3/((1+LL(i))*(1+LL(i))); end %axis([0 128 0 5]); %Burg法求解AR模型的参数,得到的功率谱 J=30; %调用Burg算法 [K,D]=burg_Kp(x,J); %J表示所取阶数 A=zeros(1,J+1); A(1)=1; A(2:J+1)=K(J,:); D2=D(J+1); FA=abs(fft(A,H)); for i=1:H PA(i)=D2/((1+FA(i))*(1+FA(i))); end %画周期图法谱估计 figure(1); subplot(2,1,1); plot(P); axis([0 100 0 100000]); title('周期图法谱估计(FFT点数:1024)'); xlabel('n'); ylabel('P(w)'); %axis([0 100 -15 15]); grid on; %画改进后的周期图法谱估计(加窗): subplot(2,1,2); plot(UU); axis([0 100 0 1000000]); title('改进后的周期图法谱估计(FFT点数:1024)'); xlabel('n'); ylabel('P(w)'); grid on; %自回归AR模型谱估计(Levinson-Durbin)法 %画三阶AR模型谱估计 figure(2); subplot(2,1,1); plot(PP); title('三阶AR模型谱估计Levinson-Durbin法'); xlabel('n'); ylabel('P(w)'); grid on; %画高阶(70阶)AR模型谱估计 subplot(2,1,2); plot(PPP); axis([0 100 0 400]); title('高阶(70阶)AR模型谱估计Levinson-Durbin法'); xlabel('n'); ylabel('P(w)'); grid on; %画Burg法求解AR模型的参数,得到的功率谱曲线 %阶数选30 figure(3); subplot(2,1,1); plot(PA); axis([0 128 0 800]); title('30阶AR模型谱估计Burg法(FFT点数:1024)'); xlabel('n'); ylabel('P(w)'); grid on;