跳转至

第四章:调制解调技术

深入解析 WiFi 调制解调技术:BPSK、QPSK、QAM 调制原理、星座映射、信道估计与均衡


4.1 调制概述

4.1.1 调制方式演进

┌─────────────────────────────────────────────────────────┐
│              WiFi 调制方式演进                            │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│  标准    │ 802.11a │ 802.11n │ 802.11ac│ 802.11ax│802.11│
│          │  /g     │         │         │         │ be   │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 调制方式 │BPSK     │ 同左    │ +256-   │ +1024-  │+4096 │
│          │QPSK     │         │  QAM    │  QAM    │ QAM  │
│          │16-QAM   │         │         │         │      │
│          │64-QAM   │         │         │         │      │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 每符号   │ 1       │ 2       │ 4/6/8   │ 10      │ 12   │
│ bit 数   │ 2       │ 4       │         │         │      │
│ (max)    │ 4       │ 6       │ 8       │ 10      │ 12   │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 最大速率 │  54     │  600    │  6.9G   │  9.6G   │ 40G  │
│ (Mbps)   │  Mbps   │  Mbps   │  bps    │  bps    │ bps  │
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘

4.1.2 星座图对比

┌─────────────────────────────────────────────────────────┐
│              常见调制星座图                              │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  BPSK (2 点):            QPSK (4 点):                    │
│      Q                         Q                        │
│      │                         │                        │
│      │  ●                     │  ●   ●                 │
│  ────┼──── I               ────┼──── I                 │
│      │                         │                        │
│      │  ●                     │  ●   ●                 │
│                                                         │
│  16-QAM (4×4):           64-QAM (8×8):                  │
│      Q                         Q                        │
│      │                         │                        │
│  ●   ●   ●   ●             ● ● ● ● ● ● ● ●             │
│  ●   ●   ●   ●             ● ● ● ● ● ● ● ●             │
│  ●   ●   ●   ●             ● ● ● ● ● ● ● ●             │
│  ●   ●   ●   ●             ● ● ● ● ● ● ● ●             │
│  ──────────── I            ───────────────── I          │
│                                                         │
│  256-QAM (16×16):          1024-QAM (32×32):            │
│      Q                         Q                        │
│      │                         │                        │
│  16×16 网格点              32×32 网格点                  │
│  (每象限 64 点)              (每象限 256 点)               │
│                                                         │
└─────────────────────────────────────────────────────────┘

4.2 BPSK/QPSK 调制

4.2.1 BPSK 调制原理

二进制相移键控:

BPSK 映射:
┌─────────────────────────────────────────────────────────┐
│  输入 bit    相位      I       Q       复数表示          │
├─────────────────────────────────────────────────────────┤
│     0        0°       +1      0       +1 + j0          │
│     1       180°      -1      0       -1 + j0          │
└─────────────────────────────────────────────────────────┘

数学表达式:
s(t) = A · cos(2πf_c·t + φ)
其中 φ = 0 (bit 0) 或 π (bit 1)

归一化后:
I = 2×bit - 1  (bit=0 → I=-1, bit=1 → I=+1)
Q = 0

4.2.2 QPSK 调制原理

四相相移键控:

QPSK 映射 (格雷编码):
┌─────────────────────────────────────────────────────────┐
│  输入 bits    相位       I       Q      复数表示         │
│  (b1,b0)                                                    │
├─────────────────────────────────────────────────────────┤
│    (0,0)      45°      +1/√2   +1/√2   (1+j)/√2        │
│    (0,1)     135°      -1/√2   +1/√2   (-1+j)/√2       │
│    (1,1)     225°      -1/√2   -1/√2   (-1-j)/√2       │
│    (1,0)     315°      +1/√2   -1/√2   (1-j)/√2        │
└─────────────────────────────────────────────────────────┘

格雷编码优势:
└─ 相邻星座点只差 1 bit,降低误码率

数学表达式:
I = (2×b1 - 1) / √2
Q = (2×b0 - 1) / √2

4.2.3 BPSK/QPSK 调制器 Verilog

module wifi_bpsk_qpsk_modulator (
    input wire clk,
    input wire reset_n,
    input wire [1:0] data_in,  // 1 bit (BPSK) 或 2 bit (QPSK)
    output reg signed [11:0] i_out,
    output reg signed [11:0] q_out,
    input wire enable,
    input wire mod_type  // 0=BPSK, 1=QPSK
);

// 归一化因子 (12 bit 定点数,Q1.11 格式)
// 1/√2 ≈ 0.707 ≈ 1448/2048
localparam [11:0] NORM_1 = 12'd2047;  // 1.0
localparam [11:0] NORM_SQRT2 = 12'd1448;  // 1/√2

always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        i_out <= 12'sd0;
        q_out <= 12'sd0;
    end else if (enable) begin
        if (mod_type == 1'b0) begin
            // BPSK 调制 (只用 I 路)
            i_out <= (data_in[0] == 1'b0) ? -NORM_1 : NORM_1;
            q_out <= 12'sd0;
        end else begin
            // QPSK 调制
            i_out <= (data_in[1] == 1'b0) ? NORM_SQRT2 : -NORM_SQRT2;
            q_out <= (data_in[0] == 1'b0) ? NORM_SQRT2 : -NORM_SQRT2;
        end
    end
end

endmodule

4.3 QAM 调制

4.3.1 16-QAM 调制

16-QAM 星座映射 (格雷编码):

┌─────────────────────────────────────────────────────────┐
│              16-QAM 星座图 (4×4)                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│      Q                                                  │
│      │                                                  │
│  10  │  ●   ●   ●   ●   I=+3  (00,01,11,10)            │
│  11  │  ●   ●   ●   ●   I=+1  (00,01,11,10)            │
│  01  │  ●   ●   ●   ●   I=-1  (00,01,11,10)            │
│  00  │  ●   ●   ●   ●   I=-3  (00,01,11,10)            │
│      │                                                  │
│      └──────────────────────────── I                    │
│         00  01  11  10                                  │
│                                                         │
│  输入:4 bit (b3,b2,b1,b0)                              │
│  ├─ b3,b2: I 路 (2 bit, 4 电平)                          │
│  └─ b1,b0: Q 路 (2 bit, 4 电平)                          │
│                                                         │
│  映射公式:                                             │
│  I = (2×b3 + b2 - 3) × A                               │
│  Q = (2×b1 + b0 - 3) × A                               │
│  其中 A = 1/√10 (归一化因子)                            │
│                                                         │
└─────────────────────────────────────────────────────────┘

4.3.2 64-QAM 调制

64-QAM 星座映射:

┌─────────────────────────────────────────────────────────┐
│              64-QAM 星座图 (8×8)                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│      Q                                                  │
│      │                                                  │
│  8×8 网格点,每轴 8 电平                                   │
│  I 电平:±1/√42, ±3/√42, ±5/√42, ±7/√42                 │
│  Q 电平:±1/√42, ±3/√42, ±5/√42, ±7/√42                 │
│                                                         │
│  输入:6 bit (b5,b4,b3,b2,b1,b0)                        │
│  ├─ b5,b4,b3: I 路 (3 bit, 8 电平)                        │
│  └─ b2,b1,b0: Q 路 (3 bit, 8 电平)                        │
│                                                         │
│  格雷编码映射表:                                       │
│  ┌────────┬────────┐                                    │
│  │  3 bit │  电平  │                                    │
│  ├────────┼────────┤                                    │
│  │  000   │  +7    │                                    │
│  │  001   │  +5    │                                    │
│  │  011   │  +3    │                                    │
│  │  010   │  +1    │                                    │
│  │  110   │  -1    │                                    │
│  │  111   │  -3    │                                    │
│  │  101   │  -5    │                                    │
│  │  100   │  -7    │                                    │
│  └────────┴────────┘                                    │
│                                                         │
└─────────────────────────────────────────────────────────┘

4.3.3 QAM 调制器 Verilog

module wifi_qam_modulator (
    input wire clk,
    input wire reset_n,
    input wire [11:0] data_in,  // 最多 12 bit (4096-QAM)
    output reg signed [11:0] i_out,
    output reg signed [11:0] q_out,
    input wire enable,
    input wire [2:0] modulation  // 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM
);

// 查找表实现星座映射
// 16-QAM 映射表 (4 bit 输入)
reg signed [11:0] qam16_lut_i [0:15];
reg signed [11:0] qam16_lut_q [0:15];

// 64-QAM 映射表 (6 bit 输入)
reg signed [11:0] qam64_lut_i [0:63];
reg signed [11:0] qam64_lut_q [0:63];

// 初始化 (简化示例,实际应使用 ROM)
initial begin
    integer i;
    // 16-QAM 初始化
    for (i = 0; i < 16; i = i + 1) begin
        // 根据格雷编码填充查找表
        // (详细值略)
    end
end

// 调制输出
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        i_out <= 12'sd0;
        q_out <= 12'sd0;
    end else if (enable) begin
        case (modulation)
            3'd0: begin  // BPSK
                i_out <= (data_in[0]) ? 12'sd2047 : -12'sd2047;
                q_out <= 12'sd0;
            end
            3'd1: begin  // QPSK
                i_out <= (data_in[1]) ? 12'sd1448 : -12'sd1448;
                q_out <= (data_in[0]) ? 12'sd1448 : -12'sd1448;
            end
            3'd2: begin  // 16-QAM
                i_out <= qam16_lut_i[data_in[3:0]];
                q_out <= qam16_lut_q[data_in[3:0]];
            end
            3'd3: begin  // 64-QAM
                i_out <= qam64_lut_i[data_in[5:0]];
                q_out <= qam64_lut_q[data_in[5:0]];
            end
            // 256-QAM, 1024-QAM 类似实现
        endcase
    end
end

endmodule

4.4 导频子载波

4.4.1 导频位置和值

┌─────────────────────────────────────────────────────────┐
│              WiFi 导频子载波配置                          │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│  标准    │ 802.11a │ 802.11n │ 802.11ac│ 802.11ax│ 说明 │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 20 MHz   │   4     │   4     │   8     │   8     │ 数量 │
│ 导频索引 │ ±7,±21  │ ±7,±21  │±11,±25, │±11,±25, │      │
│          │         │         │ ±39,±53 │ ±39,±53 │      │
│ 40 MHz   │   -     │   6     │   12    │   12    │      │
│ 80 MHz   │   -     │   -     │   16    │   16    │      │
│ 160 MHz  │   -     │   -     │   -     │   32    │      │
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘

导频值 (BPSK 调制):
┌─────────────────────────────────────────────────────────┐
│  符号索引 mod 4    导频值 (P1,P2,P3,P4)                   │
├─────────────────────────────────────────────────────────┤
│       0           (+1,+1,+1,-1)                         │
│       1           (-1,+1,+1,+1)                         │
│       2           (+1,-1,+1,+1)                         │
│       3           (+1,+1,-1,+1)                         │
└─────────────────────────────────────────────────────────┘

导频用途:
├─ 相位跟踪 (CPE 校正)
├─ 频率偏移估计
└─ 信道估计辅助

4.4.2 相位跟踪

// 导频相位误差估计
module pilot_phase_tracker (
    input wire clk,
    input wire reset_n,
    input wire signed [11:0] pilot_rx [0:3],  // 接收导频
    input wire [1:0] pilot_tx [0:3],          // 发送导频 (已知)
    output reg signed [11:0] phase_error,
    input wire enable
);

// 计算每个导频的相位误差
wire signed [23:0] phase_err [0:3];
genvar i;
generate
    for (i = 0; i < 4; i = i + 1) begin
        // 相位误差 = I×Q_ref - Q×I_ref
        assign phase_err[i] = pilot_rx[i] * pilot_tx[i];
    end
endgenerate

// 平均相位误差
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        phase_error <= 12'sd0;
    end else if (enable) begin
        phase_error <= (phase_err[0] + phase_err[1] + 
                        phase_err[2] + phase_err[3]) >> 2;
    end
end

endmodule

4.5 信道估计与均衡

4.5.1 LTF 信道估计

基于长训练字段的信道估计:

┌─────────────────────────────────────────────────────────┐
│              LTF 信道估计原理                             │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  发送端:                                               │
│  ┌─────────────────────────────────────────────────┐   │
│  │  LTF 频域序列 (已知)                               │   │
│  │  L[k] = {+1, -1} (52 个非零子载波)                  │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  信道:                                                 │
│  ┌─────────────────────────────────────────────────┐   │
│  │  H[k] (未知,需要估计)                            │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  接收端:                                               │
│  ┌─────────────────────────────────────────────────┐   │
│  │  Y[k] = H[k] × L[k] + N[k]                       │   │
│  │  其中 N[k] 为噪声                                  │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  信道估计 (最小二乘 LS):                                 │
│  ┌─────────────────────────────────────────────────┐   │
│  │  Ĥ[k] = Y[k] / L[k] = Y[k] × L[k] (因为 L[k]=±1)  │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  由于 L[k] = ±1,除法简化为乘法:                        │
│  ├─ L[k] = +1: Ĥ[k] = Y[k]                             │
│  └─ L[k] = -1: Ĥ[k] = -Y[k]                            │
│                                                         │
└─────────────────────────────────────────────────────────┘

4.5.2 频域均衡

零强制均衡 (ZF):

均衡器原理:

接收信号:Y[k] = H[k] × X[k] + N[k]

均衡后:X̂[k] = Y[k] / Ĥ[k]

其中:
├─ H[k]: 信道频率响应
├─ X[k]: 发送符号
├─ N[k]: 噪声
└─ Ĥ[k]: 信道估计

零强制均衡:
├─ 完全消除 ISI
└─ 但会放大噪声 (特别是|H[k]|小时)

MMSE 均衡 (最小均方误差):

MMSE 均衡器:

X̂[k] = Y[k] × Ĥ*[k] / (|Ĥ[k]|² + 1/SNR)

其中:
├─ Ĥ*[k]: 信道估计的共轭
├─ |Ĥ[k]|²: 信道功率
└─ SNR: 信噪比估计

优势:
├─ 考虑噪声影响
└─ 在低 SNR 下性能优于 ZF

4.5.3 均衡器 Verilog 实现

// 频域均衡器 (ZF)
module frequency_equalizer (
    input wire clk,
    input wire reset_n,
    input wire signed [11:0] rx_data,     // 接收数据 (频域)
    input wire signed [11:0] channel_est, // 信道估计
    output reg signed [11:0] equalized,   // 均衡输出
    input wire enable
);

// 复数除法:Y / H = Y × H* / |H|²
// 简化实现:假设 H 为实数 (实际应为复数)

wire signed [23:0] numerator;
wire [23:0] denom;
wire [11:0] quotient;

assign numerator = $signed(rx_data) * $signed(channel_est);
assign denom = channel_est * channel_est;

// 除法 (简化,实际需要 CORDIC 或查找表)
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        equalized <= 12'sd0;
    end else if (enable) begin
        if (denom != 24'd0) begin
            equalized <= numerator[23:12];  // 简化除法
        end
    end
end

endmodule

// MMSE 均衡器
module mmse_equalizer (
    input wire clk,
    input wire reset_n,
    input wire signed [11:0] rx_data,
    input wire signed [11:0] channel_est,
    input wire [11:0] snr_inv,  // 1/SNR
    output reg signed [11:0] equalized,
    input wire enable
);

// MMSE: Y × H* / (|H|² + 1/SNR)
wire signed [23:0] numerator;
wire [23:0] denom;

assign numerator = $signed(rx_data) * $signed(channel_est);
assign denom = channel_est * channel_est + snr_inv;

always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        equalized <= 12'sd0;
    end else if (enable) begin
        if (denom != 24'd0) begin
            equalized <= numerator[23:12];
        end
    end
end

endmodule

4.6 本章小结

本章详细讲解了 WiFi 调制解调技术:

  1. 调制方式:BPSK、QPSK、16/64/256/1024-QAM 星座映射
  2. 格雷编码:降低相邻星座点误码
  3. 导频子载波:相位跟踪、频偏估计
  4. 信道估计:基于 LTF 的 LS 估计
  5. 频域均衡:ZF 和 MMSE 均衡器

下一章将讲解 MAC 层架构和 CSMA/CA 机制。


上一章:03-编码解码原理
下一章:05-MAC 层架构