第三章:编码解码原理
深入解析 WiFi 信道编码技术:Scrambler、BCC 卷积码、LDPC 码、交织的完整原理与实现
3.1 编码概述
3.1.1 编码流程
WiFi 发送端编码流程:
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 发送端编码流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ MAC 帧 ──► Scrambler ──► 编码器 ──► 交织 ──► 星座映射 │
│ │ │ │ │ │ │
│ │ │ │ │ ▼ │
│ │ │ │ │ OFDM 调制 │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ 扰码 去直流 纠错编码 抗突发 │
│ 随机化 平衡 (BCC/LDPC) 错误 │
│ │
└─────────────────────────────────────────────────────────┘
接收端解码流程 (逆向):
OFDM 解调 ──► 解映射 ──► 去交织 ──► 解码器 ──► Descrambler ──► MAC 帧
|
3.1.2 编码方案演进
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 编码方案演进 │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│ 标准 │ 802.11a │ 802.11n │ 802.11ac│ 802.11ax│802.11│
│ │ /g │ │ │ │ be │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 编码类型 │ BCC │ BCC+ │ BCC+ │ BCC+ │BCC+ │
│ │ │ LDPC │ LDPC │ LDPC │LDPC │
│ 卷积码率 │ 1/2,2/3 │ 1/2-5/6 │ 1/2-5/6 │ 1/2-5/6 │1/2- │
│ │ 3/4,5/6 │ │ │ │ 5/6 │
│ LDPC 码率 │ - │ 1/2,3/4 │ 1/2,3/4 │ 1/2,3/4 │1/2- │
│ │ │ 2/3,5/6 │ 2/3,5/6 │ 2/3,5/6 │ 5/6 │
│ 最大码块 │ - │ 648/1296│ 648/1296│ 648/1296│ 648/ │
│ 长度 │ │ /1944 │ /1944 │ /1944 │ 1296 │
│ │ │ bits │ bits │ bits │ /1944│
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘
BCC (Binary Convolutional Code):
├─ 约束长度 K=7
├─ 码率可调 (通过打孔)
└─ Viterbi 解码
LDPC (Low Density Parity Check):
├─ 接近香农极限
├─ 迭代解码
└─ 高信噪比下性能优
|
3.2 Scrambler (扰码器)
3.2.1 扰码器原理
扰码器目的:
| 问题:
├─ 长串 0 或 1 导致接收端时钟恢复困难
├─ 频谱能量集中,不符合频谱模板
└─ DC 分量过大,影响交流耦合电路
解决方案:
├─ 使用伪随机序列与数据异或
├─ 使输出数据接近随机分布
└─ 频谱能量均匀分布
|
WiFi 扰码器多项式:
| 生成多项式:S(x) = x⁷ + x⁴ + 1
LFSR 结构:
┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐
│ D7│───►│ D6│───►│ D5│───►│ D4│───►│ D3│───►│ D2│───►│ D1│
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │ │ │ │
│ │ │ └───┐ │ │ │
│ │ │ │ │ │ │
│ │ │ ┌─────┴────┴────┐ │ │
│ │ │ │ XOR Gate │ │ │
│ │ │ └──────┬───────┘ │ │
│ │ │ │ │ │
│ │ │ ┌───────┐ │ │
│ │ └────────►│ XOR │◄──────┘ │
│ │ └───┬───┘ │
│ │ │ │
│ └──────────────────────┼────────────────────┘
│ │
│ ▼
│ 输出位
│
└──────────────────────────────┘
│
▼
反馈到 D7 输入
初始值:由 SERVICE 字段的 bits 0-6 指定 (非全 0)
|
3.2.2 Scrambler Verilog 实现
| module wifi_scrambler (
input wire clk,
input wire reset_n,
input wire data_in,
output reg data_out,
input wire enable,
input wire [6:0] init_value // 初始值 (SERVICE[6:0])
);
// 7 位 LFSR 寄存器
reg [6:0] lfsr;
// 扰码多项式:x^7 + x^4 + 1
// 反馈抽头:bit 6 和 bit 3 (对应 x^7 和 x^4)
wire feedback;
assign feedback = lfsr[6] ^ lfsr[3];
// LFSR 更新
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
lfsr <= init_value; // 使用传入的初始值
end else if (enable) begin
lfsr <= {lfsr[5:0], feedback}; // 左移,反馈到最低位
end
end
// 扰码输出:数据与 LFSR 最高位异或
always @(posedge clk) begin
if (enable) begin
data_out <= data_in ^ lfsr[6];
end
end
endmodule
// 解扰器 (与扰码器相同结构)
module wifi_descrambler (
input wire clk,
input wire reset_n,
input wire data_in,
output reg data_out,
input wire enable,
input wire [6:0] init_value
);
// 解扰器与扰码器结构完全相同
// 因为:(data ⊕ PN) ⊕ PN = data
wifi_scrambler u_descrambler (
.clk(clk),
.reset_n(reset_n),
.data_in(data_in),
.data_out(data_out),
.enable(enable),
.init_value(init_value)
);
endmodule
|
3.3 BCC 卷积码
3.3.1 卷积码原理
WiFi BCC 参数:
| ┌─────────────────────────────────────────────────────────┐
│ WiFi BCC 卷积码参数 │
├─────────────────────────────────────────────────────────┤
│ │
│ 约束长度:K = 7 │
│ 移位寄存器:6 级 (K-1) │
│ 生成多项式: │
│ ├─ G0 = 1 + D² + D³ + D⁵ + D⁶ (八进制:133) │
│ └─ G1 = 1 + D + D² + D³ + D⁶ (八进制:171) │
│ │
│ 码率: │
│ ├─ 基础码率:1/2 (每输入 1 bit,输出 2 bit) │
│ ├─ 打孔后码率:2/3, 3/4, 5/6 │
│ └─ 通过删除某些输出 bit 实现高码率 │
│ │
│ 编码器结构: │
│ │
│ 输入 ──► D ──► D ──► D ──► D ──► D ──► D │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ ⊕ │ ⊕ ⊕ │ ⊕ │
│ │ │ │ │ │ │ │
│ 输出 0 ◄─┘ │ │ │ │ │ │
│ │ │ │ │ │ │
│ ⊕ ⊕ ⊕ │ ⊕ │
│ │ │ │ │ │ │
│ 输出 1 ◄───────┘ │ │ │ │ │
│ │ │ │ │ │
│ └─────┴─────┴─────┘ │
│ │
└─────────────────────────────────────────────────────────┘
|
3.3.2 BCC 编码器 Verilog 实现
| module wifi_bcc_encoder (
input wire clk,
input wire reset_n,
input wire data_in,
output reg [1:0] code_out, // 2 bit 输出 (码率 1/2)
input wire enable,
input wire [1:0] puncture_ctrl // 打孔控制 (选择码率)
);
// 6 级移位寄存器 (K-1 = 6)
reg [5:0] shift_reg;
// 生成多项式 G0 = 133 (八进制) = 1011011 (二进制)
// 抽头位置:0, 2, 3, 5, 6
wire g0_out = shift_reg[5] ^ shift_reg[3] ^ shift_reg[2] ^ shift_reg[0] ^ data_in;
// 生成多项式 G1 = 171 (八进制) = 1111001 (二进制)
// 抽头位置:0, 1, 2, 3, 6
wire g1_out = shift_reg[5] ^ shift_reg[2] ^ shift_reg[1] ^ shift_reg[0] ^ data_in;
// 打孔模式 (实现不同码率)
// puncture_ctrl: 00=1/2, 01=2/3, 10=3/4, 11=5/6
reg [1:0] puncture_pattern [0:5];
always @(*) begin
case (puncture_ctrl)
2'b00: begin // 码率 1/2 (无打孔)
puncture_pattern[0] = 2'b11;
puncture_pattern[1] = 2'b11;
puncture_pattern[2] = 2'b11;
puncture_pattern[3] = 2'b11;
puncture_pattern[4] = 2'b11;
puncture_pattern[5] = 2'b11;
end
2'b01: begin // 码率 2/3
puncture_pattern[0] = 2'b11;
puncture_pattern[1] = 2'b10;
puncture_pattern[2] = 2'b11;
puncture_pattern[3] = 2'b10;
puncture_pattern[4] = 2'b11;
puncture_pattern[5] = 2'b10;
end
2'b10: begin // 码率 3/4
puncture_pattern[0] = 2'b11;
puncture_pattern[1] = 2'b00;
puncture_pattern[2] = 2'b11;
puncture_pattern[3] = 2'b10;
puncture_pattern[4] = 2'b11;
puncture_pattern[5] = 2'b00;
end
2'b11: begin // 码率 5/6
puncture_pattern[0] = 2'b11;
puncture_pattern[1] = 2'b00;
puncture_pattern[2] = 2'b10;
puncture_pattern[3] = 2'b00;
puncture_pattern[4] = 2'b11;
puncture_pattern[5] = 2'b00;
end
endcase
end
// 移位寄存器更新
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
shift_reg <= 6'b000000;
code_out <= 2'b00;
end else if (enable) begin
// 移位
shift_reg <= {shift_reg[4:0], data_in};
// 输出 (考虑打孔)
if (puncture_pattern[0][0])
code_out[0] <= g0_out;
if (puncture_pattern[0][1])
code_out[1] <= g1_out;
end
end
// 尾 bit (归零)
// 在帧结束时,输入 6 个 0 使编码器回到全 0 状态
endmodule
|
3.3.3 Viterbi 解码器
Viterbi 算法原理:
| ┌─────────────────────────────────────────────────────────┐
│ Viterbi 解码算法 │
├─────────────────────────────────────────────────────────┤
│ │
│ 最大似然序列估计 (MLSE) │
│ │
│ 核心思想: │
│ ├─ 构建 trellis 图 (状态转移图) │
│ ├─ 计算每条路径的路径度量 (与接收序列的距离) │
│ ├─ 在每个状态保留最优路径 (幸存路径) │
│ └─ 回溯得到最可能的发送序列 │
│ │
│ 算法步骤: │
│ │
│ 1. 初始化: │
│ ├─ 设置初始状态度量 (S0=0, 其他=∞) │
│ └─ 清空幸存路径存储器 │
│ │
│ 2. 迭代 (每个接收符号对): │
│ ├─ 计算分支度量 (接收符号与期望符号的欧氏距离) │
│ ├─ 更新路径度量 (累加分支度量) │
│ ├─ 比较进入同一状态的两条路径 │
│ └─ 保留度量较小的路径 (ACS 操作:Add-Compare-Select) │
│ │
│ 3. 回溯: │
│ ├─ 从最优状态回溯幸存路径 │
│ └─ 得到解码输出 │
│ │
│ WiFi BCC 状态数:2^(K-1) = 2^6 = 64 个状态 │
│ │
└─────────────────────────────────────────────────────────┘
|
Viterbi 解码器 Verilog 框架:
| module wifi_viterbi_decoder (
input wire clk,
input wire reset_n,
input wire signed [7:0] soft_in [0:1], // 软判决输入 (2 bit/symbol)
output reg data_out,
input wire enable,
input wire [1:0] code_rate // 码率控制
);
// 64 个状态的路径度量 (每个 10 bit)
reg [9:0] path_metric [0:63];
// 幸存路径存储器 (深度根据约束长度和回溯长度)
// 典型回溯长度:5 × K = 35
reg [63:0] survivor_path [0:34];
// 分支度量计算单元
wire [9:0] branch_metric [0:127]; // 64 状态 × 2 输入
// ACS (Add-Compare-Select) 单元
wire [9:0] new_metric [0:63];
wire [1:0] select [0:63];
// 分支度量计算 (欧氏距离)
// BM = (I - expected_I)² + (Q - expected_Q)²
genvar i;
generate
for (i = 0; i < 128; i = i + 1) begin
assign branch_metric[i] = calc_branch_metric(soft_in, i);
end
endgenerate
// ACS 操作
always @(posedge clk) begin
integer state;
for (state = 0; state < 64; state = state + 1) begin
// 计算进入该状态的两条路径的新度量
// 比较并选择较小的
// 更新幸存路径
// (详细实现需要大量逻辑,此处简化)
end
end
// 回溯单元
reg [5:0] best_state;
reg [34:0] decode_delay;
always @(posedge clk) begin
// 找到当前最优状态
// 回溯 35 步得到解码输出
// (详细实现略)
end
endmodule
|
3.4 LDPC 码
3.4.1 LDPC 码原理
低密度奇偶校验码 (LDPC):
| ┌─────────────────────────────────────────────────────────┐
│ LDPC 码基本原理 │
├─────────────────────────────────────────────────────────┤
│ │
│ LDPC 码特点: │
│ ├─ 接近香农极限的性能 │
│ ├─ 稀疏校验矩阵 (大部分元素为 0) │
│ ├─ 迭代解码 (置信传播) │
│ └─ 适合长码块 │
│ │
│ 校验矩阵 H 结构: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ H = [h_ij] M×N 矩阵 │ │
│ │ │ │
│ │ 其中: │ │
│ │ ├─ M: 校验位数 │ │
│ │ ├─ N: 码字长度 │ │
│ │ └─ 大部分 h_ij = 0 (稀疏) │ │
│ │ │ │
│ │ 例如 (6, 3) LDPC 码: │ │
│ │ ┌ ┐ │ │
│ │ │ 1 1 0 1 0 0 │ │ │ │
│ │ │ 1 0 1 0 1 0 │ H 矩阵 │ │ │
│ │ │ 0 1 1 0 0 1 │ │ │ │
│ │ └ ┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Tanner 图表示: │
│ │
│ 校验节点 (Check Nodes) │
│ C1 C2 C3 │
│ / | \ / | \ / | \ │
│ / | \ / | \ / | \ │
│ V1 V2 V3 V4 V5 V6 │
│ 变量节点 (Variable Nodes / Bit Nodes) │
│ │
│ 解码过程:消息在变量节点和校验节点间迭代传递 │
│ │
└─────────────────────────────────────────────────────────┘
|
3.4.2 WiFi LDPC 参数
| ┌─────────────────────────────────────────────────────────┐
│ WiFi LDPC 码参数 (802.11n/ac/ax) │
├─────────────────────────────────────────────────────────┤
│ │
│ 支持的码块长度: │
│ ├─ 648 bits (短码块) │
│ ├─ 1296 bits (中等码块) │
│ └─ 1944 bits (长码块) │
│ │
│ 支持的码率: │
│ ├─ 1/2, 2/3, 3/4, 5/6 │
│ └─ 通过校验矩阵扩展实现 │
│ │
│ 校验矩阵结构: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ H = [H1 | H2] │ │
│ │ ───────── │ │
│ │ H1: 信息位部分 (准循环结构) │ │
│ │ H2: 校验位部分 (双对角线结构) │ │
│ │ │ │
│ │ 准循环结构: │ │
│ │ └─ 由循环移位单位矩阵组成 │ │
│ │ 便于硬件并行实现 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 解码算法: │
│ ├─ 置信传播 (Belief Propagation, BP) │
│ ├─ 最小和 (Min-Sum) 近似 │
│ └─ 分层解码 (Layered Decoding) - 收敛更快 │
│ │
└─────────────────────────────────────────────────────────┘
|
3.4.3 LDPC 编码器结构
| // LDPC 编码器顶层模块
module wifi_ldpc_encoder (
input wire clk,
input wire reset_n,
input wire [1943:0] info_bits, // 信息位输入
output reg [2915:0] codeword, // 码字输出 (码率 2/3, 1944 长码)
input wire enable,
input wire [1:0] code_rate, // 码率选择
input wire [1:0] block_size // 码块大小选择
);
// 参数定义
localparam N_648 = 648;
localparam N_1296 = 1296;
localparam N_1944 = 1944;
// 校验矩阵存储 (准循环结构,只需存储移位值)
reg [7:0] shift_table [0:100]; // 简化示例
// 信息位到码字的映射
// c = [i | p], 其中 p = i × G (G 为生成矩阵)
// 准循环编码器
wire [971:0] parity_bits; // 校验位输出 (码率 2/3)
ldpc_quasi_cyclic_encoder u_qc_enc (
.clk(clk),
.reset_n(reset_n),
.info_bits(info_bits),
.parity_bits(parity_bits),
.enable(enable),
.code_rate(code_rate),
.block_size(block_size)
);
// 码字组装
always @(posedge clk) begin
if (enable) begin
codeword <= {parity_bits, info_bits}; // 系统码
end
end
endmodule
// 准循环 LDPC 编码子模块
module ldpc_quasi_cyclic_encoder (
input wire clk,
input wire reset_n,
input wire [1943:0] info_bits,
output reg [971:0] parity_bits,
input wire enable,
input wire [1:0] code_rate,
input wire [1:0] block_size
);
// 移位寄存器组 (用于准循环乘法)
reg [26:0] shift_regs [0:26]; // 27 个移位寄存器 (Z=27 for 1944)
// 准循环矩阵乘法
// p = i × H^T (模 2 加法)
// 详细实现需要大量逻辑,此处为框架
// 实际实现需要:
// 1. 根据 shift_table 配置循环移位
// 2. 并行计算多个校验方程
// 3. 累加得到校验位
endmodule
|
3.4.4 LDPC 解码器 (Min-Sum 算法)
| // LDPC 解码器 (分层 Min-Sum 算法)
module wifi_ldpc_decoder (
input wire clk,
input wire reset_n,
input wire signed [7:0] llr_in [0:1943], // 输入 LLR (对数似然比)
output reg [1943:0] decoded_bits,
input wire enable,
output reg decode_done,
input wire [1:0] code_rate,
input wire [1:0] block_size
);
// 变量节点消息存储
reg signed [7:0] q_memory [0:1943];
// 校验节点消息存储
reg signed [7:0] r_memory [0:971];
// 迭代计数
reg [3:0] iter_count;
localparam MAX_ITER = 10; // 最大迭代次数
// 校验和检查
wire syndrome_valid;
syndrome_checker u_checker (
.q_memory(q_memory),
.valid(syndrome_valid)
);
// 分层解码主状态机
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
iter_count <= 4'd0;
decode_done <= 1'b0;
end else if (enable) begin
if (iter_count < MAX_ITER) begin
// 分层处理
// 1. 变量节点更新
// 2. 校验节点更新 (Min-Sum)
// 3. 校验和检查
if (syndrome_valid) begin
decode_done <= 1'b1;
end else begin
iter_count <= iter_count + 1'b1;
end
end else begin
decode_done <= 1'b1; // 达到最大迭代次数
end
end
end
// Min-Sum 校验节点更新
// r = min(|q|) × sign(q)
function signed [7:0] min_sum;
input signed [7:0] q1;
input signed [7:0] q2;
begin
if ($abs(q1) < $abs(q2))
min_sum = {q1[7], $abs(q1)};
else
min_sum = {q2[7], $abs(q2)};
end
endfunction
endmodule
|
3.5 交织 (Interleaving)
3.5.1 交织原理
WiFi 交织目的:
| 问题:突发错误
├─ 深衰落可能连续影响多个子载波
├─ 超过编码器的纠错能力
└─ 导致解码失败
解决方案:交织
├─ 将相邻的编码 bit 分散到不同子载波
├─ 接收端去交织后,突发错误变为随机错误
└─ 编码器可有效纠正
|
WiFi 两步交织:
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 两步交织 │
├─────────────────────────────────────────────────────────┤
│ │
│ 第一步交织 (相邻 bit 分散到不同子载波): │
│ ──────────────────────────────────────── │
│ i = (N_CBPS / N_CBPSI) × (k mod N_CBPSI) + floor(k / N_CBPSI)│
│ │
│ 其中: │
│ ├─ k: 交织前索引 │
│ ├─ i: 第一步交织后索引 │
│ ├─ N_CBPS: 每 OFDM 符号编码 bit 数 │
│ └─ N_CBPSI: 每子载波编码 bit 数 (取决于调制) │
│ │
│ 第二步交织 (相邻 bit 交替映射到星座高低有效位): │
│ ──────────────────────────────────────── │
│ j = s × floor(i / s) + (i + floor(N_CBPS × i / N_CBPSI)) mod s│
│ │
│ 其中: │
│ ├─ i: 第一步交织后索引 │
│ ├─ j: 最终交织后索引 │
│ └─ s: 交织深度参数 (取决于调制和码率) │
│ │
│ 参数 s 的取值: │
│ ├─ BPSK: s = 1 │
│ ├─ QPSK: s = 2 │
│ ├─ 16-QAM: s = 4 │
│ ├─ 64-QAM: s = 8 │
│ ├─ 256-QAM: s = 12 │
│ └─ 1024-QAM: s = 16 │
│ │
└─────────────────────────────────────────────────────────┘
|
3.5.2 交织器 Verilog 实现
| module wifi_interleaver (
input wire clk,
input wire reset_n,
input wire [N_CBPS-1:0] encoded_bits,
output reg [N_CBPS-1:0] interleaved_bits,
input wire enable,
input wire [2:0] modulation // 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM
);
// 参数定义 (以 64-QAM, 码率 3/4, 20 MHz 为例)
localparam N_CBPS = 288; // 48 子载波 × 6 bit/子载波
localparam N_CBPSI = 6; // 64-QAM 每子载波 6 bit
// 交织深度参数 s
wire [3:0] s;
assign s = (modulation == 3'd0) ? 4'd1 :
(modulation == 3'd1) ? 4'd2 :
(modulation == 3'd2) ? 4'd4 :
(modulation == 3'd3) ? 4'd8 :
4'd12;
// 第一步交织
reg [N_CBPS-1:0] step1_out;
genvar k;
generate
for (k = 0; k < N_CBPS; k = k + 1) begin
wire [8:0] i_idx;
assign i_idx = ((N_CBPS / N_CBPSI) * (k % N_CBPSI)) + (k / N_CBPSI);
assign step1_out[i_idx] = encoded_bits[k];
end
endgenerate
// 第二步交织
genvar i;
generate
for (i = 0; i < N_CBPS; i = i + 1) begin
wire [8:0] j_idx;
assign j_idx = s * (i / s) + ((i + (N_CBPS * i / N_CBPSI)) % s);
assign interleaved_bits[j_idx] = step1_out[i];
end
endgenerate
endmodule
// 去交织器 (逆向操作)
module wifi_deinterleaver (
input wire clk,
input wire reset_n,
input wire [N_CBPS-1:0] deinterleaved_bits,
output reg [N_CBPS-1:0] output_bits,
input wire enable,
input wire [2:0] modulation
);
// 去交织是交织的逆过程
// 先反向第二步,再反向第一步
// (实现略,原理相同)
endmodule
|
3.6 编码性能对比
3.6.1 BER 性能
| ┌─────────────────────────────────────────────────────────┐
│ BCC vs LDPC BER 性能对比 (AWGN 信道) │
├─────────────────────────────────────────────────────────┤
│ │
│ BER = 10⁻⁵ 时所需的 Eb/N0 (dB): │
│ │
│ ┌────────────┬─────────┬─────────┬─────────┬─────────┐│
│ │ 调制编码 │ BCC │ LDPC │ 增益 │ 备注 ││
│ ├────────────┼─────────┼─────────┼─────────┼─────────┤│
│ │ BPSK 1/2 │ 4.5 dB │ 3.8 dB │ 0.7 dB │ ││
│ │ QPSK 1/2 │ 6.0 dB │ 5.2 dB │ 0.8 dB │ ││
│ │ 16-QAM 1/2│ 9.5 dB │ 8.5 dB │ 1.0 dB │ ││
│ │ 64-QAM 2/3│ 13.0 dB │ 11.5 dB │ 1.5 dB │ ││
│ │ 64-QAM 3/4 │ 14.5 dB │ 12.5 dB │ 2.0 dB │ ││
│ │256-QAM 3/4 │ 18.0 dB │ 15.5 dB │ 2.5 dB │ ││
│ │1024-QAM 3/4│ 22.0 dB │ 18.5 dB │ 3.5 dB │ ││
│ └────────────┴─────────┴─────────┴─────────┴─────────┘│
│ │
│ 结论: │
│ ├─ LDPC 在所有调制编码方案下均优于 BCC │
│ ├─ 高阶调制下增益更大 │
│ └─ 802.11n/ac/ax 推荐使用 LDPC │
│ │
└─────────────────────────────────────────────────────────┘
|
3.6.2 复杂度对比
| ┌─────────────────────────────────────────────────────────┐
│ BCC vs LDPC 复杂度对比 │
├─────────────────────────────────────────────────────────┤
│ │
│ 编码器复杂度: │
│ ├─ BCC: 低 (6 级移位寄存器 + 异或门) │
│ └─ LDPC: 中 (准循环矩阵乘法) │
│ │
│ 解码器复杂度: │
│ ├─ BCC: 中 (64 状态 Viterbi 解码) │
│ └─ LDPC: 高 (迭代解码,10 次迭代) │
│ │
│ 解码延迟: │
│ ├─ BCC: 低 (固定延迟,约 5×K 符号) │
│ └─ LDPC: 高 (取决于迭代次数) │
│ │
│ 功耗: │
│ ├─ BCC: 低 │
│ └─ LDPC: 高 (迭代计算) │
│ │
│ 适用场景: │
│ ├─ BCC: 低功耗、低延迟应用 │
│ └─ LDPC: 高吞吐、高性能应用 │
│ │
└─────────────────────────────────────────────────────────┘
|
3.7 本章小结
本章深入讲解了 WiFi 编码解码的核心技术:
- Scrambler:PN 序列异或,频谱均匀化
- BCC 卷积码:K=7 约束长度,Viterbi 解码
- LDPC 码:准循环结构,Min-Sum 迭代解码
- 交织:两步交织,分散突发错误
- 性能对比:BCC vs LDPC 的 BER 和复杂度
下一章将讲解调制解调技术的详细实现。
上一章:02-物理层详解
下一章:04-调制解调技术