基于低维数字迫零预编码的二阶混合预编码
实现在瑞利信道下、基于低维数字迫零(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}\) 是 \(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})\)。
核心思想:
- 混合结构:预编码由 \(\mathbf{F}_{RF} \mathbf{F}_{BB}\) 两级完成。模拟部分 \(\mathbf{F}_{RF}\) 在高维天线域进行初步的信号导向,数字部分 \(\mathbf{F}_{BB}\) 在低维流域进行精确的干扰消除(如ZF)。
- 基于ZF的混合设计:目标是让混合预编码器 \(\mathbf{F}_{RF} \mathbf{F}_{BB}\) 尽可能逼近全数字迫零预编码器 (Full-Digital ZF Precoder) \(\mathbf{F}_{opt} = \mathbf{H}(\mathbf{H}^H\mathbf{H})^{-1}\)。
- 优化问题:寻找 \(\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}\) 的列空间。
步骤如下:
-
初始化:
- 计算全数字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\))。
-
迭代选择(\(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}$$ -
功率归一化:在算法循环结束后,对最终的混合预编码器进行功率约束:
\[\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. 说明与关键点
- 瑞利信道 (Rayleigh Channel):
H = (randn(K, Nt) + 1i*randn(K, Nt)) / sqrt(2);生成了一个i.i.d.的瑞利衰落信道矩阵。这与毫米波稀疏信道有本质区别。 - 全数字ZF基准:
F_opt = H' * (H * H')^(-1);是性能比较的基准。混合预编码的目标是逼近它。 - 字典 \(\mathbf{A}\):代码中使用的是DFT码本,其列向量代表了均匀线性阵列(ULA)在特定空间方向上的响应。这是OMP算法的核心。
- OMP循环:
Psi = A' * R;计算相关性。[~, phi_i] = max(sum(abs(Psi).^2, 2));找到最相关的原子索引。F_BB = (F_RF' * F_RF) \ (F_RF' * F_opt);是数字部分的最小二乘解。
- 性能评估:通过计算频谱效率(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}\) 的恒模约束,导致其无法完美匹配全数字预编码器的任意结构。
浙公网安备 33010602011771号