信道均衡——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∣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):

  1. 观测信号自相关:

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

  1. 互相关:

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

  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,瑞利衰落:

相关推荐
晓梦林9 分钟前
MAZESEC-X1靶场学习笔记
笔记·学习
我的xiaodoujiao1 小时前
API 接口自动化测试详细图文教程学习系列15--项目实战演练2
python·学习·测试工具·pytest
TImCheng06091 小时前
职场人AI学习周期评估:不同学习路径的时间成本
人工智能·学习
周末也要写八哥1 小时前
C4D/Cinema 4D 2026超详细下载与安装教程(附资源包)
学习·数学建模
xinzheng新政1 小时前
openclaw dashboard报错 internal server error
学习
nashane2 小时前
HarmonyOS 6学习:RichEditor宽度“暴力”计算与富文本截图避坑
学习·harmonyos 5
鹿鸣悠悠3 小时前
【AI学习】全链路、并发、响应时间
学习
PNP Robotics3 小时前
领军军者|PNP机器人包文涛:以具身智能定义机器人的“生命直觉”
人工智能·深度学习·学习·机器学习·机器人
QYQ_11273 小时前
嵌入式学习——字符设备驱动的注册和调用流程
学习
xinhuanjieyi3 小时前
极语言让ai学习的方法
开发语言·学习