基于低维数字迫零预编码的二阶混合预编码

实现在瑞利信道下、基于低维数字迫零(Zero-Forcing, ZF)预编码的二阶混合预编码系统

混合预编码是毫米波大规模MIMO系统中的关键技术,旨在通过减少所需的射频(RF)链数量来平衡系统性能和硬件成本/复杂度。

1. 系统模型与核心思想

我们考虑一个下行链路大规模MIMO系统:

  • 基站(BS):配备 \(N_t\) 根天线,但只有 \(N_{RF}\) 条 RF 链 (\(N_{RF} \leq N_t\)),服务 \(N_s\) 个数据流 (\(N_s \leq N_{RF}\))。
  • 用户:假设有 \(K\) 个用户,每个用户配备单天线或多天线。为简化,我们常假设 \(K = N_s\),即每个用户接收一个数据流。

系统模型可以表示为:

\[\mathbf{y} = \mathbf{H}^H \mathbf{F}_{RF} \mathbf{F}_{BB} \mathbf{s} + \mathbf{n} \]

其中:

  • \(\mathbf{y}\)\(K \times 1\) 的接收信号向量。
  • \(\mathbf{H}\)\(N_t \times K\)瑞利信道矩阵。在瑞利信道下,矩阵元素服从独立同分布(i.i.d)的复高斯分布 \(\mathcal{CN}(0, 1)\)。这与毫米波信道常用的稀疏几何模型不同。
  • \(\mathbf{F}_{RF}\)\(N_t \times N_{RF}\)模拟预编码矩阵。其元素是恒模约束(Constant Modulus Constraint),即 \(|[\mathbf{F}_{RF}]_{i,j}| = 1/\sqrt{N_t}\)。这模拟了由模拟相位移相器实现的RF预编码。
  • \(\mathbf{F}_{BB}\)\(N_{RF} \times N_s\)基带数字预编码矩阵。用于处理多流间的干扰。
  • \(\mathbf{s}\)\(N_s \times 1\) 的发送符号向量,满足 \(\mathbb{E}[\mathbf{s}\mathbf{s}^H] = \frac{P}{N_s}\mathbf{I}\)\(P\) 是总发送功率。
  • \(\mathbf{n}\)\(K \times 1\) 的加性高斯白噪声向量,\(\mathbf{n} \sim \mathcal{CN}(0, \sigma_n^2\mathbf{I})\)

核心思想

  1. 混合结构:预编码由 \(\mathbf{F}_{RF} \mathbf{F}_{BB}\) 两级完成。模拟部分 \(\mathbf{F}_{RF}\) 在高维天线域进行初步的信号导向,数字部分 \(\mathbf{F}_{BB}\) 在低维流域进行精确的干扰消除(如ZF)。
  2. 基于ZF的混合设计:目标是让混合预编码器 \(\mathbf{F}_{RF} \mathbf{F}_{BB}\) 尽可能逼近全数字迫零预编码器 (Full-Digital ZF Precoder) \(\mathbf{F}_{opt} = \mathbf{H}(\mathbf{H}^H\mathbf{H})^{-1}\)
  3. 优化问题:寻找 \(\mathbf{F}_{RF}\)\(\mathbf{F}_{BB}\) 以最小化二者之间的差距:

    \[\min_{\mathbf{F}_{RF}, \mathbf{F}_{BB}} \|\mathbf{F}_{opt} - \mathbf{F}_{RF}\mathbf{F}_{BB}\|_F \]

    \[\text{subject to } \mathbf{F}_{RF} \in \mathcal{F}, \|\mathbf{F}_{RF}\mathbf{F}_{BB}\|_F^2 = N_s \]

    其中 \(\mathcal{F}\) 是满足恒模约束的模拟预编码矩阵的集合。功率约束 \(\|\mathbf{F}_{RF}\mathbf{F}_{BB}\|_F^2 = N_s\) 确保了总功率的归一化。

2. 算法实现:基于正交匹配追踪(OMP)的混合预编码

一种广泛使用的算法是正交匹配追踪(Orthogonal Matching Pursuit, OMP)。其思路是将模拟预编码器 \(\mathbf{F}_{RF}\) 的每一列视为一个“原子”,从一个包含所有可能模拟波束forming向量的字典 \(\mathbf{A}\) 中挑选,以最好地匹配全数字预编码器 \(\mathbf{F}_{opt}\) 的列空间。

步骤如下:

  1. 初始化

    • 计算全数字ZF预编码器:\(\mathbf{F}_{opt} = \mathbf{H}(\mathbf{H}^H\mathbf{H})^{-1}\)
    • \(\mathbf{F}_{opt}\) 进行功率归一化:\(\mathbf{F}_{opt} = \sqrt{N_s} \frac{\mathbf{F}_{opt}}{\|\mathbf{F}_{opt}\|_F}\)
    • 初始化残差矩阵 \(\mathbf{R} = \mathbf{F}_{opt}\)
    • 初始化模拟预编码矩阵 \(\mathbf{F}_{RF}\) 为空矩阵。
    • 创建一个字典矩阵 \(\mathbf{A}\):其每一列代表一个可能的模拟波束forming向量。对于 \(N_t\) 根天线的均匀线性阵列(ULA),一个常用的字典是离散傅里叶变换(DFT)矩阵,其列是不同方向的阵列响应向量。字典大小 \(G\) 决定了精度和复杂度(例如 \(G = 2N_t, 4N_t\))。
  2. 迭代选择(\(i = 1\) to \(N_{RF}\)
    a. 匹配追踪:找到字典 \(\mathbf{A}\) 中与当前残差矩阵 \(\mathbf{R}\) 相关性最强的原子(列)。
    $$\phi_i = \arg\max_{j=1,...,G} |\mathbf{A}j^H \mathbf{R}|F^2$$
    b. 原子添加:将选中的原子 \(\mathbf{A}_{\phi_i}\) 添加到模拟预编码矩阵中:
    $$\mathbf{F}
    = [\mathbf{F}
    | \mathbf{A}{\phi_i}]$$
    c. 迫零更新:基于当前已选的原子集合(\(\mathbf{F}_{RF}\)),计算最小二乘意义下的最优数字预编码器,以逼近 \(\mathbf{F}_{opt}\)
    $$\mathbf{F}
    = (\mathbf{F}{RF}H\mathbf{F}_{RF})\mathbf{F}^H\mathbf{F}{opt}$$
    d. 残差更新:计算新的残差,即 \(\mathbf{F}_{opt}\) 与当前混合预编码器 \(\mathbf{F}_{RF}\mathbf{F}_{BB}\) 的差值。
    $$\mathbf{R} = \mathbf{F}
    - \mathbf{F}{RF}\mathbf{F}$$

  3. 功率归一化:在算法循环结束后,对最终的混合预编码器进行功率约束:

    \[\mathbf{F}_{BB} = \sqrt{N_s} \frac{\mathbf{F}_{BB}}{\|\mathbf{F}_{RF}\mathbf{F}_{BB}\|_F} \]

3. MATLAB 代码实现

% 清除工作空间
clc;
clear;
close all;

%% 参数设置
Nt = 64;         % 基站发射天线数
K = 4;           % 用户数 (单天线用户)
Ns = K;          % 数据流数
NRF = 5;         % RF链数 (NRF >= Ns)

SNR_dB = 20;     % 信噪比 (dB)
G = 4*Nt;        % 字典大小 (DFT码本大小)

% 生成DFT码本作为字典A
A = (1/sqrt(Nt)) * exp(-1j * pi * (0:Nt-1)' * (0:G-1)/G * 2); % DFT码本

%% 生成瑞利衰落信道
H = (randn(K, Nt) + 1i*randn(K, Nt)) / sqrt(2); % H ~ CN(0,1), 维度 K x Nt

%% 计算全数字ZF预编码器
F_opt = H' * (H * H')^(-1);          % 全数字ZF预编码
F_opt = sqrt(Ns) * F_opt / norm(F_opt, 'fro'); % 功率归一化

%% 基于OMP的混合预编码算法
F_RF = complex(zeros(Nt, 0));       % 初始化空模拟预编码矩阵
R = F_opt;                         % 初始化残差为F_opt

% 迭代选择NRF个模拟波束
for ii = 1:NRF
    % 计算字典原子与残差的相关系数
    Psi = A' * R;
    % 找到相关性最强的原子的索引
    [~, phi_i] = max(sum(abs(Psi).^2, 2));
    
    % 将选中的原子添加到F_RF中
    F_RF = [F_RF, A(:, phi_i)];
    
    % 计算当前F_RF下的数字预编码 (最小二乘解)
    F_BB = (F_RF' * F_RF) \ (F_RF' * F_opt);
    
    % 更新残差
    R = (F_opt - F_RF * F_BB) / norm(F_opt, 'fro'); % 可选归一化
end

% 最终的数字预编码
F_BB = (F_RF' * F_RF) \ (F_RF' * F_opt);
% 总功率归一化: || F_RF * F_BB ||_F^2 = Ns
F_BB = sqrt(Ns) * F_BB / norm(F_RF * F_BB, 'fro');

% 混合预编码器
F_hybrid = F_RF * F_BB;

%% 性能评估:计算频谱效率 (Spectral Efficiency)
% 计算等效信道
Heff = H * F_hybrid;

% 计算噪声功率 (假设总功率P=1, 则SNR = 1/sigma_n^2)
sigma_n_sq = 10^(-SNR_dB/10); 

% 计算接收信干噪比 (SINR), 这里ZF预编码目标是无干扰
% 对于ZF,SINR_k = 1 / (sigma_n^2 * [ (Heff^H Heff)^{-1} ]_{k,k} )
W = (Heff' * Heff) \ Heff'; % ZF接收机/均衡器
SINR = zeros(K, 1);
for k = 1:K
    SINR(k) = 1 / (sigma_n_sq * abs(W(k,:) * Heff(:,k))^2 );
end

% 计算总频谱效率 (bps/Hz)
SE = sum(log2(1 + SINR));

fprintf('混合预编码频谱效率: %.4f bps/Hz\n', SE);

%% 与全数字ZF预编码对比
% 全数字ZF的等效信道
Heff_opt = H * F_opt;
W_opt = (Heff_opt' * Heff_opt) \ Heff_opt';
SINR_opt = zeros(K, 1);
for k = 1:K
    SINR_opt(k) = 1 / (sigma_n_sq * abs(W_opt(k,:) * Heff_opt(:,k))^2 );
end
SE_opt = sum(log2(1 + SINR_opt));
fprintf('全数字ZF预编码频谱效率: %.4f bps/Hz\n', SE_opt);
fprintf('性能损失: %.4f bps/Hz (%.2f%%)\n', SE_opt-SE, (SE_opt-SE)/SE_opt*100);

%% 可视化 (可选)
figure;
subplot(1,2,1);
plot(abs(F_opt(:,1)), 'linewidth', 1.5); hold on;
plot(abs(F_hybrid(:,1)), '--', 'linewidth', 1.5);
title('第一列预编码系数幅度');
legend('全数字ZF', '混合预编码');
grid on;

subplot(1,2,2);
plot(rad2deg(angle(F_opt(:,1))), 'linewidth', 1.5); hold on;
plot(rad2deg(angle(F_hybrid(:,1))), '--', 'linewidth', 1.5);
title('第一列预编码系数相位 (度)');
legend('全数字ZF', '混合预编码');
grid on;

4. 说明与关键点

  1. 瑞利信道 (Rayleigh Channel)H = (randn(K, Nt) + 1i*randn(K, Nt)) / sqrt(2); 生成了一个i.i.d.的瑞利衰落信道矩阵。这与毫米波稀疏信道有本质区别。
  2. 全数字ZF基准F_opt = H' * (H * H')^(-1); 是性能比较的基准。混合预编码的目标是逼近它。
  3. 字典 \(\mathbf{A}\):代码中使用的是DFT码本,其列向量代表了均匀线性阵列(ULA)在特定空间方向上的响应。这是OMP算法的核心。
  4. OMP循环
    • Psi = A' * R; 计算相关性。
    • [~, phi_i] = max(sum(abs(Psi).^2, 2)); 找到最相关的原子索引。
    • F_BB = (F_RF' * F_RF) \ (F_RF' * F_opt); 是数字部分的最小二乘解。
  5. 性能评估:通过计算频谱效率(Spectral Efficiency) 来评估系统性能,并与全数字ZF预编码进行对比,直观显示混合预编码带来的性能损失(这是为了减少RF链而付出的代价)。

参考代码 实现二阶混合预编码 www.youwenfan.com/contentcnk/46271.html

5. 总结

这个实现展示了在瑞利信道下,如何利用OMP算法来设计混合预编码器,其数字核心部分基于迫零(ZF) 准则。通过这种方法,我们仅使用 \(N_{RF}\) 条RF链(\(N_s \leq N_{RF} \ll N_t\))就实现了与全数字ZF预编码相近的性能,极大地降低了硬件成本和功耗。代码中的性能损失主要来源于模拟预编码器 \(\mathbf{F}_{RF}\) 的恒模约束,导致其无法完美匹配全数字预编码器的任意结构。

posted @ 2025-11-06 15:49  别说我的眼泪有点咸  阅读(3)  评论(0)    收藏  举报