• 数学之路(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


  • 相关阅读:
    Ajax中onreadystatechange函数不执行,是因为放在open()后
    js调用ajax案例2,使用ok
    js调用ajax案例
    通过设置ie的通过跨域访问数据源,来访问本地服务
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较以及问题
    Net 4.5 WebSocket 在 Windows 7, Windows 8 and Server 2012上的比较
    windows 系统纯净版官网下载地址
    iOS:给Git仓库上传代码时,超过100M会被拒绝(例如github和oschina)
    iOS:Xcode8以下真机测试iOS10.0和iOS10.1配置包
    iOS:高德地图的使用
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301571.html
Copyright © 2020-2023  润新知