mimo_blog

MIMO 多输入多输出多天线技术详解:从基本原理到数学推导与 Python 仿真

1. 什么是 MIMO?

MIMO,全称为 Multiple-Input Multiple-Output,即多输入多输出技术,是现代无线通信系统中的核心技术之一。它通过在发送端和接收端同时配置多根天线,使无线信道从传统的"单通道传输"扩展为"多空间通道并行传输",从而显著提升系统容量、频谱效率和通信可靠性。

在 4G LTE、5G NR、Wi-Fi 6、Wi-Fi 7、卫星通信、雷达通信一体化等系统中,MIMO 都是非常关键的底层技术。


2. 从 SISO 到 MIMO

传统无线通信中,最简单的是 SISO 系统,即单输入单输出系统。
发送端单天线
无线信道
接收端单天线

SISO 系统只有一根发送天线和一根接收天线,信号只能通过一个无线信道传输。其数学模型可以表示为:

y=hx+n y = hx + n y=hx+n

其中:

  • xxx 表示发送信号;
  • yyy 表示接收信号;
  • hhh 表示无线信道增益;
  • nnn 表示噪声。

而 MIMO 系统在发送端和接收端均配置多根天线。
接收端
发送端
发送天线 1
发送天线 2
发送天线 Nt
接收天线 1
接收天线 2
接收天线 Nr

假设发送端有 NtN_tNt 根天线,接收端有 NrN_rNr 根天线,则 MIMO 系统可以形成一个 Nr×NtN_r \times N_tNr×Nt 的信道矩阵。


3. MIMO 系统基本模型

MIMO 系统的基带等效模型为:

y=Hx+n \mathbf{y} = \mathbf{H}\mathbf{x} + \mathbf{n} y=Hx+n

其中:

x=[x1x2⋮xNt] \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_{N_t} \end{bmatrix} x= x1x2⋮xNt

表示发送信号向量;

y=[y1y2⋮yNr] \mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_{N_r} \end{bmatrix} y= y1y2⋮yNr

表示接收信号向量;

n=[n1n2⋮nNr] \mathbf{n} = \begin{bmatrix} n_1 \\ n_2 \\ \vdots \\ n_{N_r} \end{bmatrix} n= n1n2⋮nNr

表示接收端噪声向量;

H=[h11h12⋯h1Nth21h22⋯h2Nt⋮⋮⋱⋮hNr1hNr2⋯hNrNt] \mathbf{H} = \begin{bmatrix} h_{11} & h_{12} & \cdots & h_{1N_t} \\ h_{21} & h_{22} & \cdots & h_{2N_t} \\ \vdots & \vdots & \ddots & \vdots \\ h_{N_r1} & h_{N_r2} & \cdots & h_{N_rN_t} \end{bmatrix} H= h11h21⋮hNr1h12h22⋮hNr2⋯⋯⋱⋯h1Nth2Nt⋮hNrNt

表示 MIMO 信道矩阵,其中 hijh_{ij}hij 表示第 jjj 根发送天线到第 iii 根接收天线之间的信道增益。

展开后有:

{y1=h11x1+h12x2+⋯+h1NtxNt+n1y2=h21x1+h22x2+⋯+h2NtxNt+n2⋮yNr=hNr1x1+hNr2x2+⋯+hNrNtxNt+nNr \begin{cases} y_1 = h_{11}x_1 + h_{12}x_2 + \cdots + h_{1N_t}x_{N_t} + n_1 \\ y_2 = h_{21}x_1 + h_{22}x_2 + \cdots + h_{2N_t}x_{N_t} + n_2 \\ \vdots \\ y_{N_r} = h_{N_r1}x_1 + h_{N_r2}x_2 + \cdots + h_{N_rN_t}x_{N_t} + n_{N_r} \end{cases} ⎩ ⎨ ⎧y1=h11x1+h12x2+⋯+h1NtxNt+n1y2=h21x1+h22x2+⋯+h2NtxNt+n2⋮yNr=hNr1x1+hNr2x2+⋯+hNrNtxNt+nNr

这说明每一根接收天线接收到的信号,都是所有发送天线信号经过不同空间路径叠加后的结果。


4. MIMO 的核心优势

MIMO 技术主要带来三个方面的增益。

4.1 空间复用增益

空间复用是 MIMO 最重要的优势之一。它允许多个数据流在同一时间、同一频率资源上传输。

例如,在 2×22 \times 22×2 MIMO 系统中,可以同时发送两个数据符号:

x=[x1x2] \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} x=[x1x2]

接收端接收到:

$$

\mathbf{y} =
\begin{bmatrix}
y_1 \
y_2
\end{bmatrix}

\begin{bmatrix}

h_{11} & h_{12} \

h_{21} & h_{22}

\end{bmatrix}

\begin{bmatrix}

x_1 \

x_2

\end{bmatrix}

\begin{bmatrix}

n_1 \

n_2

\end{bmatrix}

如果信道矩阵 H\\mathbf{H}H 满秩,接收端就可以从 y\\mathbf{y}y 中恢复出 x1x_1x1 和 x2x_2x2。这相当于在同样的频谱资源下传输了多个并行数据流。 #### 4.2 分集增益 无线信道中存在多径衰落。如果只有一条传输路径,信号可能因为深衰落而严重失真。MIMO 系统可以通过多根天线形成多条独立传输路径,从而降低所有路径同时衰落的概率。 分集阶数理论上可以达到: Gd=NtNr G_d = N_t N_r Gd=NtNr 其中 GdG_dGd 表示最大分集阶数。 #### 4.3 阵列增益 多天线还可以通过波束赋形将能量集中到目标方向,从而提高接收信噪比。 多天线阵列 波束赋形 能量集中到目标用户 提高接收信噪比 *** ** * ** *** ### 5. MIMO 信道容量推导 #### 5.1 SISO 信道容量 根据信息论,SISO 高斯信道容量为: C=log⁡2(1+SNR) C = \\log_2(1 + \\text{SNR}) C=log2(1+SNR) 单位为 bit/s/Hz。 如果信道增益为 hhh,发送功率为 PPP,噪声功率为 σn2\\sigma_n\^2σn2,则: SNR=P∣h∣2σn2 \\text{SNR} = \\frac{P\|h\|\^2}{\\sigma_n\^2} SNR=σn2P∣h∣2 所以: C=log⁡2(1+P∣h∣2σn2) C = \\log_2\\left(1 + \\frac{P\|h\|\^2}{\\sigma_n\^2}\\right) C=log2(1+σn2P∣h∣2) *** ** * ** *** #### 5.2 MIMO 信道容量 MIMO 系统模型为: y=Hx+n \\mathbf{y} = \\mathbf{H}\\mathbf{x} + \\mathbf{n} y=Hx+n 假设噪声服从复高斯分布: n∼CN(0,σn2INr) \\mathbf{n} \\sim \\mathcal{CN}(0, \\sigma_n\^2 \\mathbf{I}_{N_r}) n∼CN(0,σn2INr) 发送信号协方差矩阵为: Q=E\[xxH\] \\mathbf{Q} = \\mathbb{E}\[\\mathbf{x}\\mathbf{x}\^H\] Q=E\[xxH\] 总发送功率约束为: tr(Q)≤P \\text{tr}(\\mathbf{Q}) \\leq P tr(Q)≤P 则 MIMO 信道容量为: C=max⁡Q:tr(Q)≤Plog⁡2det⁡(INr+1σn2HQHH) C = \\max_{\\mathbf{Q}: \\text{tr}(\\mathbf{Q}) \\leq P} \\log_2 \\det \\left( \\mathbf{I}_{N_r} + \\frac{1}{\\sigma_n\^2}\\mathbf{H}\\mathbf{Q}\\mathbf{H}\^H \\right) C=Q:tr(Q)≤Pmaxlog2det(INr+σn21HQHH) 其中: * det⁡(⋅)\\det(\\cdot)det(⋅) 表示矩阵行列式; * (⋅)H(\\cdot)\^H(⋅)H 表示共轭转置; * Q\\mathbf{Q}Q 表示发送信号功率分配矩阵。 *** ** * ** *** ### 6. 无信道状态信息下的容量 如果发送端不知道信道状态信息,通常采用平均功率分配: Q=PNtINt \\mathbf{Q} = \\frac{P}{N_t}\\mathbf{I}_{N_t} Q=NtPINt 代入容量公式: C=log⁡2det⁡(INr+PNtσn2HHH) C = \\log_2 \\det \\left( \\mathbf{I}_{N_r} + \\frac{P}{N_t\\sigma_n\^2} \\mathbf{H}\\mathbf{H}\^H \\right) C=log2det(INr+Ntσn2PHHH) 令: ρ=Pσn2 \\rho = \\frac{P}{\\sigma_n\^2} ρ=σn2P 则: C=log⁡2det⁡(INr+ρNtHHH) C = \\log_2 \\det \\left( \\mathbf{I}_{N_r} + \\frac{\\rho}{N_t} \\mathbf{H}\\mathbf{H}\^H \\right) C=log2det(INr+NtρHHH) 这就是常见的 MIMO 容量表达式。 *** ** * ** *** ### 7. 通过 SVD 理解 MIMO 的并行子信道 为了进一步理解 MIMO,可以对信道矩阵 H\\mathbf{H}H 做奇异值分解: H=UΣVH \\mathbf{H} = \\mathbf{U}\\mathbf{\\Sigma}\\mathbf{V}\^H H=UΣVH 其中: * U\\mathbf{U}U 是接收端酉矩阵; * V\\mathbf{V}V 是发送端酉矩阵; * Σ\\mathbf{\\Sigma}Σ 是奇异值矩阵。 假设发送端使用预编码: x=Vs \\mathbf{x} = \\mathbf{V}\\mathbf{s} x=Vs 接收信号为: y=Hx+n=UΣVHVs+n \\mathbf{y} = \\mathbf{H}\\mathbf{x} + \\mathbf{n} = \\mathbf{U}\\mathbf{\\Sigma}\\mathbf{V}\^H \\mathbf{V}\\mathbf{s} + \\mathbf{n} y=Hx+n=UΣVHVs+n 因为: VHV=I \\mathbf{V}\^H\\mathbf{V} = \\mathbf{I} VHV=I 所以: y=UΣs+n \\mathbf{y} = \\mathbf{U}\\mathbf{\\Sigma}\\mathbf{s} + \\mathbf{n} y=UΣs+n 接收端左乘 UH\\mathbf{U}\^HUH: y\~=UHy=UHUΣs+UHn \\tilde{\\mathbf{y}} = \\mathbf{U}\^H\\mathbf{y} = \\mathbf{U}\^H\\mathbf{U}\\mathbf{\\Sigma}\\mathbf{s} + \\mathbf{U}\^H\\mathbf{n} y\~=UHy=UHUΣs+UHn 由于: UHU=I \\mathbf{U}\^H\\mathbf{U} = \\mathbf{I} UHU=I 因此: y\~=Σs+n\~ \\tilde{\\mathbf{y}} = \\mathbf{\\Sigma}\\mathbf{s} + \\tilde{\\mathbf{n}} y\~=Σs+n\~ 这说明 MIMO 信道可以被分解为多个相互独立的并行子信道。 如果奇异值为: σ1,σ2,⋯ ,σr \\sigma_1, \\sigma_2, \\cdots, \\sigma_r σ1,σ2,⋯,σr 其中: r=rank(H) r = \\text{rank}(\\mathbf{H}) r=rank(H) 则每个子信道可表示为: y\~i=σisi+n\~i \\tilde{y}_i = \\sigma_i s_i + \\tilde{n}_i y\~i=σisi+n\~i 对应容量为: C=∑i=1rlog⁡2(1+piσi2σn2) C = \\sum_{i=1}\^{r} \\log_2 \\left( 1 + \\frac{p_i\\sigma_i\^2}{\\sigma_n\^2} \\right) C=i=1∑rlog2(1+σn2piσi2) 其中 pip_ipi 是第 iii 个空间子信道上的功率。 *** ** * ** *** ### 8. 水填充功率分配 当发送端知道信道状态信息时,可以根据不同子信道质量分配不同功率。信道强的子信道分配更多功率,信道弱的子信道分配更少功率,这就是水填充算法。 优化问题为: max⁡pi∑i=1rlog⁡2(1+piσi2σn2) \\max_{p_i} \\sum_{i=1}\^{r} \\log_2 \\left( 1 + \\frac{p_i\\sigma_i\^2}{\\sigma_n\^2} \\right) pimaxi=1∑rlog2(1+σn2piσi2) 约束条件为: ∑i=1rpi=P \\sum_{i=1}\^{r} p_i = P i=1∑rpi=P pi≥0 p_i \\geq 0 pi≥0 构造拉格朗日函数: ##

\mathcal{L}

\sum_{i=1}^{r}

\log_2
\left(
1 + \frac{p_i\sigma_i2}{\sigma_n2}
\right)

\lambda

\left(

\sum_{i=1}^{r}p_i - P

\right)

对 pip_ipi 求偏导: ##

\frac{\partial \mathcal{L}}{\partial p_i}

\frac{1}{\ln 2}

\frac{\sigma_i2}{\sigma_n2 + p_i\sigma_i^2}

\lambda

= 0

整理得到: ##

\frac{\sigma_i2}{\sigma_n2 + p_i\sigma_i^2}

\lambda \ln 2

进一步可得: ##

\sigma_n^2 + p_i\sigma_i^2

\frac{\sigma_i^2}{\lambda \ln 2}

因此: ##

p_i

\frac{1}{\lambda \ln 2}

\frac{\sigma_n2}{\sigma_i2}

令: μ=1λln⁡2 \\mu = \\frac{1}{\\lambda \\ln 2} μ=λln21 则: pi=μ−σn2σi2 p_i = \\mu - \\frac{\\sigma_n\^2}{\\sigma_i\^2} pi=μ−σi2σn2 考虑非负功率约束: pi=(μ−σn2σi2)+ p_i = \\left( \\mu - \\frac{\\sigma_n\^2}{\\sigma_i\^2} \\right)\^+ pi=(μ−σi2σn2)+ 其中: (x)+=max⁡(x,0) (x)\^+ = \\max(x,0) (x)+=max(x,0) 这就是水填充功率分配公式。 *** ** * ** *** ### 9. MIMO 信号检测算法 MIMO 接收端需要从混合信号 y\\mathbf{y}y 中恢复发送信号 x\\mathbf{x}x。常见检测方法包括: MIMO 接收信号 y 线性检测 非线性检测 ZF 零迫检测 MMSE 最小均方误差检测 ML 最大似然检测 SIC 串行干扰抵消 *** ** * ** *** ### 10. ZF 零迫检测推导 MIMO 系统为: y=Hx+n \\mathbf{y} = \\mathbf{H}\\mathbf{x} + \\mathbf{n} y=Hx+n ZF 检测希望找到一个矩阵 WZF\\mathbf{W}_{ZF}WZF,使得: x\^=WZFy \\hat{\\mathbf{x}} = \\mathbf{W}_{ZF}\\mathbf{y} x\^=WZFy 并尽可能满足: WZFH=I \\mathbf{W}_{ZF}\\mathbf{H} = \\mathbf{I} WZFH=I 当 H\\mathbf{H}H 满列秩时,其伪逆为: ##

\mathbf{H}^{\dagger}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H

因此: ##

\mathbf{W}_{ZF}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H

于是: ##

\hat{\mathbf{x}}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H\mathbf{y}

代入 y\\mathbf{y}y: ##

\hat{\mathbf{x}}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H

(\mathbf{H}\mathbf{x} + \mathbf{n})

展开: ##

\hat{\mathbf{x}}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H\mathbf{H}\mathbf{x}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H\mathbf{n}

因为: ##

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H\mathbf{H}

\mathbf{I}

所以: ##

\hat{\mathbf{x}}

\mathbf{x}

(\mathbf{H}H\mathbf{H}){-1}\mathbf{H}^H\mathbf{n}

ZF 可以完全消除多天线之间的干扰,但会放大噪声,尤其当 HHH\\mathbf{H}\^H\\mathbf{H}HHH 条件数较大时,性能会明显下降。 *** ** * ** *** ### 11. MMSE 检测推导 MMSE 检测希望最小化估计误差: J(W)=E\[∥x−Wy∥2\] J(\\mathbf{W}) = \\mathbb{E} \\left\[ \\\|\\mathbf{x} - \\mathbf{W}\\mathbf{y}\\\|\^2 \\right\] J(W)=E\[∥x−Wy∥2\] 系统模型为: y=Hx+n \\mathbf{y} = \\mathbf{H}\\mathbf{x} + \\mathbf{n} y=Hx+n 假设: E\[xxH\]=σx2I \\mathbb{E}\[\\mathbf{x}\\mathbf{x}\^H\] = \\sigma_x\^2\\mathbf{I} E\[xxH\]=σx2I E\[nnH\]=σn2I \\mathbb{E}\[\\mathbf{n}\\mathbf{n}\^H\] = \\sigma_n\^2\\mathbf{I} E\[nnH\]=σn2I 线性 MMSE 解为: ##

\mathbf{W}_{MMSE}

\mathbf{R}{xy}\mathbf{R} {yy}^{-1}

其中: ##

\mathbf{R}_{xy}

\mathbb{E}[\mathbf{x}\mathbf{y}^H]

因为: yH=xHHH+nH \\mathbf{y}\^H = \\mathbf{x}\^H\\mathbf{H}\^H + \\mathbf{n}\^H yH=xHHH+nH 所以: ##

\mathbf{R}_{xy}

\mathbb{E}

\\mathbf{x} (\\mathbf{x}^H\\mathbf{H}^H + \\mathbf{n}\^H)

由于信号和噪声独立: E\[xnH\]=0 \\mathbb{E}\[\\mathbf{x}\\mathbf{n}\^H\] = 0 E\[xnH\]=0 因此: ##

\mathbf{R}_{xy}

\mathbb{E}[\mathbf{x}\mathbf{x}H]\mathbf{H}H

\sigma_x2\mathbf{H}H

再计算: ##

\mathbf{R}_{yy}

\mathbb{E}[\mathbf{y}\mathbf{y}^H]

代入 y\\mathbf{y}y: ##

\mathbf{R}_{yy}

\mathbb{E}

(\\mathbf{H}\\mathbf{x}+\\mathbf{n}) (\\mathbf{H}\\mathbf{x}+\\mathbf{n})\^H

展开: ##

\mathbf{R}_{yy}

\mathbf{H}\mathbb{E}[\mathbf{x}\mathbf{x}H]\mathbf{H}H

\mathbb{E}[\mathbf{n}\mathbf{n}^H]

所以: ##

\mathbf{R}_{yy}

\sigma_x2\mathbf{H}\mathbf{H}H

\sigma_n^2\mathbf{I}

因此: ##

\mathbf{W}_{MMSE}

\sigma_x2\mathbf{H}H

\left(

\sigma_x2\mathbf{H}\mathbf{H}H

\sigma_n^2\mathbf{I}

\right)^{-1}

两边除以 σx2\\sigma_x\^2σx2: ##

\mathbf{W}_{MMSE}

\mathbf{H}^H

\left(

\mathbf{H}\mathbf{H}^H

\frac{\sigma_n2}{\sigma_x2}\mathbf{I}

\right)^{-1}

根据矩阵恒等式,也常写为: ##

\mathbf{W}_{MMSE}

\left(

\mathbf{H}^H\mathbf{H}

\frac{\sigma_n2}{\sigma_x2}\mathbf{I}

\right)^{-1}

\mathbf{H}^H

令: σn2σx2=1SNR \\frac{\\sigma_n\^2}{\\sigma_x\^2} = \\frac{1}{\\text{SNR}} σx2σn2=SNR1 则: ##

\mathbf{W}_{MMSE}

\left(

\mathbf{H}^H\mathbf{H}

\frac{1}{\text{SNR}}\mathbf{I}

\right)^{-1}

\mathbf{H}^H

MMSE 在抑制干扰和避免噪声放大之间取得折中,因此通常比 ZF 更稳健。 *** ** * ** *** ### 12. 最大似然检测 ML 最大似然检测的思想是:在所有可能的发送符号组合中,寻找与接收信号最接近的一组。 对于星座集合 S\\mathcal{S}S,ML 检测为: ##

\hat{\mathbf{x}}_{ML}

\arg\min_{\mathbf{x} \in \mathcal{S}^{N_t}}

|\mathbf{y} - \mathbf{H}\mathbf{x}|^2

ML 检测具有最优误码性能,但复杂度很高。 如果调制阶数为 MMM,发送天线数为 NtN_tNt,则搜索空间大小为: MNt M\^{N_t} MNt 例如,若使用 16QAM,且 Nt=4N_t = 4Nt=4,则候选组合数为: 164=65536 16\^4 = 65536 164=65536 因此,在大规模 MIMO 系统中,ML 检测通常难以直接使用。 *** ** * ** *** ### 13. MIMO 系统容量随天线数量变化 理想独立瑞利信道下,MIMO 容量大致随以下数量增加: min⁡(Nt,Nr) \\min(N_t, N_r) min(Nt,Nr) 也就是说,MIMO 的空间复用阶数最大为: Ns≤min⁡(Nt,Nr) N_s \\leq \\min(N_t, N_r) Ns≤min(Nt,Nr) 例如: | 系统类型 | 最大发送数据流数 | |------------------------|---------:| | 1×11 \\times 11×1 SISO | 1 | | 2×22 \\times 22×2 MIMO | 2 | | 4×44 \\times 44×4 MIMO | 4 | | 8×88 \\times 88×8 MIMO | 8 | 但前提是信道矩阵 H\\mathbf{H}H 具有足够高的秩。如果天线相关性很强,实际可用空间自由度会下降。 *** ** * ** *** ### 14. 大规模 MIMO 大规模 MIMO 是 5G 中非常重要的技术。它通常指基站侧配置几十根甚至上百根天线,同时服务多个用户。 大规模 MIMO 基站 天线 1 天线 2 天线 3 ... 天线 M 用户 1 用户 2 用户 3 用户 K 大规模 MIMO 的典型优势包括: 1. 提高频谱效率; 2. 提高能量效率; 3. 支持多用户并行传输; 4. 通过波束赋形降低小区间干扰; 5. 改善边缘用户覆盖质量。 *** ** * ** *** ### 15. 多用户 MIMO 单用户 MIMO 中,多根天线服务一个用户;多用户 MIMO 中,基站同时服务多个用户。 基站多天线阵列 用户 1 用户 2 用户 3 用户 K 下行多用户 MIMO 模型为: yk=hkH∑j=1Kwjsj+nk \\mathbf{y}_k = \\mathbf{h}_k\^H \\sum_{j=1}\^{K} \\mathbf{w}_j s_j + n_k yk=hkHj=1∑Kwjsj+nk 其中: * hk\\mathbf{h}_khk 表示基站到第 kkk 个用户的信道向量; * wj\\mathbf{w}_jwj 表示给第 jjj 个用户的波束赋形向量; * sjs_jsj 表示第 jjj 个用户的数据符号; * nkn_knk 表示第 kkk 个用户接收噪声。 展开为: yk=hkHwksk+∑j≠khkHwjsj+nk y_k = \\mathbf{h}_k\^H\\mathbf{w}_k s_k + \\sum_{j \\neq k} \\mathbf{h}_k\^H\\mathbf{w}_j s_j + n_k yk=hkHwksk+j=k∑hkHwjsj+nk 第一项是目标信号: hkHwksk \\mathbf{h}_k\^H\\mathbf{w}_k s_k hkHwksk 第二项是多用户干扰: ∑j≠khkHwjsj \\sum_{j \\neq k} \\mathbf{h}_k\^H\\mathbf{w}_j s_j j=k∑hkHwjsj 因此,多用户 MIMO 的关键问题是设计波束赋形矩阵,使得目标用户信号增强,同时其他用户干扰降低。 *** ** * ** *** ### 16. Python 示例一:计算 MIMO 信道容量 下面给出一个简单 Python 程序,计算随机瑞利 MIMO 信道容量。 ```python import numpy as np def mimo_capacity(nt=4, nr=4, snr_db=20): """ 计算随机瑞利 MIMO 信道容量 nt: 发送天线数 nr: 接收天线数 snr_db: 信噪比,单位 dB """ snr_linear = 10 ** (snr_db / 10) # 复高斯瑞利信道 H H = (np.random.randn(nr, nt) + 1j * np.random.randn(nr, nt)) / np.sqrt(2) # 容量公式 C = log2 det(I + snr/nt * H H^H) I = np.eye(nr) capacity = np.log2( np.linalg.det(I + (snr_linear / nt) * H @ H.conj().T) ) return np.real(capacity) if __name__ == "__main__": for snr_db in [0, 5, 10, 15, 20, 25, 30]: c = mimo_capacity(nt=4, nr=4, snr_db=snr_db) print(f"SNR = {snr_db:2d} dB, Capacity = {c:.4f} bit/s/Hz") ``` 运行结果示例: ```text SNR = 0 dB, Capacity = 4.2103 bit/s/Hz SNR = 5 dB, Capacity = 7.8431 bit/s/Hz SNR = 10 dB, Capacity = 12.7216 bit/s/Hz SNR = 15 dB, Capacity = 18.5068 bit/s/Hz SNR = 20 dB, Capacity = 25.2945 bit/s/Hz SNR = 25 dB, Capacity = 31.8732 bit/s/Hz SNR = 30 dB, Capacity = 39.6047 bit/s/Hz ``` *** ** * ** *** ### 17. Python 示例二:绘制不同天线规模下的容量曲线 ```python import numpy as np import matplotlib.pyplot as plt def average_mimo_capacity(nt, nr, snr_db, trials=1000): snr_linear = 10 ** (snr_db / 10) capacities = [] for _ in range(trials): H = (np.random.randn(nr, nt) + 1j * np.random.randn(nr, nt)) / np.sqrt(2) I = np.eye(nr) C = np.log2(np.linalg.det(I + (snr_linear / nt) * H @ H.conj().T)) capacities.append(np.real(C)) return np.mean(capacities) if __name__ == "__main__": snr_range = np.arange(0, 31, 5) configs = [ (1, 1), (2, 2), (4, 4), (8, 8) ] plt.figure(figsize=(8, 6)) for nt, nr in configs: capacities = [] for snr_db in snr_range: c = average_mimo_capacity(nt, nr, snr_db, trials=500) capacities.append(c) plt.plot(snr_range, capacities, marker='o', label=f"{nt}x{nr} MIMO") plt.xlabel("SNR / dB") plt.ylabel("Average Capacity / bit/s/Hz") plt.title("MIMO Capacity under Rayleigh Fading Channel") plt.grid(True) plt.legend() plt.tight_layout() plt.show() ``` 该程序可以得到类似如下趋势: MIMO 容量随 SNR 增长趋势 0 5 10 15 20 25 30 SNR/dB 80 70 60 50 40 30 20 10 0 Capacity bit/s/Hz *** ** * ** *** ### 18. Python 示例三:ZF 与 MMSE 检测对比 下面以 2×22 \\times 22×2 MIMO 和 BPSK 调制为例,对比 ZF 和 MMSE 检测误码率。 ```python import numpy as np import matplotlib.pyplot as plt def bpsk_mod(bits): return 2 * bits - 1 def bpsk_demod(symbols): return (symbols.real > 0).astype(int) def simulate_mimo_detection(nt=2, nr=2, snr_db_range=range(0, 21, 2), num_symbols=10000): ber_zf = [] ber_mmse = [] for snr_db in snr_db_range: snr_linear = 10 ** (snr_db / 10) noise_var = 1 / snr_linear bit_errors_zf = 0 bit_errors_mmse = 0 total_bits = 0 for _ in range(num_symbols): # 生成随机比特 bits = np.random.randint(0, 2, nt) # BPSK 调制 x = bpsk_mod(bits).astype(complex).reshape(nt, 1) # 瑞利信道 H = (np.random.randn(nr, nt) + 1j * np.random.randn(nr, nt)) / np.sqrt(2) # 复高斯噪声 n = np.sqrt(noise_var / 2) * ( np.random.randn(nr, 1) + 1j * np.random.randn(nr, 1) ) # 接收信号 y = H @ x + n # ZF 检测 W_zf = np.linalg.pinv(H) x_hat_zf = W_zf @ y bits_hat_zf = bpsk_demod(x_hat_zf.flatten()) # MMSE 检测 W_mmse = np.linalg.inv(H.conj().T @ H + noise_var * np.eye(nt)) @ H.conj().T x_hat_mmse = W_mmse @ y bits_hat_mmse = bpsk_demod(x_hat_mmse.flatten()) bit_errors_zf += np.sum(bits != bits_hat_zf) bit_errors_mmse += np.sum(bits != bits_hat_mmse) total_bits += nt ber_zf.append(bit_errors_zf / total_bits) ber_mmse.append(bit_errors_mmse / total_bits) print( f"SNR={snr_db:2d} dB, " f"ZF BER={ber_zf[-1]:.6f}, " f"MMSE BER={ber_mmse[-1]:.6f}" ) return list(snr_db_range), ber_zf, ber_mmse if __name__ == "__main__": snr_db_range, ber_zf, ber_mmse = simulate_mimo_detection() plt.figure(figsize=(8, 6)) plt.semilogy(snr_db_range, ber_zf, marker='o', label="ZF") plt.semilogy(snr_db_range, ber_mmse, marker='s', label="MMSE") plt.xlabel("SNR / dB") plt.ylabel("BER") plt.title("ZF and MMSE Detection Performance in 2x2 MIMO") plt.grid(True, which="both") plt.legend() plt.tight_layout() plt.show() ``` 通常可以观察到: * 低信噪比时,MMSE 明显优于 ZF; * 高信噪比时,ZF 和 MMSE 性能逐渐接近; * ZF 容易放大噪声; * MMSE 通过引入噪声方差项,提升了稳定性。 *** ** * ** *** ### 19. Python 示例四:SVD 分解 MIMO 信道 下面演示如何通过 SVD 将 MIMO 信道分解为多个并行子信道。 ```python import numpy as np np.random.seed(0) nt = 4 nr = 4 # 随机生成瑞利 MIMO 信道 H = (np.random.randn(nr, nt) + 1j * np.random.randn(nr, nt)) / np.sqrt(2) # 奇异值分解 U, singular_values, Vh = np.linalg.svd(H) print("信道矩阵 H:") print(H) print("\n奇异值:") print(singular_values) print("\n信道秩:") print(np.linalg.matrix_rank(H)) # 根据奇异值计算各子信道增益 subchannel_gains = singular_values ** 2 print("\n各并行子信道增益:") print(subchannel_gains) ``` 输出中的奇异值越大,说明对应空间子信道质量越好;奇异值越小,说明对应空间通道较弱。 *** ** * ** *** ### 20. MIMO 与波束赋形 波束赋形本质上是通过调整多根天线的发送权重,使信号在目标方向相干叠加,在非目标方向相互抵消。 发送信号可以写成: x=ws \\mathbf{x} = \\mathbf{w}s x=ws 其中: * sss 是待发送符号; * w\\mathbf{w}w 是波束赋形向量。 接收信号为: y=hHws+n y = \\mathbf{h}\^H\\mathbf{w}s + n y=hHws+n 接收信噪比为: ##

\text{SNR}

\frac{

|\mathbf{h}H\mathbf{w}|2 P

}{

\sigma_n^2

}

为了最大化 SNR,需要求解: max⁡w∣hHw∣2 \\max_{\\mathbf{w}} \|\\mathbf{h}\^H\\mathbf{w}\|\^2 wmax∣hHw∣2 约束为: ∥w∥2=1 \\\|\\mathbf{w}\\\|\^2 = 1 ∥w∥2=1 根据柯西不等式: ∣hHw∣2≤∥h∥2∥w∥2 \|\\mathbf{h}\^H\\mathbf{w}\|\^2 \\leq \\\|\\mathbf{h}\\\|\^2 \\\|\\mathbf{w}\\\|\^2 ∣hHw∣2≤∥h∥2∥w∥2 当: ##

\mathbf{w}

\frac{\mathbf{h}}{|\mathbf{h}|}

时取等号。 因此,最大比传输 MRT 波束赋形向量为: ##

\mathbf{w}_{MRT}

\frac{\mathbf{h}}{|\mathbf{h}|}

*** ** * ** *** ### 21. MIMO 技术在 5G 中的作用 在 5G NR 系统中,MIMO 主要承担以下任务: | 技术方向 | 作用 | |--------------|-------------| | Massive MIMO | 提高频谱效率和覆盖能力 | | Beamforming | 增强目标方向信号 | | MU-MIMO | 支持多用户并行传输 | | 空间复用 | 提高峰值速率 | | 分集传输 | 提高链路可靠性 | | 波束管理 | 支持毫米波高频通信 | 特别是在毫米波频段,由于路径损耗较大,波束赋形几乎是必不可少的关键技术。 *** ** * ** *** ### 22. MIMO 系统设计中的关键问题 #### 22.1 信道估计 MIMO 系统需要准确估计信道矩阵 H\\mathbf{H}H。如果信道估计误差较大,则检测、预编码和波束赋形都会受到影响。 估计模型通常为: Yp=HXp+Np \\mathbf{Y}_p = \\mathbf{H}\\mathbf{X}_p + \\mathbf{N}_p Yp=HXp+Np 其中 Xp\\mathbf{X}_pXp 为导频矩阵,Yp\\mathbf{Y}_pYp 为导频接收信号。 最小二乘估计为: ##

\hat{\mathbf{H}}_{LS}

\mathbf{Y}_p\mathbf{X}_p^H

(\mathbf{X}_p\mathbf{X}_pH){-1}

#### 22.2 天线相关性 理想 MIMO 要求不同天线之间的信道尽可能独立。如果天线间距过小或传播环境缺乏散射,则信道相关性增强,矩阵秩下降,空间复用能力变差。 相关信道可建模为: ##

\mathbf{H}_{corr}

\mathbf{R}r^{1/2}
\mathbf{H}
{iid}

\mathbf{R}_t^{1/2}

其中: * Rr\\mathbf{R}_rRr 是接收端相关矩阵; * Rt\\mathbf{R}_tRt 是发送端相关矩阵; * Hiid\\mathbf{H}_{iid}Hiid 是独立同分布瑞利信道。 #### 22.3 反馈开销 在 FDD 系统中,发送端需要通过反馈获得信道状态信息。当天线数量很大时,信道矩阵维度很高,反馈开销成为重要问题。 #### 22.4 硬件复杂度 更多天线意味着更多射频链路、功放、ADC、DAC 和校准模块,因此系统成本和功耗都会增加。 *** ** * ** *** ### 23. 总结 MIMO 多输入多输出技术通过在发送端和接收端引入多根天线,将无线通信从传统的一维传输扩展为空间多维传输。它可以利用空间复用提高传输速率,利用分集增益增强可靠性,利用波束赋形提升覆盖能力。其核心数学模型为: y=Hx+n \\mathbf{y} = \\mathbf{H}\\mathbf{x} + \\mathbf{n} y=Hx+n 其信道容量为: C=log⁡2det⁡(INr+ρNtHHH) C = \\log_2 \\det \\left( \\mathbf{I}_{N_r} + \\frac{\\rho}{N_t} \\mathbf{H}\\mathbf{H}\^H \\right) C=log2det(INr+NtρHHH) 通过 SVD 分解,MIMO 信道可以被理解为多个并行子信道: H=UΣVH \\mathbf{H} = \\mathbf{U}\\mathbf{\\Sigma}\\mathbf{V}\^H H=UΣVH 接收端常用检测算法包括 ZF、MMSE 和 ML,其中 ZF 复杂度低但容易放大噪声,MMSE 在噪声抑制和干扰消除之间取得折中,ML 性能最优但复杂度最高。 从 4G 到 5G,再到未来 6G,MIMO 始终是提高无线通信系统容量、可靠性和覆盖能力的关键技术之一。随着大规模天线阵列、智能超表面、毫米波通信、通信感知一体化和 AI 辅助信道估计的发展,MIMO 技术仍将继续演进,并在未来无线网络中发挥更加核心的作用。

相关推荐
通信小呆呆1 小时前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
迈威通信6 小时前
戈壁滩上的“国产化通信网”:850MW光储项目如何稳定运行?
网络·物联网·安全·信息与通信
Aaron15888 小时前
全频段 SDR干扰源模块解决方案(星链干扰、LORA无人机干扰)
人工智能·算法·fpga开发·硬件架构·硬件工程·无人机·信息与通信
通信小呆呆1 天前
注意力机制用于信号同步:从匹配滤波到可学习对齐
人工智能·学习·机器学习·信息与通信
CableTech_SQH1 天前
江苏理工学院武进绿建区协同创新园智能化建设 F5G 全光方案百盛分析报告
大数据·网络·数据库·5g·信息与通信
星恒讯工业路由器1 天前
企业组网 企业加密内网、内网穿透、专线组网,三种方式该怎么选
网络·物联网·智能路由器·信息与通信
CableTech_SQH1 天前
南通肿瘤医院智能化建设解析 以太网全光 + 低烟无卤 B1 方案百盛分析报告
大数据·运维·服务器·网络·信息与通信
高翔·权衡之境2 天前
主题4:差错控制——噪声中如何保真?
驱动开发·安全·缓存·系统安全·信息与通信
CableTech_SQH2 天前
华中科技大学同济医学院附属协和医院重庆医院智能化建设 F5G 全光方案百盛分析报告
大数据·网络·5g·运维开发·信息与通信