⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viterbi_encoder.m

📁 实现GSM通信的快速接入控制信道(FACCH)的信道编码的MATLAB仿真
💻 M
字号:
%该函数实现维特比译码
function [channel_input]=viterbi_encoder(G,k,coder_input)
%G为生成矩阵,k为并行输入端的个数,code_input为编码器输入序列
%k for input number
channel_input=[];       %初始化编码器输出

%n for output number
n=size(G,1);            %编码器输出端个数,即生成矩阵列矢量的维数
G_2=size(G,2);          %编码器寄存器个数,即生成矩阵行矢量的维数

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 %如果输序编器不匹配,提示错误
   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)];%取输入序列的前i*k个,其后补0
   gg_out=G*input_matrix';                       %由生成矩阵和寄存器单元中的内容相乘得到输出
   for l=1:n
      channel_input(n*(i-1)+l)=rem(gg_out(l),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)]; %取输入序列的G-2个,即与寄存器个数相等      
   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)];;%前G_2-i*k个补0
   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 + -