上传文件至「Graduation Design Matlab」
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
function [w_hybrid, F_RF] = algo_hybrid_robust_omp(w_opt, A_dic, N_RF, a_target, R)
|
||||
|
||||
% 输入:
|
||||
% w_opt:理想数字波束(MVDR结果)
|
||||
% A_dic:字典
|
||||
% N_RF:RF链数
|
||||
|
||||
[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
|
||||
Reference in New Issue
Block a user