Prefer learning by watching and then verifying with code? Use this page as a companion to the GaussianWaves labs — calculators, dual Matlab/Python articles, and structured paths.
Recommended watch-along paths (on-site)
Work each path top-to-bottom. Open the linked tool when you need a quick numeric check.
- Digital modulations: BPSK BER theory → BPSK sim → M-PSK → BER calculator
- OFDM: Intro → Cyclic prefix → OFDM BER → CP overhead tool
- FFT: Complex DFT → Plot FFT (Python) → FFT resolution tool
- Pulse shaping: Nyquist → Matched filter / SRRC → RRC calculator
- Signals / sampling: Analog & discrete → Baseband sampling → Bandpass sampling → Nyquist demo → Bandpass demo
- Hilbert / analytic signal: Analytic signal → Envelope & phase → Phase demod
Interactive tools (better than slides)
The Tools hub has BER, Shannon capacity, RRC, OFDM overhead, 3GPP TDL/CDL, EVM→SNR, and more — free, no signup.
Ebooks with full simulation code
For complete Matlab/Python projects beyond blog-length posts, see Books / ebooks and checkout on Products.
External lecture list
The old embedded lecture table on this page broke (missing table shortcode). A curated external video list will be rebuilt here. If you have a favorite DSP/comms lecture worth including, send it via the feedback form.
Disclaimer: Third-party videos (when listed) are collected from public sources; GaussianWaves does not guarantee their accuracy.
how to vectorize the code(i.e. to reduce the number of for loops)
I have not written on this topic. Please refer to the following Matlab support page
http://www.mathworks.com/help/matlab/matlab_prog/vectorization.html
I need to find loglikelihood ratio. I ll generate normally distributed random numbers using ‘normrnd’ command in matlab. but it’s giving negative values and when i take log, it shows complex numbers. please help
Two posts related to your question. Hope this helps
https://www.gaussianwaves.com/2012/10/likelihood-function-and-maximum-likelihood-estimation-mle/
https://www.gaussianwaves.com/2010/01/maximum-likelihood-estimation-2/
thank you, I got the basics I needed
hi Mathuranathan,
I have one basic doubt.
Why do we consider complex normal distribution, instead we can go for real normal distribution?
Is the complex normal can be represented in matlab? If so how?
-regards
When talking about real normal distribution, it is one dimensional. The same concept can be extended to multivariate case, where the distribution across multi-dimension are jointly Gaussian. Complex normal distribution is a subset of multivariate normal distribution, where the number of dimension considered is just 2 (also bivariate normal distribution). We name these two dimensions as real and imaginary parts.
There are many applications to complex normal distribution. For example, A QPSK modulation is a two dimensional modulation, where each transmitted symbol is represented on two basis function – sine and cosine. Thus these symbols are represented as complex number. Actually, you cannot transmit a complex number. What happens really is that you are modulating the input message on two basis function – sine and cosine with same frequency but are offset 90* with respect to each other interms of phase.
If I would like to introduce noise in the QPSK modulation system, where the transmitted symbols are represented as complex number in the form S = s1 + j s2, then I would need a complex gaussian noise of form N = n1+jn2. The received signal is represented as Y = S+N, where everything is complex.
Yes, it is possible to generate complex distributions in matlab. Example
N = randn(1,100) + i1 * randn(1,100); %gives complex normal distributed samples
More applications :
Rayleigh fading: https://www.gaussianwaves.com/2010/02/fading-channels-rayleigh-fading-2/
Rician Fading: https://www.gaussianwaves.com/2012/07/ebn0-vs-ber-for-bpsk-over-rician-fading-channel/
AWGN noise (Complex case) : https://www.gaussianwaves.com/2015/06/how-to-generate-awgn-noise-in-matlaboctave-without-using-in-built-awgn-function/
Simulating white noise as multivariate Gaussian random vector: https://www.gaussianwaves.com/2013/11/simulation-and-analysis-of-white-noise-in-matlab/
Thank you ,
That was very much informative
Hi Mathuranathan,
If i go for modulation using multiple basis functions (say 4), and if I introduce noise in them,
then the resulting noise will be N= n1 + jn2 + kn3 + ln4? Am I correct in representing the noise?
Or it should be N = n1+j(n2 + k(n3 + l n4))) ?
Yes. The noise can be represented in four dimension as n1 + j n2 + k n3 + l n4.
To implement in Matlab or any programming language, each dimension is represented as a column vector in a Nx 4 matrix, where N represents the desired number of noise samples
Example:
To generate 10 I.I.D 4 dimensional noise samples that follow Gaussian distribution, each column represent a single dimension.
Noise = [randn(10,1) ; randn(10,1) ; randn(10,1) ; randn(10,1) ]
To understand, consider the case of 2 dimensional noise (complex noise)
Noise = [ randn(10,1) ; randn(10,1)] is equivalent to
Noise = randn(10,1) + i1* randn(10,1)
Hi Mathuranathan,
I need one help
Given z = max(X1, X2, …. Xn),
X1,X2,,,Xn are all random variables and unordered. how to find the pdf of z ?
-regards
Hi Mathuranathan,
I have questions on ofdm,
what happens if the channel changes within symbol duration? still the orthogonality is retained?
what happens when channel response exceeds the cyclic prefix length?
-regards
hi Mathuranathan sir,
I am vineeth.
I need help in generating CP-OFDM waveform in Matlab. Can you help me with that sir.
CP-OFDM related posts are available here.
https://www.gaussianwaves.com/tag/ofdm/