【编码译码】基于 SC SCL BP SCAN和SSC译码附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

SC、SCL、BP、SCAN和SSC是信道编码技术中常见的方法,用来提高信号的可靠性和抗干扰能力。而译码则是对编码后的信号进行解码还原为原始数据的过程。

简单来说,SC是一种串行级联编码方式,能够提高信号的纠错能力;SCL是在SC的基础上加入了级联结构,进一步提高了可靠性;BP是一种前向纠错编码,通过添加冗余信息来提高信号的可靠性;SCAN是一种分块环形编码,适用于连续的数据流传输;SSC是一种交织编码技术,通过交错数据来增加信号的抗干扰能力。

至于译码,通常需要根据编码方式的不同,采用相应的解码算法,比如海明码、卷积码译码等。译码的目的是将经过编码后的信号还原为原始数据,以便进行后续的处理和传输。

⛄ 部分代码

function [decoder_tree_initial, G, B] = intial_tree_G(N,FZlookup)

%函数用于生成译码树结构,以及SSC译码时将用到的G矩阵,和B_N矩阵

%函数在确定采用SSC译码器时调用;

%=============初始化树=================

n=log2(N);

node = cell(1,7);

%node{1} = node_type;节点类型,表示0节点1节点及混合节点,分别用0 1 -1表示

%node{2} = L; 数组,表示L数组

%node{3} = B; 数组,表示B数组

%node{4} = left_node; int型,存放节点索引

%node{5} = right_node; int型,存放节点索引

%node{6} = parent_node; int型,存放节点索引

%node{7} = state ;

%int型,表示当前节点的激活状态,0表示向左走,在1的情况下,判断所有子节点是否为2,若是,则向上走,若不是,向右走, 2表示向上走

%没有父节点或者子节点用-1表示

node_type = -1;

node_num = 2^(n+1)-1;

decoder_tree_initial = cell(1,node_num);

for layer_index = n:-1:0

    for node_index = 2^layer_index:2^(layer_index+1)-1

        if layer_index == n

            node = { -FZlookup(node_index-2^layer_index+1), zeros(1,2^(n-layer_index)), zeros(1,2^(n-layer_index)), -1, -1, floor(node_index/2),0 };   

        elseif layer_index == 0

            if decoder_tree_initial{node_index*2}{1}==0 && decoder_tree_initial{node_index*2+1}{1}==0

                node_type = 0;

            elseif decoder_tree_initial{node_index*2}{1}==1 && decoder_tree_initial{node_index*2+1}{1}==1

                node_type = 1;

            else

                node_type = -1;

            end

             node = {node_type, zeros(1,2^(n-layer_index)), zeros(1,2^(n-layer_index)), node_index*2, node_index*2+1, -1, 0};

        else

            %判断左右子节点是否都是0节点或者是否都是1节点

            if decoder_tree_initial{node_index*2}{1}==0 && decoder_tree_initial{node_index*2+1}{1}==0

                node_type = 0;

            elseif decoder_tree_initial{node_index*2}{1}==1 && decoder_tree_initial{node_index*2+1}{1}==1

                node_type = 1;

            else

                node_type = -1;

            end

            node = {node_type, zeros(1,2^(n-layer_index)), zeros(1,2^(n-layer_index)), node_index*2, node_index*2+1, floor(node_index/2),0};       

        end

        decoder_tree_initial{node_index} = node;

    end

end

%=============初始化树完毕=================

%=============精简树开始==================

%经验证算法复杂度减少( 300.64 -  74.57 )/300.64 = 75.2%

%算法步骤:

%从根节点开始,遍历节点,判断类型,如果节点为0节点或者为1节点,则置节点为叶节点

%相当于把树枝砍断

for ii = 1:node_num

    if decoder_tree_initial{ii}{1} == 0 || decoder_tree_initial{ii}{1} == 1

        decoder_tree_initial{ii}{4} = -1;

        decoder_tree_initial{ii}{5} = -1;

    end

end

%=============精简树完毕==================

%============预存G_n~G_1=================

%G{1}表示layer=0-->G{n}表示layer=n-1 G{n+1}表示layer = n

%预存bitreversedindices B{1}表示layer=0的bitreversedindices-->B{n}表示layer=n-1

F = [1 0; 1 1];

GG = 1;

G = cell(1,n+1);

B = cell(1,n+1);

for ii = 1:n

    GG =kron(GG,F);

    bitreversedindices = zeros(1,2^ii);

    for index = 1 : 2^ii

        bitreversedindices(index) = bin2dec(wrev(dec2bin(index-1,ii)));

    end

    B{n-ii+1} = bitreversedindices;

    G{n-ii+1} = GG;

end

G{n+1} =1;

B{n+1} = 0;

end

⛄ 运行结果

⛄ 参考文献

[1] 邢超.低复杂度的极化码译码算法研究[D].南京邮电大学,2020.

[2] 任跃.Polar码编译码算法的硬件架构设计及其仿真验证[D].电子科技大学[2023-06-10].

[3] 邢超.低复杂度的极化码译码算法研究[D].南京邮电大学[2023-06-10].

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值