Amplitude Modulation Examples
These examples demonstrate amplitude modulation (AM) techniques.
Compute Symbol Error Rate
In this example, you generate a random digital signal, modulate it, add noise, demodulate the noisy signal, and compute the symbol error rate. Then you plot the noisy, modulated data in a constellation diagram. The numerical results and plot may vary due to the random input data.
Create a random digital message and a constellation diagram System object™.
M = 16; % Alphabet size, 16-QAM x = randi([0 M-1],5000,1); cdpts = qammod(0:M-1,M); constDiag = comm.ConstellationDiagram( ... ReferenceConstellation=cdpts, ... XLimits=[-4 4], ... YLimits=[-4 4]);
Apply 16-QAM modulation and transmit the signal through an AWGN channel.
y = qammod(x,M);
ynoisy = awgn(y,15,'measured');
Demodulate the noisy data, ynoisy
, to recover the message and check the symbol error rate.
z = qamdemod(ynoisy,M); [num,errrate] = symerr(x,z)
num = 79
errrate = 0.0158
Plot the noisy data in a constellation diagram. The signal reference constellation has 16 precisely located points, but the noise added to the transmitted signal causes the scatter plot to have a small cluster of points scattered around each reference constellation point.
constDiag(ynoisy)
Estimate Symbol Rate for General QAM Modulation in AWGN Channel
Transmit and receive data using a nonrectangular 16-ary constellation in the presence of Gaussian noise. Show the scatter plot of the noisy constellation and estimate the symbol error rate (SER) for two different SNRs.
Create a 16-QAM constellation based on the V.29 standard for telephone-line modems.
c = [-5 -5i 5 5i -3 -3-3i -3i 3-3i 3 3+3i 3i -3+3i -1 -1i 1 1i]; sigpower = pow2db(mean(abs(c).^2)); M = length(c);
Generate random symbols.
data = randi([0 M-1],2000,1);
Modulate the data by using the genqammod
function. General QAM modulation is necessary because the custom constellation is not rectangular.
modData = genqammod(data,c);
Pass the signal through an AWGN channel with a 20 dB SNR.
rxSig = awgn(modData,20,sigpower);
Display a scatter plot of the received signal and the reference constellation c
.
h = scatterplot(rxSig); hold on scatterplot(c,[],[],'r*',h) grid hold off
Demodulate the received signal by using the genqamdemod
function. Determine the number of symbol errors and the SER.
demodData = genqamdemod(rxSig,c); [numErrors,ser] = symerr(data,demodData)
numErrors = 1
ser = 5.0000e-04
Repeat the transmission and demodulation process with an AWGN channel with a 10 dB SNR. Determine the SER for the reduced SNR. As expected, the performance degrades when the SNR is decreased.
rxSig = awgn(modData,10,sigpower); demodData = genqamdemod(rxSig,c); [numErrors,ser] = symerr(data,demodData)
numErrors = 461
ser = 0.2305
Plot Noisy 16-QAM Constellation in Simulink
The doc_qam_mod
model uses the Rectangular QAM Modulator Baseband block to modulate random data and applies noise to the signal by using the AWGN Channel block. After passing the symbols through a noisy channel, the model produces a constellation diagram of the noisy data. When the noise level is increased, the constellation points show increased signal distortion.
A Random Integer Generator block generates integers in the range [0,15] for a modulator configured to apply 16-QAM. The modulated signal passes through an AWGN channel, and a constellation diagram displays the resulting symbols.
Run the model with Eb/N0 set to 20 dB in the AWGN channel.
Change the Eb/No from 20 dB to 10 dB. Observe the increase in the noise.
See Also
Functions
modnorm
|rcosdesign
|genqammod
|genqamdemod
|pammod
|pamdemod
|qammod
|qamdemod
Objects
comm.RaisedCosineTransmitFilter
|comm.RaisedCosineReceiveFilter
|comm.GeneralQAMModulator
|comm.GeneralQAMDemodulator
Blocks
- Raised Cosine Transmit Filter | Raised Cosine Receive Filter | General QAM Modulator Baseband | General QAM Demodulator Baseband | M-PAM Modulator Baseband | M-PAM Demodulator Baseband | Rectangular QAM Modulator Baseband | Rectangular QAM Demodulator Baseband