Files
Graduation-Design/Graduation Design Matlab/algo_hybrid_robust_omp.m
T

74 lines
1.8 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
function [w_hybrid, F_RF] = algo_hybrid_robust_omp(w_opt, A_dic, N_RF, a_target, R)
% 输入:
% w_opt:理想数字波束(MVDR结果)
% A_dic:字典
% N_RFRF链数
[N, ~] = size(A_dic);
residual = w_opt; % 初始残差
selected_index = []; % 已选原子
lambda = 0.01; % 正则化参数(关键)
max_iter = N_RF;
for iter = 1:max_iter
% =========================
% Step1:相关性计算
% =========================
corr = abs(A_dic' * residual);
% 找Top-2(而不是Top-1
[~, idx_sorted] = sort(corr, 'descend');
new_idx = idx_sorted(1:2);
% 合并索引(避免重复)
selected_index = unique([selected_index new_idx']);
% =========================
% Step2:构造子字典
% =========================
A_selected = A_dic(:, selected_index);
% =========================
% Step3:正则化最小二乘(核心改进)
% =========================
x = (A_selected' * A_selected + lambda * eye(length(selected_index))) \ ...
(A_selected' * w_opt);
% =========================
% Step4:更新残差
% =========================
residual = w_opt - A_selected * x;
% =========================
% Step5:提前停止(关键!)
% =========================
if norm(residual) < 1e-3
break;
end
end
% =========================
% 构造RF矩阵
% =========================
F_RF = A_dic(:, selected_index);
% 模拟约束(只保留相位)
F_RF = exp(1j * angle(F_RF));
% =========================
% 数字基带优化
% =========================
F_BB = pinv(F_RF) * w_opt;
% 最终波束
w_hybrid = F_RF * F_BB;
% 归一化
w_hybrid = w_hybrid / norm(w_hybrid);
end