射频和无线供应商和的家Resources

One Stop For Your RF and Wireless Need

CTC(Convolutional Turbo Code) basics and specifications

This section ofMATLAB source codecoversCTC EncoderorConvolutional Turbo codematlab code.

The Convolutional Turbo Code Encoder or CTC Encoder is depicted in the following figure including constituent encoder. It uses double binary circular recursive systematic convolutional code.The following is the matlab code for the CTC structure defined in the figure.

CTC encoder

ReferTurbo encoderpage which describes basics of CTC Encoder or Convolutional Turbo Encoder technique with rate 1 by 3 example used for forward error correction.

The difference between convolutional encoder and turbo encoder is that in convolutional encoder input bits are not preserved and are altered. While in the case of turbo coding input bits are preserved and are multiplexed with other altered bits generated through encoder and (interleaver+encoder) modules.

CTC Encoder MATLAB Code

function OutBits = CTCEncoder(InpBits, N, P)

CircularStateTable = [
0 6 4 2 7 1 3 5;
0 3 7 4 5 6 2 1;
0 5 3 6 2 7 1 4;
0 4 1 5 6 2 7 3;
0 2 5 7 1 3 4 6;
0 7 6 1 3 4 5 2];

InitState = [0 0 0];
[Junk FinalState] = CTCRSCEncoder(InpBits, N, InitState);
Ri = mod(N, 7);
Ci = FinalState(1)*4 + FinalState(2)*2 + FinalState(3);
CS = CircularStateTable(Ri, Ci+1);
InitState(1) = floor(CS/4);
CS = mod(CS,4);
InitState(2) = floor(CS/2);
CS = mod(CS,2);
InitState(3) = CS;
[p1 FS] = CTCRSCEncoder(InpBits, N, InitState);
if sum(FS == InitState) ~= 3
disp('P1 mismatch')
return
end
IB = CTCInterleaver(InpBits, N, P);
InitState = [0 0 0];
[Junk FinalState] = CTCRSCEncoder(IB, N, InitState);
Ri = mod(N, 7);
Ci = FinalState(1)*4 + FinalState(2)*2 + FinalState(3);
CS = CircularStateTable(Ri, Ci+1);
InitState(1) = floor(CS/4);
CS = mod(CS,4);
InitState(2) = floor(CS/2);
CS = mod(CS,2);
InitState(3) = CS;
[p2 FS] = CTCRSCEncoder(IB, N, InitState);
if sum(FS == InitState) ~= 3
disp('P2 mismatch')
return
end

OutBits = zeros(6*N, 1);
k = 0: n - 1
OutBits(6*k+1) = InpBits(2*k+1);
OutBits(6*k+2) = InpBits(2*k+2);
OutBits(6*k+3) = p1(2*k+1);
OutBits(6*k+4) = p2(2*k+1);
OutBits(6*k+5) = p1(2*k+2);
OutBits(6*k+6) = p2(2*k+2);
end

function [ParityBits, FinState] = CTCRSCEncoder(InpBits, N, InitState)
%[ParityBits, FinState] = CTCRSCEncoder(InpBits, N, InitState)
%InitState = initial state of encoder (0 to 7) in binary
%FinState = final state of encoder (0 to 7) in binary

load 'CTCEncTable'
TNxt = CTCEncTable(:, 6:8);
TOut = CTCEncTable(:, 9:10);
ParityBits = zeros(2*N, 1);
CS = InitState;

k = 0: n - 1
A = InpBits(2*k+1);
B = InpBits(2*k+2);
m = CS(1)*16 + CS(2)*8 + CS(3)*4 + A*2 + B;
NS = TNxt(m+1, :);
Pb = TOut(m+1, :);
ParityBits(2*k+1) = Pb(1);
ParityBits(2*k+2) = Pb(2);
CS = NS;
end
FinState = NS;

function InterleavedBits = CTCInterleaver(InpBits, N, P)
%InterleavedBits = CTCInterleaver(InpBits, N, P)
%N - Length of input bit in pairs
%P - [p0 p1 p2 p3], interleaver parameters

InterleavedBits = zeros(2*N, 1);
xI = zeros(N, 2);
k = 0: n - 1
m = CTCGetInterleavedAddress(k, N, P);
A = InpBits(2*m+1);
B = InpBits(2*m+2);
if mod(k, 2) == 1
InterleavedBits(2*k+1) = A;
InterleavedBits(2*k+2) = B;
else
InterleavedBits(2*k+1) = B;
InterleavedBits(2*k+2) = A;
end

end

Useful Links to MATLAB codes

Refer following as well as links mentioned on left side panel for useful MATLAB codes.
OFDM Preamble generationTime off estimation corrFreq off estimation corrchannel estimation11a WLAN channelPN sequence generationOFDMA Tx RxAES DEScarrier aggregationCCDFFIR FilterIIR FilterLow Pass FIRViterbi decoderCRC8 CRC32

RF and Wireless tutorials

WLAN802.11ac802.11adwimaxZigbeez-waveGSMLTEUMTSBluetoothUWBIoTsatelliteAntennaRADAR


Share this page

Translate this page
Baidu