diff --git a/Graduation Design Matlab/algo_digital_mvdr.m b/Graduation Design Matlab/algo_digital_mvdr.m new file mode 100644 index 0000000..300d6c7 --- /dev/null +++ b/Graduation Design Matlab/algo_digital_mvdr.m @@ -0,0 +1,19 @@ +function [w_mvdr] = algo_digital_mvdr(a_target, R_in) +% algo_digital_mvdr: 基于最小方差无失真响应的纯数字波束成形 +% 输入: +% a_target: 目标方向的导向矢量 +% R_in: 干扰加噪声协方差矩阵 +% 输出: +% w_mvdr: 最优数字波束权重 + + % 求协方差矩阵的逆 + R_inv = inv(R_in); + + % MVDR 核心公式 + numerator = R_inv * a_target; + denominator = a_target' * R_inv * a_target; + w_mvdr = numerator / denominator; + + % 功率归一化 + w_mvdr = w_mvdr / norm(w_mvdr); +end \ No newline at end of file diff --git a/Graduation Design Matlab/algo_hybrid_dft.m b/Graduation Design Matlab/algo_hybrid_dft.m new file mode 100644 index 0000000..d6d0f96 --- /dev/null +++ b/Graduation Design Matlab/algo_hybrid_dft.m @@ -0,0 +1,18 @@ +function [w_hybrid, F_RF] = algo_hybrid_dft(w_opt, A_dic, N_RF, a_target, R_in) +% algo_hybrid_dft: 基于最大相关性(DFT)选择 + 数字基带 MVDR 的基线算法 + + % 1. 找出与理想波束相关性最大的 N_RF 个原子 + projection = A_dic' * w_opt; + [~, sort_idx] = sort(abs(projection), 'descend'); + F_RF = A_dic(:, sort_idx(1:N_RF)); + + % 2. 同样使用数字基带 MVDR 压制干扰 + a_eff = F_RF' * a_target; + R_eff = F_RF' * R_in * F_RF; + F_BB_mvdr = (inv(R_eff) * a_eff) / (a_eff' * inv(R_eff) * a_eff); + + % 3. 合并 + w_hybrid = F_RF * F_BB_mvdr; + w_hybrid = w_hybrid / norm(w_hybrid); +end + diff --git a/Graduation Design Matlab/algo_hybrid_omp.m b/Graduation Design Matlab/algo_hybrid_omp.m new file mode 100644 index 0000000..6ac4021 --- /dev/null +++ b/Graduation Design Matlab/algo_hybrid_omp.m @@ -0,0 +1,29 @@ +function [w_hybrid, F_RF] = algo_hybrid_omp(w_opt, A_dic, N_RF, a_target, R_in) +% algo_hybrid_omp: 基于 OMP 模拟选择 + 数字基带 MVDR 抗干扰的混合波束成形 +% 核心改进:引入等效信道与基带抗干扰机制 + + % --- 阶段 1:OMP 寻找最优模拟预编码矩阵 F_RF --- + residual = w_opt; + F_RF = []; + for k = 1:N_RF + projection = A_dic' * residual; + [~, max_idx] = max(abs(projection)); + F_RF = [F_RF, A_dic(:, max_idx)]; + % 临时最小二乘用于更新 OMP 残差 + F_BB_temp = pinv(F_RF) * w_opt; + residual = w_opt - F_RF * F_BB_temp; + end + + % --- 阶段 2:大招!数字基带 MVDR 深度抗干扰 --- + % 计算通过模拟网络后的 "等效导向矢量" (4x1) + a_eff = F_RF' * a_target; + % 计算通过模拟网络后的 "等效干扰加噪声协方差矩阵" (4x4) + R_eff = F_RF' * R_in * F_RF; + + % 在 4 维数字域计算最优基带权重,强行压制漏入的干扰 + F_BB_mvdr = (inv(R_eff) * a_eff) / (a_eff' * inv(R_eff) * a_eff); + + % 最终混合权重 + w_hybrid = F_RF * F_BB_mvdr; + w_hybrid = w_hybrid / norm(w_hybrid); % 归一化 +end \ No newline at end of file diff --git a/Graduation Design Matlab/algo_hybrid_robust_omp.m b/Graduation Design Matlab/algo_hybrid_robust_omp.m new file mode 100644 index 0000000..0160f04 --- /dev/null +++ b/Graduation Design Matlab/algo_hybrid_robust_omp.m @@ -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 \ No newline at end of file diff --git a/Graduation Design Matlab/gen_a.m b/Graduation Design Matlab/gen_a.m new file mode 100644 index 0000000..64d6953 --- /dev/null +++ b/Graduation Design Matlab/gen_a.m @@ -0,0 +1,5 @@ +function [a] = gen_a(theta, par) + +a = exp(-1j*2*pi*par.delta_d*sind(theta)/par.labmda); + +end \ No newline at end of file