信道均衡——LMMSE算法

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∣2J(W) = E\|\\hat{X} - X\|\^2 = E\|WY - X\|\^2J(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

第一步:展开期望公式

EWYY∗−XY∗=0EWYY\^\* - XY\^\* = 0EWYY∗−XY∗=0

W⋅EYY∗=EXY∗W \cdot EYY\^\* = EXY\^\*W⋅EYY∗=EXY∗

第二步:计算自相关 EYY∗EYY\^\*EYY∗ 和互相关 EXY∗EXY\^\*EXY∗

根据 Y=HX+NY = HX + NY=HX+N,假设信号 XXX 与噪声 NNN 互不相关(即 EXN∗=0EXN\^\* = 0EXN∗=0):

  1. 观测信号自相关:

EYY∗=E(HX+N)(HX+N)∗=∣H∣2E∣X∣2+E∣N∣2=∣H∣2σx2+σn2EYY\^\* = E(HX+N)(HX+N)\^\* = |H|^2E\|X\|\^2 + E\|N\|\^2 = |H|^2\sigma_x^2 + \sigma_n^2EYY∗=E(HX+N)(HX+N)∗=∣H∣2E∣X∣2+E∣N∣2=∣H∣2σx2+σn2

  1. 互相关:

EXY∗=EX(HX+N)∗=H∗E∣X∣2=H∗σx2EXY\^\* = EX(HX+N)\^\* = H^*E\|X\|\^2 = H^*\sigma_x^2EXY∗=EX(HX+N)∗=H∗E∣X∣2=H∗σx2

第三步:求解 WWW

将上述结果代入 W⋅EYY∗=EXY∗W \cdot EYY\^\* = EXY\^\*W⋅EYY∗=EXY∗

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 的高明之处:

  1. Zero-Forcing (ZF) 均衡器: WZF=1HW_{ZF} = \frac{1}{H}WZF=H1
  • 缺点: 如果某个频率点信道很弱(∣H∣|H|∣H∣ 很小),1/H1/H1/H 就会变得非常大。此时会极度放大噪声,导致性能崩溃。
  1. 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,瑞利衰落:

相关推荐
袁小皮皮不皮24 分钟前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
装不满的克莱因瓶1 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
清辞8532 小时前
产品经理需求推进流程
大数据·深度学习·学习·产品经理
YM52e2 小时前
鸿蒙PC ArkTS 声明合并问题深度解析与最佳实践
学习·华为·harmonyos·鸿蒙·鸿蒙系统
海兰3 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
ken22323 小时前
在 Libreoffice Calc中输入自定义表情字符时,需要保存之后,才能正常显示
学习
zwenqiyu4 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
编程圈子4 小时前
电机驱动开发学习2. 直流无刷电机工作原理
驱动开发·学习
MartinYeung54 小时前
[论文学习]大型语言模型(LLM)安全与隐私-基于善、恶、丑的深度分析
学习·安全·语言模型
什仙4 小时前
Mathcad Prime 的教程资料
学习·工具