通信链路:信源产生随机比特,经过LDPC编码、QPSK调制,通过AWGN信道传输,再经QPSK解调(软输出)和LDPC译码,最终恢复信息比特。
系统模型
1. 信源
- 产生长度为
的随机信息比特向量 。
2. LDPC编码
- 使用一个
LDPC 码,生成矩阵 (或校验矩阵 。 - 编码:
,得到码字 。 - 编码效率 (
)。
3. QPSK调制(格雷映射)
-
将码字比特流按每两个比特分组:
,映射为复符号 。 -
映射规则(能量归一化):
-
每个符号能量
。
4. AWGN信道
-
接收信号:
,
其中, ,且 。 -
定义
(每比特信噪比)与 的关系: 对于 QPSK,
, ,故 -
噪声方差:
(因为
)。
5. QPSK解调(软判决,计算LLR)
-
对于接收符号
,计算两个比特的对数似然比(LLR):
其中
,且 。 -
注意:上述公式适用于等概、格雷映射且星座点幅度为
的情况。若使用其他归一化,需调整系数。 -
将所有符号对应的 LLR 按顺序组成序列
,作为译码器输入。
6. LDPC译码(置信传播)
- 使用 LLR 作为变量节点的初始消息。
- 沿 Tanner 图迭代传递消息,更新变量节点和校验节点的信息。
- 常用算法:和积算法(SPA)或最小和算法(
)。 - 译码输出为估计的比特序列
,再提取信息比特 。
7. 性能指标
- 误比特率(BER):比较
与 。 - 误帧率(FER):整个帧错误的概率。
仿真步骤(MATLAB示例)
% 参数设置
k = 648; % 信息比特长度(例如IEEE 802.11n)
n = 1296; % 码字长度
R = k/n; % 编码效率
EbN0_dB = 2; % Eb/N0 (dB)
M = 4; % QPSK
% 1. 生成随机信息比特
u = randi([0,1], 1, k);
% 2. LDPC编码(需要LDPC矩阵,此处简化,假设有编码函数)
% 例如使用Communications Toolbox的ldpcEncoder
% 这里用随机矩阵示意,实际应使用结构化矩阵
H = dvbs2ldpc(R); % 例如DVB-S2标准矩阵
enc = comm.LDPCEncoder(H);
c = enc(u.').'; % 编码,得到1×n的码字
% 3. QPSK调制
c_reshape = reshape(c, 2, []); % 每列两个比特
sym = (1/sqrt(2)) * ( (2*c_reshape(1,:)-1) + 1j*(2*c_reshape(2,:)-1) );
% 4. AWGN信道
EbN0 = 10^(EbN0_dB/10);
EsN0 = 2*R*EbN0; % 因为QPSK每符号2个比特,且编码效率R
sigma2 = 1/(2*EsN0); % 噪声方差,Es=1
sigma = sqrt(sigma2);
noise = sigma*(randn(size(sym)) + 1j*randn(size(sym)));
r = sym + noise;
% 5. QPSK解调(软判决,计算LLR)
LLR0 = (2/sigma2) * real(r); % 对应第一个比特
LLR1 = (2/sigma2) * imag(r); % 对应第二个比特
% 合并LLR,注意顺序与编码时一致
LLR = zeros(1, n);
LLR(1:2:end) = LLR0;
LLR(2:2:end) = LLR1;
% 6. LDPC译码
dec = comm.LDPCDecoder(H);
decodedBits = dec(LLR.').'; % 译码,得到估计的信息比特
% 7. 计算误比特数
numErr = sum(u ~= decodedBits);
BER = numErr / k;
disp(['BER = ', num2str(BER)]);
参考代码 通过AWGN信道发送LDPC编码的QPSK调制比特流 www.youwenfan.com/contentcsm/83310.html
关键公式总结
-
编码效率:
。 -
QPSK符号能量:
(归一化)。 -
噪声方差:
。 -
LLR计算(对于等概格雷映射QPSK):
-
信噪比转换:
注意事项
- 实际LDPC码需指定校验矩阵
,并确保编码方法(如通过生成矩阵或直接编码算法)。 - 译码算法可选择不同的迭代次数和调度方式。
- 性能曲线需通过蒙特卡洛仿真,在不同 (
) 下统计 。