将具有特定 SNR 的随机噪声添加到信号中
Add random noise with specific SNR to a signal
我有随机生成的信号,例如:
%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;
现在我需要创建两个具有特定 SNR 随机噪声的信号 S1、S2。
添加到 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 范围为 -80dB 到 +80dB 的随机噪声的方法是否正确?添加到 S1 的噪声是否与添加到 S2 的噪声无关?
您可以只计算信号的方差并添加具有产生所需 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
will noise added to S1 be uncorrelated with noise added to S2?
是的。
我有随机生成的信号,例如:
%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;
现在我需要创建两个具有特定 SNR 随机噪声的信号 S1、S2。 添加到 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 范围为 -80dB 到 +80dB 的随机噪声的方法是否正确?添加到 S1 的噪声是否与添加到 S2 的噪声无关?
您可以只计算信号的方差并添加具有产生所需 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
will noise added to S1 be uncorrelated with noise added to S2?
是的。