PUMA:DOA估计模式的改进实现(Matlab代码实现)

 ‍个人主页:研学社的博客 

欢迎来到本博客❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

本文目录如下:

目录

1 概述

2 运行结果

3 Matlab代码实现

4 参考文献


1 概述

文献来源:

PUMA:DOA估计模式的改进实现(Matlab代码实现)_第1张图片

下载链接:PUMA: An Improved Realization of MODE for DOA Estimation | IEEE Journals & Magazine | IEEE Xplore 

方向估计(MODE)方法具有吸引人的优势,例如渐近效率,计算复杂度适中,并且在处理相干信号方面具有出色的性能,这是传统的基于子空间的方法所不具备的。然而,MODE对根多项式系数的对称性采用了额外的假设和约束,这可能会导致在低信噪比/小样本量的情况下严重的性能下降,因为任何估计误差都会因对称性而放大两次。此外,MODE 的标准实现没有用于更新其估计值的封闭式解决方案。本文证明了MODE的优化问题等价于模态分析的主特征向量利用(PUMA)算法。我们表明,具有闭式解的PUMA,不依赖于对系数的任何额外假设和约束,是最小化相同成本函数的比MODE更好的替代项。我们进行了广泛的仿真结果来支持我们的观点。

到达方向(DOA)估计是许多应用的基本阵列处理问题,例如: 雷达[1]、声纳[2]和无线 通信[3],[4]。它一直是 在过去的四十年中进行了很好的研究,产生了许多高效和准确的算法[5]-[22]。

其中,最大似然(ML)[5]方法能够提供 有效的DOA估计,但以巨大的复杂性为代价,这主要是由于多维搜索。 尽管可以应用牛顿方法等优化替代方法来避免搜索步骤,但全局 由于 ML 目标函数是非凸的,因此不能保证收敛性。基于子空间的DOA估计算法 可以在分辨率和计算复杂度之间提供良好的权衡,并已被广泛研究。 特别是,多重信号分类(MUSIC)[6]和估计 通过旋转不变性技术(ESPRIT)[7]AS的信号参数 亚空间方法的代表因其简单性和高精度而引起了极大的兴趣,并且 他们的许多变体[8]-[18]后来被开发出来。例如 MUSIC算法的计算效率修改已被设计[14]-[18]。 然而,当出现相干/高相关信号时,这些算法的性能会下降,因此需要 退相干技术,例如空间平滑(SS)[19]或 向前-后向SS(FBSS)[20],但代价是丢失阵列 孔径。特别是,已经提出了一个实值版本的root-MUSIC,它被命名为单一的root-MUSIC[18]。该算法利用了制服的中心埃尔米特性质 线性阵列 (ULA) 将复值数据转换为真实空间。此过程等效于执行 一步向前-向后平滑到样本协方差矩阵,因此它最多可以处理两个相干信号。 但是,当有两个以上的相干信号时,酉根音乐算法无法正常工作。

与MUSIC和ESPRIT相比,方向估计(MODE)[21]-[22]的方法非常有趣,因为它比MUSIC具有吸引人的优势 和ESPRIT。其中包括以下内容。

2 运行结果

PUMA:DOA估计模式的改进实现(Matlab代码实现)_第2张图片

 部分代码:

M = 10;
N = 50;
DOA = [-5, 2, 12];
K = length(DOA);
SNR = linspace(-10,6,11);
nT = 100;

for iS = 1:length(SNR)
    
    snr = SNR(iS);

    for iT = 1:nT
        
        if rem(iT,nT/2) == 0
            fprintf( 'n = %d, Trials = %d, total = %d\n',...
                iS, iT, (iS-1)*nT+iT );
        end
        
        x = StatSigGenerate(M, N, DOA, snr*ones(1,K));
        
        doa1(:,iT) = EPUMA(x, K, K, 3);
        doa2(:,iT) = EPUMA(x, K, K+1, 3);
        doa3(:,iT) = rMUSIC(x, K, 'FBSS', 2);
        [doa4(:,iT),doa5(:,iT)] = MODEX(x, K);
        
    end
    
    RMSE1(iS) = rmse(doa1, DOA);
    RMSE2(iS) = rmse(doa2, DOA);
    RMSE3(iS) = rmse(doa3, DOA);
    RMSE4(iS) = rmse(doa4, DOA);
    RMSE5(iS) = rmse(doa5, DOA);
    
    [x, A, R_idl, Rs] = StatSigGenerate(M, N, DOA, snr*ones(1,K));
    CRB(iS) = crbdet_w(A,R_idl,Rs,DOA,N,1)*(180/pi)^2;
    
end

mz = 8;
lw = 2;

figure
semilogy(SNR, RMSE1.^0.5, '-p', 'markersize', mz, 'linewidth', 2); hold on;
semilogy(SNR, RMSE2.^0.5, '-o', 'markersize', mz, 'linewidth', 2); 
semilogy(SNR, RMSE3.^0.5, '->', 'markersize', mz, 'linewidth', 2);
semilogy(SNR, RMSE4.^0.5, '-*', 'markersize', mz, 'linewidth', 2)
semilogy(SNR, RMSE5.^0.5, '-*', 'markersize', mz, 'linewidth', 2)
semilogy(SNR, CRB.^0.5, 'k', 'linewidth', 2)
xlabel('SNR (dB)'); ylabel('RMSE (degree)');
legend('PUMA', 'EPUMA', 'root-MUSIC', 'MODEX', 'MODE', 'CRB');

M = 10;
N = 50;
DOA = [-5, 2, 12];
K = length(DOA);
SNR = linspace(-10,6,11);
nT = 100;

for iS = 1:length(SNR)
    
    snr = SNR(iS);

    for iT = 1:nT
        
        if rem(iT,nT/2) == 0
            fprintf( 'n = %d, Trials = %d, total = %d\n',...
                iS, iT, (iS-1)*nT+iT );
        end
        
        x = StatSigGenerate(M, N, DOA, snr*ones(1,K));
        
        doa1(:,iT) = EPUMA(x, K, K, 3);
        doa2(:,iT) = EPUMA(x, K, K+1, 3);
        doa3(:,iT) = rMUSIC(x, K, 'FBSS', 2);
        [doa4(:,iT),doa5(:,iT)] = MODEX(x, K);
        
    end
    
    RMSE1(iS) = rmse(doa1, DOA);
    RMSE2(iS) = rmse(doa2, DOA);
    RMSE3(iS) = rmse(doa3, DOA);
    RMSE4(iS) = rmse(doa4, DOA);
    RMSE5(iS) = rmse(doa5, DOA);
    
    [x, A, R_idl, Rs] = StatSigGenerate(M, N, DOA, snr*ones(1,K));
    CRB(iS) = crbdet_w(A,R_idl,Rs,DOA,N,1)*(180/pi)^2;
    
end

mz = 8;
lw = 2;

figure
semilogy(SNR, RMSE1.^0.5, '-p', 'markersize', mz, 'linewidth', 2); hold on;
semilogy(SNR, RMSE2.^0.5, '-o', 'markersize', mz, 'linewidth', 2); 
semilogy(SNR, RMSE3.^0.5, '->', 'markersize', mz, 'linewidth', 2);
semilogy(SNR, RMSE4.^0.5, '-*', 'markersize', mz, 'linewidth', 2)
semilogy(SNR, RMSE5.^0.5, '-*', 'markersize', mz, 'linewidth', 2)
semilogy(SNR, CRB.^0.5, 'k', 'linewidth', 2)
xlabel('SNR (dB)'); ylabel('RMSE (degree)');
legend('PUMA', 'EPUMA', 'root-MUSIC', 'MODEX', 'MODE', 'CRB');
 

3 Matlab代码实现

4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]C. Qian, L. Huang, M. Cao, H. C. So and J. Xie, "PUMA: An improved realization of MODE for DOA estimation," IEEE Transactions on Aerospace and Electronic Systems, vol. 53, no. 5, pp. 2128-2139, 2017.
[2]The code compares two algorithms, i.e., MODE and PUMA, for DOA estimation. It shows that PUMA and MODE are two different solvers for the same optimization problem, but PUMA works much better than MODE. MODE even does not work for a single-source DOA. 

你可能感兴趣的:(#,状态估计,#,数学建模比赛,PUMA,DOA估计模式,改进实现,Matlab)