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 运行结果
部分代码:
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.
相关文章
- Matlab 的reshape函数
- Matlab:序列分析法MATLAB代码
- 基于RRT算法的最优动力学路径规划(Matlab代码实现)
- 基于稳定隶属度的自调优多峰聚类算法(SMMP)(SMMP)(Matlab代码实现)
- 几何旋转和天线标定模式对GNSS相位绕组的综合影响(Matlab代码实现)
- 【非线性线性调频模式分解】具有交叉信号模式的色散信号的群延迟(色散曲线)估计和模式分离(Matlab代码实现)
- 基于MATLAB的车牌识别系统研究(Matlab代码实现)
- 【深度学习】基于形态学的权重自适应图像去噪(Matlab代码实现)
- 【MATLAB】信号与系统 — 信号的相加
- 【MATLAB】滑标的使用与多级菜单
- 基于WOA鲸鱼优化的5G通信系统资源分配优化matlab仿真
- m基于PSO粒子群优化的第四方物流的作业整合算法matlab仿真,对比有代理人和无代理人两种模式下最低运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用
- 【MATLAB】matlab 文档使用 ( 文档查询 | 文档层次 | 自带搜索工具 | 帮助命令 | 学习导引 )
- FPGA与MATLAB-图像处理-学习列表(图像处理专题更新目录,补充中)
- 【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)
- m固定相机模式下基于图像跟踪算法的Puma560机械臂自适应轨迹控制matlab仿真
- Matlab Tips: 结构体递归式打印--Dump matlab struct content recursively
- MATLAB中的resample函数根本理解,我专栏中有Guitar.MAT资源
- Matlab使用笔记(四):将编写完matlab函数放入simulink模型
- Matlab使用笔记(三):matlab设置代码自动补全功能
- Matlab使用笔记(七):将PreScan连接MATLAB实现仿真 (附录:自动无人驾驶仿真软件PreScan的应用介绍)