第四章:调制解调技术
深入解析 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 调制解调技术:
- 调制方式:BPSK、QPSK、16/64/256/1024-QAM 星座映射
- 格雷编码:降低相邻星座点误码
- 导频子载波:相位跟踪、频偏估计
- 信道估计:基于 LTF 的 LS 估计
- 频域均衡:ZF 和 MMSE 均衡器
下一章将讲解 MAC 层架构和 CSMA/CA 机制。
上一章:03-编码解码原理
下一章:05-MAC 层架构