编写线性神经网络 的python代码,目标是通过输入在混杂噪声的语音中前面预留的待拟合的背景音乐,以供线性神经网络拟合背景音乐,输出能与混合后形成声音中的背景音乐尽可能一致的噪声,部分python代码如下:
#线性逼近前段噪声 b=1 a0=5e-1 a=0.0 r=1.5 x=[] d=[] ii=0 for audio_i in xrange(0,framerate/2): if fi_wave_data[audio_i]!=0.: x.append([]) x[ii].append(1) x[ii].append(fi_wave_data[audio_i]) d.append(new_wave_data[audio_i]) ii+=1 if ii>100: break x=np.array(x) d=np.array(d) w=np.random.rand(2)*np.mean(x)#np.array([b,0]) expect_e=15 maxtrycount=10000
最后去除噪声,并绘制声音的波形,去除噪声的方式,是直接从混合了背景音乐噪声的声音波形中直接减去线性神经网络拟合后的噪声
#复制并除去背景声音 jg_wave_data=copy.deepcopy(new_wave_data) jg_temp_wavedata=np.hstack((fi_wave_data,fi_wave_data))[:len(new_wave_data)] jg_temp_wavedata=jg_temp_wavedata[:len(new_wave_data)]*w[1]+w[0] jg_wave_data=jg_wave_data-jg_temp_wavedata for jg_i in xrange(0,len(jg_wave_data)): if abs(jg_wave_data[jg_i])<500: jg_wave_data[jg_i]=0 jg_wave_data[:framerate]=0 jg_wave_data =jg_wave_data.astype(wave_data.dtype) jg_str_data=jg_wave_data.tostring() print "save output wav...." fend.setnchannels(nchannels) fend.setframerate(framerate) fend.setsampwidth(sampwidth) fend.writeframes(jg_str_data) # 绘制波形 time = np.arange(0, nframes) * (1.0 / framerate) wave_data.shape = -1, 2 wave_data = wave_data.T pl.subplot(321) pl.plot(time, wave_data[0]) pl.subplot(322) pl.plot(time, wave_data[1], c="g") pl.xlabel("time (seconds)") # 绘制波形 new_wave_data.shape = -1, 2 new_wave_data =new_wave_data.T pl.subplot(323) pl.plot(time,new_wave_data[0]) pl.subplot(324) pl.plot(time, new_wave_data[1], c="g") pl.xlabel("time (seconds)") pl.show() # 绘制波形 jg_wave_data.shape = -1, 2 jg_wave_data =jg_wave_data.T pl.subplot(325) pl.plot(time,jg_wave_data[0]) pl.subplot(326) pl.plot(time, jg_wave_data[1], c="g") pl.xlabel("time (seconds)") pl.show()
通过预先采集一小段噪声信号,来实现后期对语音的除噪,实现将背景音乐去除
本博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/u010255642