?? ctcencoder.m
字號:
function CtcCode=CtcEncoder(data,index)%編碼器第二次編碼初始狀態查找表,第一維:8種終止狀態,第二維:編碼器的三個寄存器的初始值,第三維:碼塊長度leng/2再模7的值LookUpTable=zeros(8,3,6);LookUpTable(:,:,1)=[0 0 0;1 1 0;1 0 0;0 1 0;1 1 1;0 0 1;0 1 1;1 0 1];LookUpTable(:,:,2)=[0 0 0;0 1 1;1 1 1;1 0 0;1 0 1;1 1 0;0 1 0;0 0 1];LookUpTable(:,:,3)=[0 0 0;1 0 1;0 1 1;1 1 0;0 1 0;1 1 1;0 0 1;1 0 0];LookUpTable(:,:,4)=[0 0 0;1 0 0;0 0 1;1 0 1;1 1 0;0 1 0;1 1 1;0 1 1];LookUpTable(:,:,5)=[0 0 0;0 1 0;1 0 1;1 1 1;0 0 1;0 1 1;1 0 0;1 1 0];LookUpTable(:,:,6)=[0 0 0;1 1 1;1 1 0;0 0 1;0 1 1;1 0 0;1 0 1;0 1 0];leng=length(data);%CtcCode存放編碼結果if index==1|index==4 CtcCode=zeros(1,leng*2);elseif index==2|index==6 CtcCode=zeros(1,leng*3/2);else CtcCode=zeros(1,leng*4/3);endCtcCode(1:leng)=data(:);%交織alpha=CtcInterleaver(data);CtcInterleaved=data(alpha);%第一次編碼InitialState=[0 0 0];[code1,FinalState]=ctcenc(data,InitialState);%計算終止狀態值count=FinalState(1)*4+FinalState(2)*2+FinalState(3);%查表得第二次編碼的初始狀態值FinalState=LookUpTable(count+1,:,mod(leng/2,7));% FinalState%第二次編碼[code1,FinalState]=ctcenc(data,FinalState);%交織序列第一次編碼[code2,FinalState]=ctcenc(CtcInterleaved,InitialState);count=FinalState(1)*4+FinalState(2)*2+FinalState(3);FinalState=LookUpTable(count+1,:,mod(leng/2,7));% FinalState%交織序列第二次編碼[code2,FinalState]=ctcenc(CtcInterleaved,FinalState);%puncturingif index==1|index==4 CtcCode(leng+1:leng+leng/2)=code1(:); CtcCode(leng+leng/2+1:end)=code2(:);elseif index==2|index==6 %r=2/3 CtcCode(leng+1:leng+leng/4)=code1(1:2:end); CtcCode(leng+leng/4+1:end)=code2(1:2:end);else %r=3/4 CtcCode(leng+1:leng+leng/6)=code1(1:3:end); CtcCode(leng+leng/6+1:end)=code2(1:3:end);end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -