• DOA——ESPRIT算法


    相位phei = 2*pi*f*d*sind(theta),因此理论上来讲测向的算法都可以用来测频。

    ESPRIT:Estimating signal parameters viarotational invariance techniques,中文为旋转因子不变法。

    ESPRIT用于测频:

    %Example_esprit
    clear all;clc;close all;
    N=200;     %signal length
    m = N/2;
    L=N-m;
    s_amp=[1.31*exp(1i*pi/4),2.07*exp(1i*pi/3),1.88*exp(1i*pi/5)];
    s_omega=[0.12*pi,0.37*pi,0.72*pi];
    eps_sigma=0;
    sigma=0.5;
    x=zeros(1,N);%initialize
    w = sqrt(sigma)*randn(1,N);
    n = [1:N];
    for slen=1:length(s_omega)
        x = x+s_amp(slen)*exp(1j*s_omega(slen)*n)  ;
    end
    x=x+w;
    for n = 1:L
        X(:,n) = x(n:(n+m-1));
    end
    for n = 1:L
        Y(:,n) = x((n+1):(n+m));
    end
    %RxxRxy
    Rxx = 0;
    for i = 1:L
        Rxx = Rxx+X(:,i)*X(:,i)';
    end
    Rxx = Rxx/L;
    Rxy = 0;
    for i = 1:L
        Rxy = Rxy+X(:,i)*Y(:,i)';
    end
    Rxy = Rxy/L;
    [A,B] = eig(Rxx);
    var = min(diag(B));
    I = eye(m);
    Z = diag(ones(1,m-1),-1);
    Cxx = Rxx - I*var;
    Cxy = Rxy - Z*var;
    [~,B] = eig(Cxx,Cxy);
    f=angle(diag(B));
    [~,fpos]=sort(abs(abs(diag(B))-1));
    f=f(fpos);
    fval=f(f>0);
    omega_est=sort(fval(1:length(s_amp)));
    disp('结果对比:')
    [omega_est,s_omega']
    

      

    ESPRIT用于测向:

    clear all
    clf
    set(0,'defaultaxesfontsize',22);
    M=12;
    Nb=32;
    P=3;
    %angles=[25 80 135]*(pi/180);
    angdeg=[80 90 115];
    angles=angdeg*(pi/180);
    dlambda=0.5;
    %generate random bits of information
    poles=zeros(1,P);
    X=zeros(M,Nb);
    Rideal=zeros(M,M);
    for k=1:P,
    mu=pi*cos(angles(1,k));
    poles(1,k)=exp(j*mu);
    a=exp(j*mu*(0:M-1)).';
    Rideal=Rideal+a*a';
    br=ones(1,Nb);
    temp=rand(1,Nb);
    br(find(temp<.5))=-1;
    bi=ones(1,Nb);
    temp=rand(1,Nb);
    bi(find(temp<.5))=-1;
    b=br+j*bi;
    X=X+a*b;
    end
    %add some noise
    X=X+0.6*(randn(M,Nb)+j*randn(M,Nb));
    Rxx=X*X'/Nb;
    [E,D,V]=svd(Rxx);
    %ESPRIT algorithm:
    Es=E(:,1:P);
    Es1=Es(1:M-1,:); Es2=Es(2:M,:);
    Psi=Es1Es2;
    [T,Phi]=eig(Psi);
    Phivec=diag(Phi);
    %plot eigenvalues from ESPRIT and compare with true frequencies
    polar(0,1,'.')
    hold on
    plot(real(poles),imag(poles),'kx','MarkerSize',12,'Linewidth',2);
    plot(real(Phivec),imag(Phivec),'ro','MarkerSize',12,'Linewidth',2);
    hold off
    legend('True "poles"','ESPRIT eigenvalues')
    

      

  • 相关阅读:
    ubuntu安装mysql并修改编码为utf-8
    ubuntu16.04安装jdk1.8
    解决 Can't Connect to MySQL Server on IPAddress (10061) 的问题
    使用开源数据库客户端DBeaver连接DB2数据库
    Windows下使用console线连接思科交换机
    win7安装JDK6
    Python将excel文件从xls转换为xlsx
    Windows使用Gitblit搭建Git服务器
    B树、B-树、B+树、B*树
    必须熟悉的vim快捷键操作
  • 原文地址:https://www.cnblogs.com/xingshansi/p/7170569.html
Copyright © 2020-2023  润新知