阵列信号处理算法应用领域涉及雷达、声纳、卫星通信等众多领域,其主要目的就是对天线阵列接收到的信号进行处理,增强有用信号,抑制无用信号,以达到空域滤波的目的,最后提取回波信号中所包含的角度等信息。
DOA估计意思是波达角度估计,是指电磁波到达天线阵列的方向。
如上图所示,DOA算法的基本思想就是利用天线阵列之间的相位差进行角度的估计。对于远场信号平面波来说,回波到各个天线之间都有一个波程差,其导致了相位差。
DBF数字波束形成,又叫做空域滤波,是阵列信号处理的一个主要方向。其基本思想是通过将各个阵元输出进行加权求和,将天线波束导向在一个方向,对期望来波方向得到最大输出功率。
CAPON算法又叫最大方差无畸变算法。思想是最小化信号功率,又使得来波方向为单位增益的准测自适应波束形成。
MUSIC、ROOT-MUSIC是利用信号子空间和噪声子空间的正交性。
ESPRIT是利用信号子空间的旋转不变性。
DML是利用最大似然准测,将背景噪声和接收噪声认为成大量独立的噪声源发射的,因而把噪声过程视为一平稳高斯随机白噪声过程,信号波形则假设为确定性信号,但输入波形是待估计的位置参数。而确定性最大似然估计算法中的未知参数是信号参数和噪声方差。这些未知量都是最大化似然估计得到的。
上面这几个算法都是超分辨算法,可以克服瑞丽极限。
本文主要对 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随快拍数变化的趋势对比:
文章来源:https://www.toymoban.com/news/detail-740866.html
结论:文章来源地址https://www.toymoban.com/news/detail-740866.html
- DBF算法:随着快拍数的增加,DBF算法的分辨率和定位精度会提高,但计算复杂度也会增加。
- CAPON算法:CAPON算法的性能随着快拍数的增加而提高,但在快拍数过多时,容易出现过拟合现象。
- MUSIC算法:MUSIC算法的分辨率和定位精度随着快拍数的增加而提高,但计算复杂度也会增加。
- ROOT-MUSIC算法:ROOT-MUSIC算法的性能表现与MUSIC算法类似,随着快拍数的增加,其分辨率和定位精度也会提高。
- ESPRIT算法:ESPRIT算法对快拍数的要求较低,通常只需要较少的快拍数就可以保持较好的性能表现。
- DML算法:DML算法对快拍数的要求较低,但过多的快拍数会导致计算复杂度增加。
到了这里,关于DOA算法之DBF、CAPON、MUSIC、ROOT-MUSIC、ESPRIT、DML算法对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!