Add white Gaussian noise to signal
y = awgn(x,snr)
y = awgn(x,snr,sigpower)
y = awgn(x,snr,'measured')
y = awgn(x,snr,sigpower,s)
y = awgn(x,snr,'measured',state)
y = awgn(...,
y = awgn(x,snr) adds
white Gaussian noise to the vector signal
snr specifies the signal-to-noise ratio
per sample, in dB. If
x is complex,
complex noise. This syntax assumes that the power of
y = awgn(x,snr,sigpower) is
the same as the syntax above, except that
the power of
x in dBW.
y = awgn(x,snr,'measured') is
the same as
y = awgn(x,snr), except that
the power of
x before adding noise.
y = awgn(x,snr,sigpower,s) uses
s, which is a random stream handle, to generate random noise samples
with randn. If s is an integer, then resets the state of randn to
s. The latter usage is obsolete and may be removed in a future release.
If you want to generate repeateable noise samples, then provide the
handle of a random stream or use reset method on the default random
y = awgn(x,snr,'measured',state) is
the same as
y = awgn(x,snr,'measured'), except
awgn first resets the state of normal random
randn to the
This usage is deprecated and may be removed in a future release.
y = awgn(..., is
the same as the previous syntaxes, except that
the units of
snr is measured in dB and
measured in dBW. If
measured as a ratio and
sigpower is measured in
For the relationships between SNR and other measures of the relative power of the noise, see AWGN Channel Noise Level.
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. It is necessary to use general QAM modulation 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 along with 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 signal-to-noise ratio. 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