利用噪声和纯净语音合成带特定噪声的语音数据。例如:将说话的声音和风声混合在一起,产生带有风声的语音数据。
信噪比计算公式:
S
N
R
=
10
⋅
l
o
g
10
p
s
p
n
SNR=10\cdot log_{10} \frac{p_s}{p_n}
SNR=10⋅log10pnps
p
s
:
p_s:
ps:信号能量
p
n
:
p_n:
pn:噪声能量
def ge_NoiseData(clean_data, noise_data, snr):
"""
利用纯净语音和噪声产生混合语音
clean_data:纯净语音
noise_data:噪音数据
snr:信噪比 dB
"""
clean_pwr = sum(abs(clean_data)**2)
noise_pwr = sum(abs(noise_data)**2) #计算音频信号能量
#语音合成要保证两段信号的长度相等
if len(noise_data) < len(clean_data):
tmp = (len(clean_data) // len(noise_data)) + 1
noise_data = np.array(noise_data * tmp)
noise_data = noise_data[:len(clean_data)]
else:
noise_data = noise_data[:len(clean_data)]
noise_data = noise_data - np.mean(noise_data)
coeff = np.sqrt( (clean_pwr / (10**(snr / 10))) / noise_pwr ) #噪声系数计算
new_data = clean_data + coeff * noise_data
return new_data