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

📄 convolution_enc.m

📁 通信中常用的卷积码信道译码源码程序
💻 M
字号:
function [outputs,varargout] = convolution_enc(Data,Trellis,TerminateF,...                                               enc_type,varargin);%------------------------------------------------------------------------------% Encode binary 1-D data vector with convolution codes.%% Format:% -------%% [outputs,[ModMap]] = ...%   convolution_enc(Data, Trellis, TerminateF, enc_type, ['tcm'])% % Author: MVe% Date:   05.07.2002%------------------------------------------------------------------------------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Initial parameter checking etc.. -- %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%tmp1 = length(varargin);tcm_flag = 0;if tmp1>0  if tmp1 == 1 & strcmp(varargin{1},'tcm')    tcm_flag = 1;  end % if tmp1 == 1 & strcmp(varargin{1},'tcm')end % if tmp1>0  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Initialise few parameters -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Extract most used variables from struct 'Trellis'output_tot = Trellis.Output_bin;nextstate = Trellis.NextState;n = Trellis.n;k = Trellis.k;% "Pointer" presentation of the input data.DLength = size(Data,2);DLength_ptr = DLength/k;tmp = zeros(DLength_ptr,1);Data_ptr = zeros(1,DLength_ptr);tmp(:,1) = ...    bin2dec(reshape(char(Data(1,:)+48),k,DLength_ptr).')+1;Data_ptr = tmp.';% Initialise state of the trellis.state = 1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Encode input stream (doesn't include tail bits) -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%outputs = zeros(1,n*DLength_ptr);for i1 = 1:length(Data_ptr)   % Output caused by transition (encoded bits)  outputs(1,(i1-1)*n+1:i1*n) = output_tot{state,Data_ptr(i1)};  % New state after the transition  state =  nextstate(state,Data_ptr(i1));  end % for 1:length(Data)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Terminate trellis with tail bits (if required) -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if TerminateF    switch enc_type        %% Drive trellis to zero state:                                     %%    %%   Pad data with Trellis.m zeros (tail bits are Trellis.m zeros). %%    %       case 'non-recursive'    for i1 = [1:Trellis.m] + i1      % Output caused by transition (encoded bits)      outputs(1,(i1-1)*n+1:i1*n) = output_tot{state,1};      % New state after the transition      state = nextstate(state,1);    end % for i1 = [1:Trellis.m] + i1         case 'recursive'        %% Drive trellis to zero state:           %%    %%   Tail bits == output of the feedback. %%    %    for i1 = [1:Trellis.m] + i1      % Output caused by transition (encoded bits)      outputs(1,(i1-1)*n+1:i1*n) = Trellis.Tail_Output_bin{state};      % New state after the transition      state =  Trellis.Tail_NextState(state);    end % i1 = [1:Trellis.m] + i1      end % switch enc_typeend % if TerminateF%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Trellis coded modulation (only QPSK supported currently) -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if tcm_flag    ModMap = [1+j, -1+j, 1-j, -1-j].';  k = log2(length(ModMap));  OLength_ptr = length(outputs)/k;  tmp = zeros(OLength_ptr,1);  Outputs_ptr = zeros(1,OLength_ptr);  tmp(:,1) = ...      bin2dec(reshape(char(outputs(1,:)+48),k,OLength_ptr).')+1;  Outputs_ptr = tmp.';  outputs = ModMap(Outputs_ptr).';  varargout{1} = ModMap;end % if tcm_flag

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -