通过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

关键公式总结

  1. 编码效率\(R = k/n\)

  2. QPSK符号能量\(E_s = 1\)(归一化)。

  3. 噪声方差\(\sigma^2 = N_0/2 = 1/(4R (E_b/N_0))\)

  4. LLR计算(对于等概格雷映射QPSK):

    \(LLR(b_0) = \frac{2}{\sigma^2} r_I, \quad LLR(b_1) = \frac{2}{\sigma^2} r_Q.\)

  5. 信噪比转换

    \(\frac{E_s}{N_0} = 2R \cdot \frac{E_b}{N_0}.\)


注意事项

  • 实际LDPC码需指定校验矩阵 \(\mathbf{H}\),并确保编码方法(如通过生成矩阵或直接编码算法)。
  • 译码算法可选择不同的迭代次数和调度方式。
  • 性能曲线需通过蒙特卡洛仿真,在不同 (\(E_b/N_0\)) 下统计\(BER/FER\)
posted @ 2025-12-09 16:55  别说我的眼泪有点咸  阅读(1)  评论(0)    收藏  举报