📄 viterbi_encoder.m
字号:
function [channel_input]=viterbi_encoder(G,k,coder_input)
%k为输入位数
channel_input=[];
n=size(G,1);%n为输出位数,生成矩阵G的行数
G_2=size(G,2);%G_2 生成矩阵G的列数
%检查生成矩阵的列数和输入序列是否是k的倍数
if rem(size(G,2),k)~=0
error('Size of G and k do not agree')
end
if rem(size(coder_input,2),k)~=0
error('Size of Input and k do not agree')
end
depth_of_input=length(coder_input)/k;
%header
for i=1:size(G,2)/k-1
input_matrix=[coder_input(i*k:-1:1),zeros(1,size(G,2)-i*k)];%给输入序列补0
gg_out=G*input_matrix'; %由输入序列和生成矩阵得到输出
for l=1:n
channel_input(n*(i-1)+l)=rem(gg_out(l),2);%由模2和运算求出编码矩阵,并转化为序列形式输出
end
end
%body
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
channel_input(n*(i-1)+l)=rem(gg_out(l),2);
end
end
%tailer
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
channel_input(n*(G_2/k-i-1)+l+depth_of_input*n)=rem(gg_out(l),2);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -