谐波频率估计的总体最小二乘方法TLS_ESPRIT.rar

  • jiajiajiajiajaijaai
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 1
    收藏次数
  • 10 积分
    下载积分
  • 24
    下载次数
  • 2018-05-03 17:29
    上传日期
利用总体最小二乘法谐波检测,检测结果快速准确
谐波频率估计的总体最小二乘方法TLS_ESPRIT.rar
  • TLS_ESPRIT.m
    3.8KB
内容介绍
%------------TLS_ESPRIT------------------------ clc; clear; number=100; %运行次数 mistake=0; %错误次数 l=0; MSE=0; %均方误差和初值置0 s=9; for num=1:number N=100; % 采样点数 p=4; % 谐波分量个数 m=10; % 选定时间窗宽度 s=m-1; %SNR = 30; % 信噪比 omega1=-0.19*pi; %信号1的角频率 omega2=-0.37*pi; %信号2的角频率 omega3=0.19*pi; %信号3的角频率 omega4=0.37*pi; %信号4的角频率 s1=20; %信号1的幅值 s2=0.2; %信号2的幅值 s3=20; %信号3的幅值 s4=0.2; %信号3的幅值 Ts=0.01; %采样周期 x = zeros(1,N); for k = 0:(N-1) x1=s1*exp(j*omega1*k*Ts); x2=s2*exp(j*omega2*k*Ts); x3=s3*exp(j*omega3*k*Ts); x4=s4*exp(j*omega4*k*Ts); x(k+1)=x1+x2+x3+x4; %x(k+1) = s*exp(j*omega*k*Ts).'; end %y = awgn(x,SNR); % 加性白噪声 x5 =0.5*randn(1,N); %产生均值为0,方差为1的高斯噪声 y=x+x5; r=xcorr(y,m); %计算自相关函数r(0),r(1),...,r(m) Rxx=zeros(m,m); Rxy=zeros(m,m); for k=1:m %生成矩阵Rxx,Rxy Rxx(k,:)=r(m+2-k : 2*m+1-k); Rxy(k,:)=r(m+3-k : 2*(m+1)-k); end d=eig(Rxx); %计算Rxx的特征值 sigma = mean(d(p+1:m)); %对于m>p的特征值取平均作为噪声方差σ^2的估计 for i=1:m % 产生特殊矩阵Z for j=1:m if (i-j==1) Z(i,j)=1; else Z(i,j)=0; end end end Cxx = Rxx - sigma*eye(m); %计算Cxx和Cxy Cxy = Rxy - sigma*Z; [U,D,V]=svd(Cxx); %对Cxx奇异值分解 U1=U(:,[1:s]); V1=U(:,[1:s]); D1=D([1:s],[1:s]); C=U1'*Cxy*V1; gamma = eig(D1,C); %计算矩阵束(D1,C)的广义特征值 gammaeff=0; % 去除广义特征值里偏离较大的点 for i=1:s if (abs(gamma(i))>=0.99 & abs(gamma(i)<=1.01)) gammaeff=[gammaeff gamma(i)]; end end gammaeffective=gammaeff(2:length(gammaeff)); ome=angle(gammaeffective); %将特征值转换成弧度角,即估算出omega omeg=sort(ome); if length(omeg)~=4 mistake=mistake+1; %统计估算出的omega个数不等于给定频率个数的次数 omeg=[0 0 0 0]; %若个数不为给定频率次数,置0 end omegaout(num,:)=omeg(1:p); %将估算出的omega由大到小重新排列并存入矩阵 %-------------------------------------------------------------------------- theta=0:pi/100:2*pi; x1=sin(theta); y1=cos(theta); %绘制单位圆及给定频率 plot(x1,y1); hold on plot(theta,tan(0.19*pi)*theta); hold on plot(theta,tan(0.37*pi)*theta); hold on omega=sort([omega1 omega2 omega3 omega4]); % 给定频率分量并按从小到大排序 j=sqrt(-1); plot(exp(j*omega),'ro') % 给定频率 axis([-1 1 -1 1]); %-------------------------------------------------------------------------- hold on plot(gammaeffective,'x') % 将估计出的频率绘制出来 %hold off end for i=1:number if omegaout(i,:)~=0 l=l+1; omegaou(l,:)=omegaout(i,:); MSE=MSE+(omegaout(i,:)-omega)*(omegaout(i,:)-omega)'; end RMSE=sqrt(MSE/(number-mistake)); %计算number次实验均方误差 end omega omegaou hold on title(strcat('TLS-ESPRIT算法',' 实验次数=',num2str(number),' RMSE=',num2str(RMSE))); xlabel ('红色圈代表给定频率,蓝色×代表估算出的频率'); figure; plot(real(y)); title(strcat('信号波形图',' a1=',num2str(s1/2),' a2=',num2str(s2/2),' 采样周期=',num2str(Ts),' 噪声方差=0.5')); xlabel ('采样点数'); %mistake RMSE
评论
    相关推荐
    • Esprit--master.zip
      esprit的几种算法,ls_esprit算法和tls_esprit算法,以及他们的比较
    • TLS-ESPRIT.rar
      经典DOA估计算法-TLS-ESPRIT算法函数,附原始参考文献
    • tls_esprit.rar
      一段关于esprit算法的仿真程序,对结果进行绘图
    • TLS-ESPRIT.rar
      总体最小二乘法的ESPRIT方法,利用该方法进行DOA估计,算法的估计精度明显好于原来的ESPRIT算法
    • esprit_tls.rar
      一种ESPRIT算法,子空间方法,教学实验
    • 5956471ESPRIT-TLS.rar
      gfdgdhdhfdhg gjhghjgjhghjg
    • TLS_ESPRIT_Algorithm.zip
      TSL-ESPRIT算法求解波达方位估计的仿真程序
    • ESPRIT.rar
      eprit算法仿真,简单易懂,附算法实现过程说明
    • RMSE变化tls-esprit程序.rar
      详细介绍了基于均匀线阵型的波达方向估计算法,线性旋转不变性子空间方法tls-esprit,介绍了RMSE变化的情况,具有可操作性。
    • matlabcnhelp.rar
      matlab中文帮助很难找的,快速下载