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(...,powertype)


y = awgn(x,snr) adds white Gaussian noise to the vector signal 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) is the same as the syntax above, except that sigpower is the power of x in dBW.

y = awgn(x,snr,'measured') is the same as y = awgn(x,snr), except that awgn measures 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 stream.

y = awgn(x,snr,'measured',state) is the same as y = awgn(x,snr,'measured'), except that awgn first resets the state of normal random number generator randn to the integer state.

    Note:   This usage is deprecated and may be removed in a future release. Instead of state, use s, as in the previous example.

y = awgn(...,powertype) is the same as the previous syntaxes, except that the string powertype specifies the units of snr and sigpower. Choices for powertype are 'db' and 'linear'. If powertype is 'db', then snr is measured in dB and sigpower is measured in dBW. If powertype is 'linear', snr is measured as a ratio and sigpower is measured in watts.

Relationship Among SNR, Es/N0, and Eb/N0

For the relationships between SNR and other measures of the relative power of the noise, see AWGN Channel Noise Level.


collapse all

Add AWGN to Sawtooth Signal

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')

General QAM Modulation in an 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 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, c.

h = scatterplot(rxSig);
hold on

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 =


ser =


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 =


ser =


See Also

| |

Introduced before R2006a

Was this topic helpful?