通过AWGN信道发送LDPC编码的QPSK调制比特流
通信链路:信源产生随机比特,经过LDPC编码、QPSK调制,通过AWGN信道传输,再经QPSK解调(软输出)和LDPC译码,最终恢复信息比特。
系统模型
1. 信源
- 产生长度为 \(k\) 的随机信息比特向量 \(\mathbf{u} \in \{0,1\}^k\)。
2. LDPC编码
- 使用一个 \((n, k)\) LDPC 码,生成矩阵 \(\mathbf{G}_{k \times n}\)(或校验矩阵 \(\mathbf{H}_{(n-k)\times n}\)。
- 编码:\(\mathbf{c} = \mathbf{u} \mathbf{G} \pmod{2}\),得到码字 \(\mathbf{c} \in \{0,1\}^n\)。
- 编码效率 (\(R = k/n\))。
3. QPSK调制(格雷映射)
-
将码字比特流按每两个比特分组:\(c_{2i}, c_{2i+1}\),映射为复符号 \(s[i]\)。
-
映射规则(能量归一化):
\(s[i] = \frac{1}{\sqrt{2}} \left[ (2c_{2i}-1) + j(2c_{2i+1}-1) \right]\)
-
每个符号能量 \(E_s = 1\)。
4. AWGN信道
-
接收信号:\(r[i] = s[i] + n[i]\),
其中 \(n[i] = n_I[i] + j n_Q[i]\),\(n_I, n_Q \sim \mathcal{N}(0, \sigma^2)\),且 \(\sigma^2 = N_0/2\)。 -
定义 \(E_b/N_0\)(每比特信噪比)与 \(E_s/N_0\) 的关系:
\(\frac{E_s}{N_0} = R \cdot \log_2(M) \cdot \frac{E_b}{N_0}\)
对于 QPSK,\(M=4\),\(\log_2(M)=2\),故
\(\frac{E_s}{N_0} = 2R \cdot \frac{E_b}{N_0}\)
-
噪声方差:
\(\sigma^2 = \frac{N_0}{2} = \frac{1}{2} \cdot \frac{E_s}{(E_s/N_0)} = \frac{1}{2} \cdot \frac{1}{2R (E_b/N_0)} = \frac{1}{4R (E_b/N_0)}\)
(因为 \(E_s=1\))。
5. QPSK解调(软判决,计算LLR)
-
对于接收符号 \(r = r_I + j r_Q\),计算两个比特的对数似然比(LLR):
\(LLR(b_0) = \frac{2\sqrt{E_s}}{\sigma^2} r_I = \frac{2}{\sigma^2} r_I\)
\(LLR(b_1) = \frac{2\sqrt{E_s}}{\sigma^2} r_Q = \frac{2}{\sigma^2} r_Q\)其中 \(E_s=1\),且 \(\sigma^2 = N_0/2\)。
-
注意:上述公式适用于等概、格雷映射且星座点幅度为 \(1/\sqrt{2}\) 的情况。若使用其他归一化,需调整系数。
-
将所有符号对应的 LLR 按顺序组成序列 \(\mathbf{L} \in \mathbb{R}^n\),作为译码器输入。
6. LDPC译码(置信传播)
- 使用 LLR 作为变量节点的初始消息。
- 沿 Tanner 图迭代传递消息,更新变量节点和校验节点的信息。
- 常用算法:和积算法(SPA)或最小和算法(\(Min-Sum\))。
- 译码输出为估计的比特序列 \(\hat{\mathbf{c}}\),再提取信息比特 \(\hat{\mathbf{u}}\)。
7. 性能指标
- 误比特率(BER):比较 \(\hat{\mathbf{u}}\) 与 \(\mathbf{u}\)。
- 误帧率(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/contentcnn/83310.html
关键公式总结
-
编码效率:\(R = k/n\)。
-
QPSK符号能量:\(E_s = 1\)(归一化)。
-
噪声方差:\(\sigma^2 = N_0/2 = 1/(4R (E_b/N_0))\)。
-
LLR计算(对于等概格雷映射QPSK):
\(LLR(b_0) = \frac{2}{\sigma^2} r_I, \quad LLR(b_1) = \frac{2}{\sigma^2} r_Q.\)
-
信噪比转换:
\(\frac{E_s}{N_0} = 2R \cdot \frac{E_b}{N_0}.\)
注意事项
- 实际LDPC码需指定校验矩阵 \(\mathbf{H}\),并确保编码方法(如通过生成矩阵或直接编码算法)。
- 译码算法可选择不同的迭代次数和调度方式。
- 性能曲线需通过蒙特卡洛仿真,在不同 (\(E_b/N_0\)) 下统计\(BER/FER\)。
浙公网安备 33010602011771号