資源簡介
本人寫的polar碼SC譯碼算法matlab程序,更多有關polar的資料請關注我的博客
代碼片段和文件信息
function?u=decode(ypolar)
info_position=polar.info_position;
len=polar.code_length;
stage=log2(len);
parm=polar.parm;
F_k=polar.F_k;
sigma=polar.sigma;
h_value=zeros(1len);
%初始化參數
Ly=(2*y)/sigma;
stage_idx=1;
u_b=zeros(1len);
idx=0;
seek_idx=ones(1stage);
%先計算124?f_nodes
????for?stage_idx=1:stage
????????if?stage_idx==1%第一層
????????????for?j=1:len/(2^stage_idx)
????????????????f_value(jstage_idx)=f_node(Ly(j)Ly(j+len/(2^stage_idx)));
????????????end
????????????stage_idx=stage_idx+1;
????????elseif?stage_idx==stage
????????????for?j=1:len/(2^stage_idx)
????????????????f_value(jstage_idx)=f_node(f_value(jstage_idx-1)f_value(j+len/(2^stage_idx)stage_idx-1));
????????????end
????????else
????????????for?j=1:len/(2^stage_idx)
????????????????f_value(jstage_idx)=f_node(f_value(jstage_idx-1)f_value(j+len/(2^stage_idx)stage_idx-1));
????????????end
????????????stage_idx=stage_idx+1;
????????end
????end
????
????%接下來計算u_b
????while?idx ????????if?stage_idx==stage?%最后一層
????????????idx=idx+1;
????????????h_value(idx)=f_value(1stage_idx);
????????????if?info_position(idx)==0%固定bit
????????????????u_b(idx)=0;
????????????else
????????????????u_b(idx)=(sign(-h_value(idx))+1)/2;%‘<0‘--->1
????????????end
????????????idx=idx+1;%根據idx判斷
????????????if?mod(idx+24)==0
????????????????g_value(1stage_idx)=g_node(f_value(1stage_idx-1)f_value(2stage_idx-1)u_b(idx-1));
????????????end
????????????
????????????if?mod(idx4)==0
????????????????g_value(1stage_idx)=g_node(g_value(1stage_idx-1)g_value(2stage_idx-1)u_b(idx-1));
????????????end
????????????
????????????h_value(idx)=g_value(1stage_idx);
????????????
????????????if?info_position(idx)==0%固定bit
????????????????u_b(idx)=0;
????????????else
????????????????u_b(idx)=(sign(-h_value(idx))+1)/2;
????????????end
????????????
????????????%stage跳轉g_node才會跳轉,并且會跳到第一層
????????????stage_idx=stage_idx-parm(idx/2);
????????????if?stage_idx>0
????????????????seek_idx(stage_idx)=seek_idx(stage_idx)+1;
????????????end
????????elseif?stage_idx==1?%在第一層,根據parm,計算G_bit反饋與編碼結構類似
????????????G(1:2^(parm(idx/2))stage_idx)=u_b(idx-2^(parm(idx/2))+1:idx)*F_k(1:2^(parm(idx/2))1:2^(parm(idx/2)));
????????????for?ii=1:2^(parm(idx/2))
????????????????if?mod(G(iistage_idx)2)==0
????????????????????G_bit(iistage_idx)=0;
????????????????else
????????????????????G_bit(iistage_idx)=1;
????????????????end
????????????end
????????????
????????????for?i=1:len/(2^(stage_idx))
????????????????g_value(istage_idx)=g_node(Ly(i)Ly(i+len/(2^(stage_idx)))G_bit(istage_idx));
????????????end
????????????stage_idx=stage_idx+1;
????????????seek_idx(stage_idx)=seek_idx(stage_idx)+1;
????????else?%中間的層判斷是第幾次跳轉
????????????
????????????if?mod(seek_idx(stage_idx)2)==0
????????????????G(1:2^(parm(idx/2))stage_idx)=u_b(idx-2^(parm(idx/2))+1:idx)*F_k(1:2^(parm(idx/2))1:2^(parm(idx/2)));
????????????????for?ii=1:2^(parm(idx/2))
??????
- 上一篇:粒子群優化的支持向量機matlab源代碼
- 下一篇:matlab運動目標追蹤
評論
共有 條評論