Lecture notes
The draft of lecture notes. Version 11.02.2024
Lecture slides
General information
Lecture 1: Physical media. Limitations
Lecture 2: Linear codes
Lecture 2A: Hard decision decoding
Lecture 3: Modulation
Lecture 4: Basics of optimal decoding. Graph representations of linear codes
Lecture 5: SISO decoding. BCJR algorithm. Suboptimal decoding
Lecture 6: Convolutional codes. Analysis. Decoding. Block from Convolutional
Lecture 7: Asymptotic thresholds. BICM. Finite length bounds
Lecture 8: Long codes from short codes. Turbo-codes
Lecture 9: LDPC codes: Definition and BP decoding
Lecture 9: LDPC codes, part 2: QC LDPC codes and practical decoding
Lecture 9: LDPC codes, part 3: Density evolution and code search algorithms
Lecture 10: Finite fields. Cyclic codes. BCH and RS codes
Lecture 11: Polar codes.
Lecture 12: Non-binary and Generalized LDPC codes
Lecture 13: Shaping: Bounds and implementation
Practice sessions slides
Channel models
Linear codes
LDPC codes
Practice sessions programs drafts
GaussChannel.m
SofrVsHard.m
PAM4.m
CodedBPSK.m
CodedPAM4.m
test.m
dminCSD.m
circ.m
gen2code.m
MinSpanForm.m
dual_matrix.m
MLversusOSD.m
next_permut.m
MainBCJR_ConvCodes
MainViterbi_ConvCodes
test_turbo.m
Lifting and girth search: test_turbo.m
Homework Assignments
HW1: Combine QAM modulation with a simple linear code. Compare efficiency with uncoded transmission
HW2: Convolutional codes and connections with block codes
HW3: Turbo and LDPC codes. Iterative decoding
Reference materials
Table of good convolutional codes with spectra
Table of good tail-biting codes
Code802_11.m. Matrices used in WiFi standard
Examples of the examination tasks - 2023
Research topics and topics for Bachelor's and Master's diploma theses
See
http://cit.cs.ut.ee/forstudents.html
Matlab programs
Utilities
bin2word.m: Binary to decimal transform for arrays
word2bin.m: Decimal to binary transform for arrays
hammingws.m: The Hamming weight of a binary representation of a decimal number
gauss.m: Q-function for probability integral
gaussinv.m: Inverse to gauss.m
g2h.m: Finding dual to a binary matrix
FinField.m: Generating the field GF(2^m) and the table of logarithms in the field
Channel models. Error probability
AWGNplot.m: Uncoded transmission over the AWGN channel
bec_error.m: Binomial distribution in logarithmic domain
bsc_error.m: Polynomial distribution in logarithmic domain
TSB_upperbound_bk.m: Poltyrev's upper bound
UnionBoundsExample.m: Compare Union bound with TSB bound and with simulations
Simulation of encoded data transmission over the AWGN channel with PAM
SoftVShard.m: Error probability plots for decoding with soft and hard decisions
PAMmodulator.m: MATLAB implementation of Gray-coded PAM modulator
PAMdemodulator.m: MATLAB implementation of Gray-coded PAM demodulator
TestPAM.m: Simulating PAM modulation and demodulation. Error probability estimation vs simulation
BPSK_simul.m: Coded BPSK modulated transmission
PAMsimul.m: Coded PAM modulated transmission
Trellis-based soft decision and SISO decoding
G2trellis.m: Generating trellis description from the code generator matrix
BlockCodesVA.m: ML decoding using the trellis obtained by G2trellis
BlockCocdsBCJR.m: MAP decoding by BCJR algorithm using the trellis obtained by G2trellis
testVAandBCJR_BlockCodes.m: Simulating trellis-based ML and MAP decoders
Asymptotic thresholds and bounds
Mutual_Informationr.m: Compute I(X;Y) for AWGN with PAM
BICMLimits.m: BICM threshold
BICMvsPAM.m: Plots BICM vs PAM
BSCerasures.m: Capacity of quantized AWGN
Convolutional codes and block codes from convolutional codes
ConvEncoder.m: Convolutional code encoder
MetricComp.m: Branch metrics computation. Used for Viterbi decoder
viterbiCC.m: One-section processing by Viterbi algorithm for convolutional code simulation
viterbiBM.m: One-section processing by Viterbi algorithm for WAVA decoding of block code
WAVAdecoding.m: WAVA decoder for block TB codes
simul_WAVA.m: Simulation WAVA decoding for block TB codes
MainViterbi_ConvCodes.m: Simulation for convolutional codes
Turbo codes
test_turbo.m: Main program for tubo-coding simulation
TrellisSection.m: Program creating structure of trellis section
fb_syst_encoder_i.m: Encoder for systematic convolutional encoder with feedback
ConvBCJR.m: Simplified BCJR for rate 1/2 ZT convolutional code
turbo_encoder.m: Encoder for turbo-code
LDPC codes
RandGallagerCode.m: Routine generating random code from Gallager's ensemble
RandRUcode.m: Routine generating random code from Richardson-Urbanke ensemble
TannerGraph.m: Tanner graph from the parity-check matrix
compute_g.m: Compute girth for binary and monomial parity-check matrices
dijkstra_g.m: Compute girth for graph adjacency matrix
Base2QC.m: Transfoms degree matrix to binary parity-check matrix
GoodGirthCode.m: Example program for search good codes
LDPC codes. BP decoding
H2CV.m: Sparse representation of H via row and column locations of ones
check_syndrome.m: Computes syndrome
flooding.m: BP decoding routine. Flooding schedule
layered.m: BP decoding routine. Layered schedule
logexp.m: Gallager's log(tanh) function
map_sp.m: Row-MAP for sum-product version
map_ms.m: Row-MAP for min-sum version
TestOutrCode.m: Test code determined by binary parity-check matrix
NB LDPC codes
TestGF.m: Testing computations over GF and generating random parity-check matrix of a NB LDPC code