📄 st_trellis_enc.m
字号:
function [outputs,alpha_channel] = ... st_trellis_enc(Data,ST_NextState,ST_Output,ModMap,TerminateF,NTx);%------------------------------------------------------------------------------% Encode binary 1-D data vector with space-time trellis codes.%% Format:% -------%% [outputs,alpha_channel] = ...% st_trellis_enc(Data,ST_NextState,ST_Output,ModMap,TerminateF,NTx)% % Author: MVe% Date: 22.08.2002%------------------------------------------------------------------------------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Initial parameter checking etc.. -- %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Works currently only for 1-D input vectorstmp = size(Data);if or(length(tmp) > 2,sum(tmp(:)>1)>1) error('Encoder works only with vector inputs');else if tmp(1)>tmp(2) Data = Data.'; end % if or(length(tmp) > 2,sum(tmp(:)>1)>1)end % if or(length(tmp) > 2,sum(tmp(:)>1)>1)% Check is selected st-code validif size(ST_Output{1,1},1)~=NTx error('Number of output symbols ~= number of tx antennas');end % if size(ST_Output{1,1},1)~=NTx%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Initialise few parameters -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%k = log2(size(ST_NextState,2)); % # of input bitsn = 1; % output is one modulated symbolm_bits = log2(size(ST_NextState,1)); % encoder memory (in bits)m = ceil(m_bits/k); % encoder memory (in "symbols")DLength = size(Data,2);DLength_ptr = DLength/k;% "Pointer" presentation of the input data.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;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Space-time encoding and modulation -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Format of 'outputs':% Column #i = modulated symbols for antenna #i%outputs = zeros(NTx,n*DLength_ptr);outputs_tmp = zeros(NTx,n*DLength_ptr);for i1 = 1:length(Data_ptr) % Output caused by transition (encoded symbols) outputs_tmp(:,(i1-1)*n+1:i1*n) = ST_Output{state,Data_ptr(i1)}; % New state after the transition state = ST_NextState(state,Data_ptr(i1)); end % for 1:length(Data)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Terminate trellis with tail bits (if required) -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if TerminateF %% Drive trellis to zero state (non-recursive encoder): %% %% Pad data with m zeros (tail bits are m zeros). %% % for i1 = [1:m] + i1 % Output caused by transition (encoded bits) outputs_tmp(:,(i1-1)*n+1:i1*n) = ST_Output{state,1}; % New state after the transition state = ST_NextState(state,1); end % for i1 = [1:m] + i1end % if TerminateF% Modulateoutputs = ModMap(outputs_tmp);% Interleave[dummy,alpha_channel] = sort(rand(1,length(outputs)));outputs = outputs(:,alpha_channel);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -