Demodulation for communications simulation
Generate a 150 Hz sinusoid sampled at 8 kHz for 1 second. Embed the modulated signal in white Gaussian noise of variance 0.1².
fs = 8e3; t = 0:1/fs:1-1/fs; s = cos(2*pi*150*t) + randn(size(t))/10;
Frequency modulate the signal at a carrier frequency of 3 kHz using a modulation constant of 0.1.
fc = 3e3;
rx = modulate(s,fc,fs,'fm',0.1);Frequency demodulate the signal using the same carrier frequency and modulation constant. Compute and plot power spectrum estimates for the transmitted, received, and demodulated signals.
y = demod(rx,fc,fs,'fm',0.1); pspectrum([s;rx;y]',fs,'Leakage',0.85) legend('Transmitted signal','Received signal','Demodulated signal','Location','best')

y — Modulated signalModulated message signal, specified as a real vector or matrix. Except for the
methods pwm and ppm, y is the
same size as x.
fc — Carrier frequencyCarrier frequency used to modulate the message signal, specified as a real positive scalar.
fs — Sample rateSample rate, specified as a real positive scalar.
method — Method of modulation used'am' (default) | 'amdsb-tc' | 'amssb' | 'fm' | 'pm' | 'pwm' | 'ppm' | 'qam'Method of modulation used, specified as one of:
am or amdsb-sc — Amplitude demodulation,
double sideband, suppressed carrier. Multiplies y by a
sinusoid of frequency fc and applies a fifth-order
Butterworth lowpass filter using filtfilt.
x = y.*cos(2*pi*fc*t); [b,a] = butter(5,fc*2/fs); x = filtfilt(b,a,x);
amdsb-tc — Amplitude demodulation, double sideband,
transmitted carrier. Multiplies y by a sinusoid of frequency
fc and applies a fifth-order Butterworth lowpass filter
using filtfilt.
x = y.*cos(2*pi*fc*t); [b,a] = butter(5,fc*2/fs); x = filtfilt(b,a,x);
If you specify opt, demod subtracts
scalar opt from x. The default value for
opt is 0.
amssb — Amplitude demodulation, single sideband. Multiplies
y by a sinusoid of frequency fc and
applies a fifth-order Butterworth lowpass filter using filtfilt..
x = y.*cos(2*pi*fc*t); [b,a] = butter(5,fc*2/fs); x = filtfilt(b,a,x);
fm — Frequency demodulation. Demodulates the FM waveform by
modulating the Hilbert transform of y by a complex
exponential of frequency -fc Hz and obtains the
instantaneous frequency of the result..
y=cos(2*pi*fc*t + opt*cumsum(x))
cumsum is a rectangular approximation of the
integral of x. modulate uses opt as the
constant of frequency modulation. If you do not specify the
opt parameter, modulate uses a default of
opt = (fc/fs)*2*pi/(max(max(x))) so the maximum
frequency excursion from fc is
fc Hz.
pm — Phase demodulation. Demodulates the PM waveform by
modulating the Hilbert transform of y by a complex
exponential of frequency -fc Hz and obtains the
instantaneous phase of the result.
y=cos(2*pi*fc*t + opt*x)
modulate uses opt as the constant
of phase modulation. If you do not specify the opt parameter,
modulate uses a default of
opt = pi/(max(max(x))) so the maximum phase
excursion is π radians.
pwm — Pulse-width demodulation. Finds the pulse widths of a
pulse-width modulated signal y. demod
returns in x a vector whose elements specify the width of
each pulse in fractions of a period. The pulses in y should
start at the beginning of each carrier period, that is, they should be left
justified. modulate(x,fc,fs,'pwm','centered') yields pulses
centered at the beginning of each period. The length of y is
length(x)*fs/fc.
ppm — Pulse-position demodulation. Finds the pulse
positions of a pulse-position modulated signal y. For correct
demodulation, the pulses cannot overlap. x is length
length(t)*fc/fs.
qam— Quadrature amplitude demodulation. [x1,x2] =
demod(y,fc,fs,'qam') multiplies y by a cosine and
a sine of frequency fc and applies a fifth-order Butterworth
lowpass filter using filtfilt.
x1 = y.*cos(2*pi*fc*t); x2 = y.*sin(2*pi*fc*t); [b,a] = butter(5,fc*2/fs); x1 = filtfilt(b,a,x1); x2 = filtfilt(b,a,x2);
The input argument opt must be the same size as
y.
opt — Optional input for some methodsOptional input, specified for some methods. Refer to method for
more details on how to use opt.
x — Demodulated message signalDemodulated message signal, returned as a real vector or matrix.
modulate | vco | fskdemod (Communications Toolbox) | genqamdemod (Communications Toolbox) | mskdemod (Communications Toolbox) | pamdemod (Communications Toolbox) | pmdemod (Communications Toolbox) | qamdemod (Communications Toolbox)
You have a modified version of this example. Do you want to open this example with your edits?