?? cnv_encd.m
字號:
%cnv_encd.m
%卷積碼編碼程序
function output=cnv_encd(G,k0,input)
%cnv_encd(G,k0,input),k0是每一時鐘周期輸入編碼器的bit數,
%G是決定輸入序列的生成矩陣,它有n0行L*k0列n0是輸出bit數,
%參數n0和L由生成矩陣G導出,L是約束長度。L之所以叫約束長度
%是因為編碼器在每一時刻里輸出序列不但與當前輸入序列有關,
%而且還與編碼器的狀態有關,這個狀態是由編碼器的前(L-1)k0。
%個輸入決定的,通常卷積碼表示為(n0,k0,m),m=(L-1)*k0是編碼
%器中的編碼存貯個數,也就是分為L-1段,每段k0個
%有些人將m=L*k0定義為約束長度,有的人定義為m=(L-1)*k0
%查看是否需要補0,輸入input必須是k0的整數部
if rem(length(input),k0)>0
input=[input,zeros(size(1:k0-rem(length(input),k0)))];
end
n=length(input)/k0;
%檢查生成矩陣G的維數是否和k0一致
if rem(size(G,2),k0)>0
error('Error,G is not of the right size.')
end
%得到約束長度L和輸出比特數n0
L=size(G,2)/k0;
n0=size(G,1);
%在信息前后加0,使存貯器歸0,加0個數為(L-1)*k0個
u=[zeros(size(1:(L-1)*k0)),input,zeros(size(1:(L-1)*k0))];
%得到uu矩陣,它的各列是編碼器各個存貯器在各時鐘周期的內容
u1=u(L*k0:-1:1);
%將加0后的輸入序列按每組L*k0個分組,分組是按k0比特增加
%從1到L*k0比特為第一組,從1+k0到L*k0+k0為第二組,。。。。,
%并將分組按倒序排列。
for i=1:n+L-2
u1=[u1,u((i+L)*k0:-1:i*k0+1)];
end
uu=reshape(u1,L*k0,n+L-1);
%得到輸出,輸出由生成矩陣G*uu得到
output=reshape(rem(G*uu,2),1,n0*(L+n-1));
%************************end of file***********************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -