Python 给实值和复值信号加噪声
信噪比
信噪比的定义为:
S
N
R
=
10
lg
P
s
P
n
SNR = 10 \lg \frac{P_{s}}{P_{n}}
SNR=10lgPnPs
P
s
P_{s}
Ps为信号的功率,
P
n
P_{n}
Pn为噪声的功率
实值信号加噪
#input:
# s: real_signal
# snr: 信噪比
#return:
# sn: 带噪信号
def realsig_addnoise(s, snr):
Ps = np.sum(np.power(s, 2)) / len(s) #信号的功率
Pn = Ps / (np.power(10, snr / 10))
noise = np.random.randn(len(s)) * np.sqrt(Pn)
sn = s + noise
return sn
复值信号加噪
原理和实值信号差不多,分别给信号的实部和虚部加噪,然后再将实部和虚部组成复值信号
def complexsig_addnoise(s, snr):
#实部加噪
s_r = np.real(s)
psr = np.sum(np.abs(s_r)**2)/ len(s_r)
pnr = psr / (np.power(10, snr / 10))
noise_r = np.random.randn(len(s_r)) * np.sqrt(pnr)
#虚部加噪
s_im = np.imag(s)
psim = np.sum(np.abs(s_im)**2)/ len(s_im)
pnim = psim / (np.power(10, snr / 10))
noise_im = np.random.randn(len(s_im)) * np.sqrt(pnim)
#构成复数噪声信号
noise = noise_r +1j*noise_im
sn = s + noise
return sn