📄 viterbidecoder.m
字号:
function [LLR,dec_outbits ] =ViterbiDecoder(Pn,rx_bits)%Viterbi译码器,递归卷积码global state_num;global memory_len;global state_inbits;global state_outbits1;global state_outbits2;global alpha;%状态度量global gama; %幸存路径L=length(rx_bits);LLR=zeros(1,L-memory_len);dec_outbits=zeros(1,L-memory_len);alpha=zeros(L+1,state_num);gama=zeros(L,state_num,state_num);%初始化alpha和betaalpha(1,1) =1;%计算alpha值for k=2:L+1 for s2=0:state_num-1; metric=zeros(1,2); state=zeros(1,2); index=0; for s1=0:state_num-1 if alpha(k-1,s1+1)==0 continue; end if state_inbits(s1+1,s2+1)~=0 index=index+1; metric(index)=rx_bits(k-1,1)*state_outbits1(s1+1,s2+1)+rx_bits(k-1,2)*state_outbits2(s1+1,s2+1)+alpha(k-1,s1+1); %metric(index)=(rx_bits(k-1,1)-state_outbits1(s1+1,s2+1))^2+(rx_bits(k-1,2)-state_outbits2(s1+1,s2+1))^2; state(index)=s1; end end if index~=0 [ma,index]=max(metric); alpha(k,s2+1)=ma; gama(k-1,state(index)+1,s2+1)=1; end endend%计算LLRs2=0;for k=L:-1:1 for s1=0:state_num-1 if gama(k,s1+1,s2+1)==1 if k<=L-memory_len dec_outbits(k)=(state_inbits(s1+1,s2+1)+1)/2; LLR(k)=alpha(k+1,s2+1)-alpha(k,s1+1);%计算软输出 end s2=s1;%更新状态 break; end endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -