✅作者简介:热爱科研的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].