LMMSE(Linear Minimum Mean Square Error,线性最小均方误差)均衡是通信系统中最为经典且高效的接收端技术之一。它的核心思想是在抑制噪声与**消除信道干扰(ISI/衰落)**之间寻找一个最佳的平衡点。
1. 系统模型与变量含义
在单载波或 OFDM 的子载波上,经过频域同步后的接收信号模型可以表示为:
Y=HX+NY = HX + NY=HX+N
其中各变量的物理意义如下:
- XXX: 发送信号 。通常假设其均值为 0,协方差(功率)为 E[∣X∣2]=σx2E[|X|^2] = \sigma_x^2E[∣X∣2]=σx2。
- HHH: 信道频率响应(Channel Frequency Response)。它代表了信道对信号的幅度衰减和相位旋转。
- NNN: 加性高斯白噪声 (AWGN)。均值为 0,方差(功率)为 E[∣N∣2]=σn2E[|N|^2] = \sigma_n^2E[∣N∣2]=σn2。
- YYY: 接收信号。
2. LMMSE 的核心目标
均衡器的目的是找到一个线性系数 WWW,使得估计值 X^=WY\hat{X} = WYX^=WY 与真实值 XXX 之间的均方误差(MSE)最小:
J(W)=E[∣X^−X∣2]=E[∣WY−X∣2]J(W) = E[|\hat{X} - X|^2] = E[|WY - X|^2]J(W)=E[∣X^−X∣2]=E[∣WY−X∣2]
3. 公式推导过程
为了求得使 J(W)J(W)J(W) 最小的 WWW,我们利用正交原理(Orthogonality Principle) 。该原理指出,最优估计误差 (WY−X)(WY - X)(WY−X) 必须与观测数据 YYY 正交:
E[(WY−X)Y∗]=0E[(WY - X)Y^*] = 0E[(WY−X)Y∗]=0
第一步:展开期望公式
E[WYY∗−XY∗]=0E[WYY^* - XY^*] = 0E[WYY∗−XY∗]=0
W⋅E[YY∗]=E[XY∗]W \cdot E[YY^*] = E[XY^*]W⋅E[YY∗]=E[XY∗]
第二步:计算自相关 E[YY∗]E[YY^*]E[YY∗] 和互相关 E[XY∗]E[XY^*]E[XY∗]
根据 Y=HX+NY = HX + NY=HX+N,假设信号 XXX 与噪声 NNN 互不相关(即 E[XN∗]=0E[XN^*] = 0E[XN∗]=0):
- 观测信号自相关:
E[YY∗]=E[(HX+N)(HX+N)∗]=∣H∣2E[∣X∣2]+E[∣N∣2]=∣H∣2σx2+σn2E[YY^*] = E[(HX+N)(HX+N)^*] = |H|^2E[|X|^2] + E[|N|^2] = |H|^2\sigma_x^2 + \sigma_n^2E[YY∗]=E[(HX+N)(HX+N)∗]=∣H∣2E[∣X∣2]+E[∣N∣2]=∣H∣2σx2+σn2
- 互相关:
E[XY∗]=E[X(HX+N)∗]=H∗E[∣X∣2]=H∗σx2E[XY^*] = E[X(HX+N)^*] = H^*E[|X|^2] = H^*\sigma_x^2E[XY∗]=E[X(HX+N)∗]=H∗E[∣X∣2]=H∗σx2
第三步:求解 WWW
将上述结果代入 W⋅E[YY∗]=E[XY∗]W \cdot E[YY^*] = E[XY^*]W⋅E[YY∗]=E[XY∗]:
W(∣H∣2σx2+σn2)=H∗σx2W(|H|^2\sigma_x^2 + \sigma_n^2) = H^*\sigma_x^2W(∣H∣2σx2+σn2)=H∗σx2
W=H∗σx2∣H∣2σx2+σn2W = \frac{H^* \sigma_x^2}{|H|^2 \sigma_x^2 + \sigma_n^2}W=∣H∣2σx2+σn2H∗σx2
为了简化,我们通常将分子分母同除以 σx2\sigma_x^2σx2:
WLMMSE=H∗∣H∣2+σn2σx2W_{LMMSE} = \frac{H^*}{|H|^2 + \frac{\sigma_n^2}{\sigma_x^2}} WLMMSE=∣H∣2+σx2σn2H∗
4. 深度理解:LMMSE vs. Zero-Forcing (ZF)
我们可以通过对比来看出 LMMSE 的高明之处:
- Zero-Forcing (ZF) 均衡器: WZF=1HW_{ZF} = \frac{1}{H}WZF=H1
- 缺点: 如果某个频率点信道很弱(∣H∣|H|∣H∣ 很小),1/H1/H1/H 就会变得非常大。此时会极度放大噪声,导致性能崩溃。
- LMMSE 均衡器:
- 高 SNR 时 (σn2→0\sigma_n^2 \to 0σn2→0): 公式退化为 1/H1/H1/H,此时主要任务是消除衰落。
- 低 SNR 时 (σn2\sigma_n^2σn2 很大): 分母被噪声功率占主导,阻止了 WWW 无限变大。此时它表现得更稳健,牺牲了一部分信号还原度来换取噪声的抑制。
5. python代码实现
python
import torch
import matplotlib.pyplot as plt
import numpy as np
def MMSE_equalization(x_complex, h, received_signal, noise_power):
'''
计算 MMSE 均衡器系数并应用于接收信号
:param x_complex: 信道输入信号(复数形式)
:param h: 信道系数(复数形式)
:param received_signal: 接收信号(复数形式)
:param noise_power: 噪声功率(标量),不是SNR
:return: 均衡后的信号(复数形式)
'''
device = x_complex.device
Px = torch.mean(torch.abs(x_complex) ** 2)
#print(f"Px: {Px.item()}")
noise_power_tensor = torch.tensor(noise_power, device=device)
# 计算 MMSE 均衡器系数
W = h.conj() / (torch.abs(h) ** 2 + noise_power_tensor / Px)
# 应用 MMSE 均衡器
equalized_signal = W * received_signal
return equalized_signal
def test_lmmse_equalization():
# 1. 模拟参数设置
B, C, K = 4, 12, 80 # Batch, Subcarriers, Symbols
SNR_dB = 10
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 2. 生成随机复数信号 (模拟已归一化的 x_normalized)
# 我们用 4-QAM 信号作为例子,方便观察星座图
x_real = torch.sign(torch.randn(B, C, K, device=device))
x_imag = torch.sign(torch.randn(B, C, K, device=device))
x_normalized = (x_real + 1j * x_imag) / np.sqrt(2) # 功率归一化到 1
# 3. 生成随机信道 H (瑞利衰落)
#h = (torch.randn(B, C, K, device=device) + 1j * torch.randn(B, C, K, device=device)) / np.sqrt(2)
h = torch.ones_like(x_normalized) * (0.5 + 0.5j) # 顺时针旋转45°
# 4. 信号经过信道
y_faded = h * x_normalized
# 5. 添加噪声
p_rx = torch.mean(torch.abs(y_faded) ** 2, dim=(1, 2), keepdim=True)
snr_linear = 10 ** (SNR_dB / 10.0)
n0 = p_rx / snr_linear
noise = (torch.randn_like(x_normalized) + 1j * torch.randn_like(x_normalized)) * torch.sqrt(n0 / 2)
y_complex = y_faded + noise
# 6. LMMSE 均衡
noise_var = n0
y_equalized = MMSE_equalization(x_normalized, h, y_complex, noise_var)
# 7. 性能评估
mse = torch.mean(torch.abs(x_normalized - y_equalized) ** 2).item()
print(f"--- 测试结果 ---")
print(f"SNR: {SNR_dB} dB")
print(f"MSE (越小越好): {mse:.6f}")
# 8. 可视化星座图
plt.figure(figsize=(12, 4))
# 原始信号
plt.subplot(1, 3, 1)
plt.scatter(x_normalized.cpu().real.flatten(), x_normalized.cpu().imag.flatten(), s=1, alpha=0.5)
plt.title("Original (Sent)")
plt.grid(True);
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
# 接收信号 (未均衡)
plt.subplot(1, 3, 2)
plt.scatter(y_complex.cpu().real.flatten(), y_complex.cpu().imag.flatten(), s=1, alpha=0.3)
plt.title("Received (Faded + Noise)")
plt.grid(True)
# 均衡后信号
plt.subplot(1, 3, 3)
plt.scatter(y_equalized.cpu().real.flatten(), y_equalized.cpu().imag.flatten(), s=1, alpha=0.5)
plt.title(f"Equalized (LMMSE)\nMSE: {mse:.5f}")
plt.grid(True);
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
plt.tight_layout()
plt.show()
if __name__ == "__main__":
test_lmmse_equalization()
SNR=10dB,平坦衰落(旋转45°):

SNR=10dB,瑞利衰落:
