zoukankan      html  css  js  c++  java
  • 数学之路(3)-机器学习(3)-机器学习算法-神经网络[18]

    编写线性神经网络 的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


  • 相关阅读:
    Linux常用命令(二)
    C#异步调用
    Ajax运用总结
    SQL Server2005 FOR XML PATH 语句的应用
    SQL Server 2005 处理交叉表
    如何控制并发和控制死锁(内含pb的处理要点)
    WPF 中的换行符
    C#委托的异步调用
    pivot 附近有语法错误,您可能需要将当前数据库的兼容级别设置为更高的值。
    应用系统BUG分布小结
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301571.html
Copyright © 2011-2022 走看看