Add white Gaussian noise to signal
y = awgn(x,snr)
y = awgn(x,snr,sigpower)
y = awgn(x,snr,'measured')
y = awgn(___,streamhandle)
y = awgn(___,seed)
y = awgn(___,powertype)
y = awgn(x,snr) adds white Gaussian noise to the
x. The scalar
snr specifies the
signal-to-noise ratio per sample, in dB. If
x is complex,
awgn adds complex noise. This syntax assumes that the power of
x is 0 dBW.
y = awgn(x,snr,sigpower) accepts the input
sigpower, which specifies the power of
x in dBW.
y = awgn(x,snr,'measured') accepts the input
'measured' to specify that the power of
x is measured
before adding noise.
y = awgn(___,streamhandle) accepts
input combinations from prior syntaxes and a random stream handle to generate normal random
noise samples by using
randn. Providing a random stream handle or using the
reset function on the default random stream object enables you to generate
repeatable noise samples. For more information, see
y = awgn(___,seed) accepts a seed value
for initializing the normal random number generator,
randn, before white Gaussian noise is added to the input signal. If you want to
generate repeatable noise samples, then either reset the random stream input before calling
awgn or use the same seed input.
y = awgn(___,powertype) specifies the
signal and noise power type as
is measured in dB and
sigpower is measured in dBW.
snr is measured as a ratio and
sigpower is measured in
For the relationships between SNR and other measures of the relative power of the noise, such as Es/N0, and Eb/N0, see Describing the Noise Level of an AWGN Channel.
Create a sawtooth wave.
t = (0:0.1:10)'; x = sawtooth(t);
Apply white Gaussian noise and plot the results.
y = awgn(x,10,'measured'); plot(t,[x y]) legend('Original signal','Signal with AWGN')
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 signal-to-noise ratios.
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]; M = length(c);
Generate random symbols.
data = randi([0 M-1],2000,1);
Modulate the data 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 having a 20 dB signal-to-noise ratio (SNR).
rxSig = awgn(modData,20,'measured');
Display a scatter plot of the received signal and the reference constellation,
h = scatterplot(rxSig); hold on scatterplot(c,,,'r*',h) grid
Demodulate the received signal using the
genqamdemod function and determine the number of symbol errors and the symbol error ratio.
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 having a 10 dB SNR. Determine the symbol error rate for the reduced SNR. As expected, the performance degrades when the SNR is decreased.
rxSig = awgn(modData,10,'measured'); demodData = genqamdemod(rxSig,c); [numErrors,ser] = symerr(data,demodData)
numErrors = 462
ser = 0.2310