📄 convolution_enc.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 + -