Hi , please what is the difference between randn and awgn , when adding white gaussian noise to get snr = 10dB , also I see difference in result when using snr function .
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
P_rms = rms(signal)^2; %
noisy_signal_1 = awgn(signal,10,'measured');
noisy_signal_2 = signal+0.1*P_rms*randn(L_t,1);
snr1=snr(signal,awgn(signal,10,'measured'))
snr2=snr(signal,noisy_signal_2)
var1=var(noisy_signal_1);
var2=var(noisy_signal_2);
0 commentaires
Réponses (1)
Meg Noah
le 7 Août 2025
They are the same.
% signal is a sine wave of 2 Hz
nSamples = 10000;
f = 2; % [Hz]
time = linspace(0, 2, nSamples+1);
signal = sin(2*pi*f*time);
% calculate the signal power
signalPower = sum((signal).^2)./nSamples;
% SNR in db is 10log(Psignal/Pnoise)
snrDb = 10; % [dB]
% noise power such that signal power is 10 dB more
% 10 = 10 log (Ps / Pn)
% Pn is variance which for zero mean gaussian noise
% is essentially - square sum of all samples -> divided by numSamples
noiseStd = sqrt(signalPower / 10^(snrDb/10));
noiseMean = 0;
% generate the gaussian white noise
noiseValues = noiseStd*randn(nSamples,1) + noiseMean;
% verify the Signal-to-Noise value
noisePower = sum(noiseValues.^2)/numel(noiseValues);
SNR = 10*log10(signalPower/noisePower);
fprintf(1,"noiseStd: model input: %f simulation output: %f\n", noiseStd, std(noiseValues));
fprintf(1,"SNR: %f\n", SNR);
% compare to awgn
noisedSignal = awgn(signal,10,'measured');
awgnNoiseValues = noisedSignal - signal;
awgnNoisePower = sum(awgnNoiseValues.^2)/numel(awgnNoiseValues);
SNR = 10*log10(signalPower/awgnNoisePower);
fprintf(1,"awgnNoiseStd: simulation output: %f\n", std(awgnNoiseValues));
fprintf(1,"SNR: %f\n", SNR);
0 commentaires
Voir également
Catégories
En savoir plus sur Propagation and Channel Models dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!