How to add gaussian noise to the 1D signal
조회 수: 83 (최근 30일)
이전 댓글 표시
Hi everyone,
I want to add 10% Gaussian Noise to the 1D signal. I'm a bit confused with Gaussian Noise, AWGN, and WGN. But all what I want to do is to generate Gaussian Noise not others. For your help I'm very appreciate.
Thanks in advance, Lina
댓글 수: 0
채택된 답변
MathWorks Support Team
2021년 7월 27일
Using functionality available in the Communications Toolbox™ software, a single call to the awgn function enables you to generate and add white Gaussian noise to your single- or multi-channel signal.
out = awgn(in,snr,signalpower)
accepts an input signal power value in dBW. To have the function measure the power of in before adding noise, specify signalpower as 'measured'.
The input argument snr expresses the ratio between the signal and noise powers, using units of dB by default. Regarding the 10% Gaussian noise power, we are interpreting this as signal power 1 and noise power 0.1, which results in a setting of 10 dB for the snr input to the awgn function. The AWGN Channel topic provides an overview of the AWGN channel and quantities used to describe the relative signal to noise power in MATLAB.
To clarify the distinction between Gaussian noise and white Gaussian noise, the Wikipedia Gaussian noise page states:
…
The probability density function of a Gaussian random variable is given by:
A special case is White Gaussian noise, in which the values at any pair of times are identically distributed and statistically independent (and hence uncorrelated). In communication channel testing and modelling, Gaussian noise is used as additive white noise to generate additive white Gaussian noise.
…
댓글 수: 0
추가 답변 (3개)
Wayne King
2012년 4월 21일
White just means that there is no correlation among the noise samples. This results in a flat power spectral density, hence the analogy with "white" light.
When you say that the amplitude of the white Gaussian noise is 0.1 with a signal amplitude of 1, I'm guessing you mean an SNR of 10.
Y = awgn(x,10,'measured','linear');
Otherwise, it really does not make sense to talk about the "amplitude" of WGN. You can basically say that most of the values are +/- 3 standard deviations, so if you set the standard deviation to 0.1/3, you would basically get a WGN sequence that varies from [-0.1, 0.1];
noise = 0.1/3*randn(size(t));
plot(noise);
So you could do:
x = cos(2*pi*100*t)+0.1/3*randn(size(t));
댓글 수: 0
Wayne King
2012년 4월 21일
t = 0:0.001:1;
x = cos(2*pi*100*t)+randn(size(t));
You have to specify what you mean by 10%. It would be better if you can translate this to the variance or the signal to noise ratio. I'm not sure what you mean by 10%.
The above is N(0,1) white Gaussian noise. To increase or decrease the variance multiply by the standard deviation. For example:
x = cos(2*pi*100*t)+sqrt(2)*randn(size(t));
Adds N(0,2) noise.
You can use awgn() easily if you know the SNR you want.
Add white Gaussian noise at a +2 dB SNR.
x = cos(2*pi*100*t);
y = awgn(x,2,'measured');
Junaid
2012년 4월 21일
Other then obove given solution, this might work..
Let say your 1D signal is H, then
GH = H.*fspecial('gaussian', size(H),0.1)
in place of 0.1 you can tune any value you like.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Measurements and Feature Extraction에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!