?? viterbi_encoder.m
字號:
function [channel_input]=viterbi_encoder(G,k,coder_input)
channel_input=[];
n=size(G,1); % G的行數對應n路輸出
G_2=size(G,2); % G的列數對應總的寄存器的個數
if rem(size(G,2),k)~=0 % 總的寄存器的個數應為k的整數倍
error('Size of G and k do not agree')
end
if rem(size(coder_input,2),k)~=0 % 輸入的符號數應為k的整數倍
error('Size of Input and k do not agree')
end
depth_of_input=length(coder_input)/k; % 每路輸入中的寄存器的個數
for i=1:size(G,2)/k-1 % 輸入序列尚未充滿所有的寄存器
input_matrix=[coder_input(i*k:-1:1),zeros(1,size(G,2)-i*k)]; % 參與編碼運算的序列,后面的部分補零
gg_out=G*input_matrix'; % 編碼的結果
for l=1:n % n路輸出的編碼結果
channel_input(n*(i-1)+l)=rem(gg_out(l),2); % 模2運算得出信道輸出
end
end
for i=size(G,2)/k:depth_of_input % 輸入序列充滿所有的寄存器
input_matrix=[coder_input(k*i:-1:k*i-G_2+1)]; % 參與編碼運算的序列
gg_out=G*input_matrix'; % 編碼的結果
for l=1:n % n路輸出的編碼結果
channel_input(n*(i-1)+l)=rem(gg_out(l),2); % 模2運算得出信道輸出
end
end
for i=(G_2/k-1):-1:1 %
input_matrix=[zeros(1,G_2-i*k),coder_input(depth_of_input*k:-1:(depth_of_input-i)*k+1)]; % 參與編碼運算的序列,前面的部分補零
gg_out=G*input_matrix'; % 編碼的結果
for l=1:n % n路輸出的編碼結果
channel_input(n*(G_2/k-i-1)+l+depth_of_input*n)=rem(gg_out(l),2); % 模2運算得出信道輸出
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -