Communication Technology







AWGN stands for Additive WhiteGaussianNoise. Actually this name itself has all the detailed information in it as follows.

  • Additive : This means that the noise is ADDED to the original signal. (Is there any other type (Non-additive) noise ? Yes, for example, you might have heard of multiplicative in some other area like image processing)

  • White : This means that it contains all the frequency components with equal distribution (Is there any other type (non-White)  ? Yes, for example, you might have heard of pink noise (1/f noise) in other area like semiconductor design)

  • Gaussian : This means that it has Gaussian (Normal) Distribution.  (Is there any other type (non-Gaussian) ? Yes, for example, you might have heard of Log Normal Noise)


Some examples of the signal that are impacted by AWGN are as follows.



As you see here, the overall distribution of AWGN varies depending on SNR (Signal To Noise Ratio). Following equation shows the relationship between AWGN and SNR.



< List 1 >


    clear all;


    % Number of symbols

    N = 10000;


    % Specify SNR in dB. Try setting various different value here and see how the result changes

    SNR_dB = 10;


    % Create a randomly generated QAM symbols

    s = (2*randi([0 1],1,N)-1)+j*(2*randi([0 1],1,N)-1);


    % Calculate Symbol Energy

    Eavg = sum(abs(s) .^ 2)/N;


    % Convert SNR (in dB) to SNR (in Linear)

    SNR_lin = 10 .^ (SNR_dB/10);


    % Calculate the Sigma (Standard Deviation) of AWGN

    awgnSigma = sqrt(Eavg/(2*SNR_lin));


    % Generate a sequence of noise with Normal Distribution and rescale it with the sigma

    awgn = awgnSigma*(randn(1,N)+j*randn(1,N));


    % Add the noise to the original signal

    y = s + awgn;


    % Plot the noised signal and the original signal

    plot(real(y),imag(y),'ko','MarkerFaceColor',[0 0 0],'MarkerSize',1);

    axis([-2 2 -2 2]);

    title(strcat('SNR=', num2str(SNR_dB), ' dB'));

    hold on;

    plot(real(s),imag(s),'ro','MarkerFaceColor',[1 0 0],'MarkerSize',8);

    axis([-2 2 -2 2]);

    hold off;


Reference :