# how to generate gaussian noise with certain covariance and zero mean ?

113 views (last 30 days)
Tejas Appaji on 25 Sep 2017
Answered: getahun kibret on 22 Feb 2023
i have a signal and i want to add gaussian noise to it with zero mean and 0.1 covariance.
variance = 0.1
W = sqrt(variance).*randn(1,size(Xmodt,2)); %Gaussian white noise W
mysignal = mysignal + W; %Add the noise
this code lets me define variance. but i need an algorithm or code to generate gaussian noise with specific covariance and zero mean.

David Ding on 27 Sep 2017
Hi Tejas,
If I understand your question correctly, you wish to generate AWGN with certain co-variance. In this case, you would have a vector of zero-mean Gaussian noises that are statistically dependent. In order to model this in MATLAB, your workflow would be to generate an n x 1 noise vector and then pre-multiply that by the co-variance matrix.
For example:
% Generate a 2 x 1 Gaussian noise vector with covariance
noiseVec = randn(2, 1);
var1 = 0.1;
var2 = 0.2;
covar = 0.05;
cMatrix = [var1, covar; covar, var2];
noiseVec = cMatrix * noiseVec;
Shah Mahdi Hasan on 14 Aug 2020
I agree with JUNHO. There should have been sqrt(). Think about the scalar analogy. If you have a standard normal random variable x~N(0,1) and want to have a certain variance sigma, then you would multiply the following:
y ~ N(0,sigma^2) = sigma*x
Brendan Nichols on 26 Nov 2020
I agree with Junho as well. Test out a variation of David's answer:
noiseVec = randn(2, 1e6);
var1 = 0.1;
var2 = 0.2;
covar = 0.05;
cMatrix = [var1, covar; covar, var2];
noiseVec = cMatrix * noiseVec;
cov(noiseVec(1, :), noiseVec(2, :))
Note the covariance is not equal to cMatrix. Try the following instead:
noiseVec = randn(2, 1e6);
var1 = 0.1;
var2 = 0.2;
covar = 0.05;
cMatrix = [var1, covar; covar, var2];
noiseVec = chol(cMatrix, 'lower') * noiseVec;
cov(noiseVec(1, :), noiseVec(2, :))
Note the addition of the Cholesky decomposition to get the covariance of the noise to match.

getahun kibret on 22 Feb 2023
i want to get a matlab code that adds AWGN with zero mean and variance 0.85