Добавьте случайный шум с определенным SNR к сигналу - PullRequest
0 голосов
/ 21 октября 2018

У меня случайно сгенерированный сигнал, например:

%frequency
f1 = 1000; f2 = 2000;
Fs = 8000; %sampling frequency

%amplitudes
amp1 = 0.75;
amp2 = 0.2;

%time
dt = 1/Fs
stopTime = 0.3;
t = 0:dt:stopTime;

%random noise
noise = randn(1,length(t))

%generated signal
Signal = amp1*sin(2*pi*f1*t) + amp2*sin(2*pi*f1*t) + noise;

Теперь мне нужно создать два сигнала S1, S2 со случайным шумом с определенным SNR.Шум, добавленный к S1, должен быть некоррелированным с шумом, добавленным к S2. Вот что я попробовал:

%SNR in dB
SNR = [-80,-40,-20,0,20,40,80];

%S1,S2 = Signal + rand noise with SNR -40dB
S1 = awgn(Signal,SNR(2),'measured')
S2 = awgn(Signal,SNR(2),'measured')

Это правильный подход для создания случайного шума с SNR в диапазоне от -80дБ до + 80дБ?Будет ли шум, добавленный к S1, не связан с шумом, добавленным к S2?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете просто рассчитать дисперсию сигнала и добавить шум с дисперсией, необходимой для получения желаемого SNR.Вот пример кода Python в качестве примера

import scipy as sp
import scipy.fftpack as fft

# frequency
f1 = 1000.0
Fs = 8000.0  # sampling frequency

# amplitudes
amp1 = 0.75

# time
n = sp.arange(1024)

# Desired SNR in dB
SNR_dB = 40

# Desired linear SNR
snr = 10.0**(SNR_dB/10.0)
print "Linear snr = ", snr

# Measure power of signal
signal1 = amp1*sp.sin(2*sp.pi*f1/Fs*n)
p1 = signal1.var()
print "Power of signal1 = ", p1

# Calculate required noise power for desired SNR
n = p1/snr
print "Noise power = ", n
print "Calculated SNR =  %f dB" % (10*sp.log10(p1/n))

# Generate noise with calculated power
w = sp.sqrt(n)*sp.randn(1024)

# Add noise to signal
s1 = signal1 + w

Будет ли шум, добавленный к S1, не коррелироваться с шумом, добавленным к S2?

Да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...