QC-LDPC编译码的误码率matlab仿真

目录

一、QC-LDPC码的基本原理

二、QC-LDPC码的编码过程

三、QC-LDPC码的解码过程

四、QC-LDPC码的数学公式

4.1校验矩阵H的构造

4.2生成矩阵G的构造

4.3 编码过程

4.4 解码过程

五、MATLAB核心程序

六、仿真结果


       QC-LDPC(Quasi-Cyclic Low-Density Parity-Check)编译码是一种前向纠错编码技术,广泛应用于无线通信、数字视频和存储系统等领域。QC-LDPC码具有优异的纠错性能和较低的编解码复杂度,成为现代通信系统中重要的编码方案之一。

一、QC-LDPC码的基本原理

       QC-LDPC码是一种基于低密度奇偶校验码(LDPC,Low-Density Parity-Check)的变种。LDPC码是一种线性分组码,通过构造一个稀疏的校验矩阵来定义。QC-LDPC码在LDPC码的基础上,采用了循环移位(Cyclic Shifting)的方法,使得编码和解码过程更加高效。

       在QC-LDPC码中,校验矩阵H被分成多个子矩阵,每个子矩阵都是一个循环移位矩阵。循环移位矩阵是指通过对单位矩阵进行循环移位操作得到的矩阵。通过选择合适的循环移位参数,可以构造出具有优良纠错性能的QC-LDPC码。

二、QC-LDPC码的编码过程

QC-LDPC码的编码过程主要包括以下步骤:

  1. 生成校验矩阵H:根据所选的码率和码长,构造一个合适的校验矩阵H。H矩阵由多个循环移位矩阵组成。
  2. 生成生成矩阵G:通过高斯消元法,将校验矩阵H转化为等价的标准形式,得到生成矩阵G。G矩阵的每一行对应一个信息位,每一列对应一个编码后的码字位。
  3. 编码:将待传输的信息序列s乘以生成矩阵G,得到编码后的序列c。即:c = s × G。

三、QC-LDPC码的解码过程

       QC-LDPC码的解码过程主要采用置信传播(Belief Propagation)算法,也称为和积算法(Sum-Product Algorithm)。置信传播算法是一种迭代解码算法,通过在变量节点和校验节点之间传递消息来更新每个比特位的置信度,最终得到解码结果。

置信传播算法的主要步骤如下:

  1. 初始化:将接收到的码字序列y作为初始的消息传递给变量节点。
  2. 变量节点更新:每个变量节点接收到与其相连的所有校验节点的消息,并根据这些消息更新自己的置信度。置信度的更新采用概率乘积规则。
  3. 校验节点更新:每个校验节点接收到与其相连的所有变量节点的消息,并根据这些消息更新自己的置信度。置信度的更新采用概率求和规则。
  4. 判决:经过一定次数的迭代后,每个变量节点的置信度将趋于稳定。根据每个变量节点的置信度进行判决,得到解码后的信息序列s'。
  5. 终止条件:解码过程可以在满足一定条件时终止,例如达到最大迭代次数或者解码结果满足一定的可靠性要求。

四、QC-LDPC码的数学公式

4.1校验矩阵H的构造
 

QC-LDPC码的校验矩阵H可以表示为多个循环移位矩阵的拼接:

H = [P^(0) × H^(0) | P^(1) × H^(1) | ... | P^(L-1) × H^(L-1)]

其中,P^(i)表示循环移位矩阵,H^(i)表示基本子矩阵。L表示子矩阵的个数。

4.2生成矩阵G的构造
 

通过高斯消元法将校验矩阵H转化为标准形式,得到生成矩阵G。G可以表示为:

G = [I | P]

其中,I表示单位矩阵,P表示校验矩阵H的某种等价形式。

4.3 编码过程
 

编码后的序列c可以表示为:

c = s × G

其中,s表示待传输的信息序列,G表示生成矩阵。

4.4 解码过程
 

置信传播算法的主要公式包括变量节点更新的公式和校验节点更新的公式。具体公式如下:

变量节点更新:
m^(v→c)(x) = ∏_(c'∈N(v)\c) m^(c'→v)(x) × p(y_v | x)

       其中,m^(v→c)(x)表示从变量节点v传递到校验节点c的消息,N(v)\c表示与变量节点v相连的所有校验节点集合中除去c的节点集合,m^(c'→v)(x)表示从校验节点c'传递到变量节点v的消息,p(y_v | x)表示接收到的码字序列y中第v个比特位的概率分布。

五、MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath 'func\'


%%
%参数的初始化
q     = 173;
M     = 5*q; %矩阵行数
N     = 10*q;%矩阵列数
a     = 2;
b     = 7;
R     = 0.5;

%QC构造稀疏矩阵
H         = func_QC_H(a,b,q,M,N);
%将系数矩阵转换为生成矩阵
[G,valid] = func_H2G(H);
[N1,N2]   = size(G);
%仿真信噪比
EbN0      = [0:0.5:2];
NUMS      = [6000,4000,3500,2000,200];


for i = 1 : length(EbN0)
    Num_err = 0;
    tmps    = 10^(EbN0(i)/10);
    sigma   = 1/sqrt(tmps);
    indx    = 0;
    while(Num_err <= NUMS(i))
        EbN0(i)
        Num_err
        indx = indx+1;
        %产生随机数据作为测试数据
        x = (sign(randn(1,size(G,1)))+1)/2;
        %LDPC编码
        y = mod(x*G,2);
        %BPSK映射
        z = 2*y-1;
        %加入噪声
        z = awgn(z,EbN0(i),'measured');
        %LDPC译码
        z_hat = func_Ldpc_dec(z,sigma,H);
        x_hat = z_hat(M+1:N);
        x_hat1= x_hat';
        %误码率统计
        Num_err = Num_err + sum(xor(x,x_hat1));
    end
    BER1(i) = Num_err/(indx*length(x));
end

figure;
semilogy(EbN0,BER1,'b-o');
grid on
xlabel('Eb/N0(db)');
ylabel('BER');
legend('QC-LDPC');
up2238
save QC.mat EbN0 BER1         

六、仿真结果

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值