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

简介: 【编码译码】基于 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电子书和数学建模资料



相关文章
|
23天前
|
机器学习/深度学习
信道编码译码及MATLAB仿真(三)
信道编码译码及MATLAB仿真
28 3
|
23天前
|
算法
信道编码译码及MATLAB仿真(二)
信道编码译码及MATLAB仿真
25 3
|
2月前
|
编解码 算法
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
20 0
|
17天前
|
存储 人工智能 机器人
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
|
2月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
30 2
|
2月前
|
算法
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
38 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
|
3月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
3月前
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
|
3月前
【数值分析】二分法求方程的根(附matlab代码)
【数值分析】二分法求方程的根(附matlab代码)

热门文章

最新文章