DOA算法之DBF、CAPON、MUSIC、ROOT-MUSIC、ESPRIT、DML算法对比

阵列信号处理算法应用领域涉及雷达、声纳、卫星通信等众多领域,其主要目的就是对天线阵列接收到的信号进行处理,增强有用信号,抑制无用信号,以达到空域滤波的目的,最后提取回波信号中所包含的角度等信息。

DOA估计意思是波达角度估计,是指电磁波到达天线阵列的方向。

 如上图所示,DOA算法的基本思想就是利用天线阵列之间的相位差进行角度的估计。对于远场信号平面波来说,回波到各个天线之间都有一个波程差,其导致了相位差。

DBF数字波束形成,又叫做空域滤波,是阵列信号处理的一个主要方向。其基本思想是通过将各个阵元输出进行加权求和,将天线波束导向在一个方向,对期望来波方向得到最大输出功率。

CAPON算法又叫最大方差无畸变算法。思想是最小化信号功率,又使得来波方向为单位增益的准测自适应波束形成。

MUSIC、ROOT-MUSIC是利用信号子空间和噪声子空间的正交性

ESPRIT是利用信号子空间的旋转不变性

DML是利用最大似然准测,将背景噪声和接收噪声认为成大量独立的噪声源发射的,因而把噪声过程视为一平稳高斯随机白噪声过程,信号波形则假设为确定性信号,但输入波形是待估计的位置参数。而确定性最大似然估计算法中的未知参数是信号参数\theta和噪声方差。这些未知量都是最大化似然估计得到的。

上面这几个算法都是超分辨算法,可以克服瑞丽极限。

本文主要对 DOA算法之DBF、CAPON、MUSIC、ROOT-MUSIC、ESPRIT、DML进行性能的对比。希望通过调研仿真,熟悉各个DOA算法的特点和优缺点,加强自己在不同环境下的算法选择能力

部分主要代码:

%%dbf
a = exp(-1i*2*pi*dd*sind(theta_scan).'*array);
DBFresult1 = 20*log10(abs(signal1(:,1).'*a.')./(max(abs(signal1(:,1).'*a.'))));
%%capon
R1 = inv(signal1*signal1'./snap);   %这里需要是共轭转置
for ii = 1:length(theta_scan)
    aa =  exp(-1i*2*pi*dd*sind(theta_scan(ii)).*array);
    caponresult1(ii) = 1/(abs(aa*R1*aa'));
end
caponresult1 = 20*log10(caponresult1./max(caponresult1));
%%MUSIC
R      =  signal1*signal1'/snap;
[EV,D] =  eig(R);     %特征值分解,D为由INVR的特征值构成的对角矩阵,EV为其特征向量构成的矩阵 
EVA    =  diag(D)';   %抽取D的对角线元素并转置
[EVA,I] = sort(EVA);  %从小到大排序,I对应EVA中元素在原来EVA中的位置。
EVA    = fliplr(EVA); %对特征值再从大到小排列
EV     = fliplr(EV(:,I));  %对特征值对应的特征向量进行对应的从大到小的排序
EN     = EV(:,numstarget+1:arraylen);   %把噪声子空间拿出来
for ii = 1:length(theta_scan)
    aa = exp(1j*2*pi*dd*sind(theta_scan(ii))*array).';
    MUSICresult(ii) = (aa'*aa)/(aa'*EN*EN'*aa);    
end
MUSICresult = 20*log10(abs(MUSICresult)./(max(abs(MUSICresult))));
%%root-MUSIC
Unx=EN;               
syms z;
pz=z.^([0:arraylen-1]');
pz1=(z^(-1)).^([0:arraylen-1]);
fz=z.^(arraylen-1)*pz1*Unx*Unx'*pz;         % 构造多项式
a=sym2poly(fz);                         % 符号多项式->数值多项式
zx=roots(a);                            % 求根
rx=zx';
[as,ad]=(sort(abs((abs(rx)-1))));
DOAest=asin(sort(angle(rx(ad([1,3])))/pi))*180/pi;
%ESPRIT
[EV2,D2]  = eig(R);            
EVA2      = real(diag(D2)');   
[EVA2,I2] = sort(EVA2);        
EVA2      = fliplr(EVA2);      
EV2       = fliplr(EV2(:,I2)); 
Exy   = [EV2(1:arraylen-1,1:numstarget)  EV2(2:arraylen,1:numstarget)]; 
E_xys = Exy'*Exy./(size(Exy'*Exy,1));   
[EV3,D3] = eig(E_xys);
EVA_xys  = real(diag(D3)');
[EVA_xys,I3] = sort(EVA_xys);
EVA_xys      = fliplr(EVA_xys);
EV_xys       = fliplr(EV3(:,I3));
Gx  = EV_xys(1:numstarget,numstarget+1:numstarget*2);
Gy  = EV_xys(numstarget+1:numstarget*2,numstarget+1:numstarget*2);
Psi = -Gx/Gy;
%%DML
R  =  signal1*signal1'/snap;
target_serched = zeros(1,numstarget);
max_trace = intmin;
aa = zeros(length(array),numstarget);
theta_scan1    = linspace(sind(-90),sind(90),1024);
for ii = 1:length(theta_scan1)
    aa(:,1) = exp(1i*2*pi*dd*array.'*theta_scan1(ii));
    for jj = ii+1:length(theta_scan1)                          
        aa(:,2) = exp(1i*2*pi*dd*array.'*theta_scan1(jj));
        Pa = aa*(inv(aa'*aa))*aa';  
        Y = Pa*R;  
        tmp = abs(trace(Y));
        if tmp > max_trace
            target_serched(1) = theta_scan1(ii);    
            target_serched(2) = theta_scan1(jj);
            max_trace = tmp;
        end
    end
end

首先是各个算法谱峰的对比:

仿真条件:16个天线阵列,快拍数为50,信噪比为20,角度设定为(-10°,10°)

结论:dbf算法精度最低,其次是capon,其余超分辨算法测角精度上差不多。

然后是各个算法测量角度、RMSE随信噪比变化的趋势对比:

结论:

  • DBF算法:在高信噪比下,DBF算法的性能表现较好,但在低信噪比下,其分辨率和定位精度会下降。
  • CAPON算法:CAPON算法在低信噪比下的性能表现较好,但在高信噪比下,其抗干扰能力较弱,容易受到噪声的影响。
  • MUSIC算法:MUSIC算法在高信噪比下的性能表现较好,但在低信噪比下,其分辨率和定位精度会下降。
  • ROOT-MUSIC算法:ROOT-MUSIC算法在高信噪比下的性能表现较好,但在低信噪比下,其分辨率和定位精度也会下降。
  • ESPRIT算法:ESPRIT算法的性能表现与信噪比关系不大,在不同信噪比下都能保持较好的分辨率和定位精度。
  • DML算法:DML算法在低信噪比下的性能表现较好,但在高信噪比下容易产生估计误差。

最后是各个算法测量角度、RMSE随快拍数变化的趋势对比:

结论:

  • DBF算法:随着快拍数的增加,DBF算法的分辨率和定位精度会提高,但计算复杂度也会增加。
  • CAPON算法:CAPON算法的性能随着快拍数的增加而提高,但在快拍数过多时,容易出现过拟合现象。
  • MUSIC算法:MUSIC算法的分辨率和定位精度随着快拍数的增加而提高,但计算复杂度也会增加。
  • ROOT-MUSIC算法:ROOT-MUSIC算法的性能表现与MUSIC算法类似,随着快拍数的增加,其分辨率和定位精度也会提高。
  • ESPRIT算法:ESPRIT算法对快拍数的要求较低,通常只需要较少的快拍数就可以保持较好的性能表现。
  • DML算法:DML算法对快拍数的要求较低,但过多的快拍数会导致计算复杂度增加。

  • 8
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Matlab波束形成程序是一种用于处理和分析信号的程序,可以在阵列天线中实现波束形成。波束形成是一种通过调整天线阵列中各个天线的相位和振幅权重,以实现主要能量传输方向的方法。 在Matlab中,波束形成程序的主要步骤包括: 1. 创建阵列天线模型:根据实际情况,创建阵列天线的位置和方向模型。 2. 设计波束形成算法:根据需要实现的目标,选择合适的波束形成算法,例如波束形成算法中的线性加权法或最小方差法等。 3. 计算每个天线的权重:根据选定的波束形成算法,计算每个天线散射场的权重,以优化目标方向的能量传输。 4. 生成波束信号:根据计算得到的每个天线的权重,生成用于波束形成的信号。 5. 进行波束形成:将生成的波束信号输入到阵列天线中的各个天线上,并根据权重分配信号相位,实现主要能量传输方向的波束形成。 6. 分析和可视化波束形成结果:将波束形成后的信号进行分析和可视化,以评估波束形成算法的性能和效果。 总之,Matlab波束形成程序是一种用于阵列天线的信号处理和分析工具,通过调整每个天线的相位和振幅权重,实现主要能量传输方向的优化。这种程序需要包括阵列天线模型的创建、波束形成算法的设计、权重计算、波束信号生成、波束形成实现和结果分析等步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值