How to add Guassian Noise to non sinusoidal signal

2 次查看(过去 30 天)
Hi,
Given a SNR value in dB I want to add noise to my below narrow pulsed signal .
Fs=200e6;
Fs=200e6;
t=t=0:1/Fs:255/Fs;
Fc=50e6;
tau1=400e-9;
tau2=80e-9;
Req_SNR=10; % in dB
Sn= sin(2*pi*Fc*t).*exp(-4*pi*(((t-tau1)/tau2).^2));
I am following below steps to add noise to signal.
Pow_Sn=sum(St.^2); % compute signal power
rn=randn(1, size(t));
rn_power=sum(rn.^2);
Noise_amp=sqrt(Pow_Sn./((10^(Req_SNR/10)))); %
Noise=rn.*Noise_amp;
Sn_Noise=Sn+Noise;
SNR_measured=snr(Sn_Noise,Noise); % to test.
My questions are as followings:
  1. Is Signal power computation correct.
  2. Is noise generation method correct.
  3. Why SNR_measured do not equal to Req_SNR.
Note: randn outout are not in range of -3.25 to 3.02
.

采纳的回答

Ameer Hamza
Ameer Hamza 2020-5-10
You are confusing the energy and power of the signal. Calculate the value power of signal like this
Pow_Sn=sum(Sn.^2)/numel(Sn);
Try the following code
Fs=200e6;
t=0:1/Fs:255/Fs;
Fc=50e6;
tau1=400e-9;
tau2=80e-9;
Req_SNR=10; % in dB
Sn= sin(2*pi*Fc*t).*exp(-4*pi*(((t-tau1)/tau2).^2));
Pow_Sn=sum(Sn.^2)/numel(Sn); % compute signal power
rn=randn(1, numel(t));
rn_power=sum(rn.^2);
Noise_amp=sqrt(Pow_Sn./((10^(Req_SNR/10)))); %
Noise=rn.*Noise_amp;
Sn_Noise=Sn+Noise;
SNR_measured=snr(Sn,Noise); % to test.
snr requires the clean signal and the noise.
Result:
SNR_measured =
10.2936

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Measurements and Feature Extraction 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by