语音增强任务添加混响

语音增强任务添加混响

    • 任务理解
    • 例程

任务理解

1、降噪
clean + noise -> clean
clean + rir + noise -> clean + rir
2、解混响
将直达声音作为目标。混响由声波从多个路径反射形成,需要的是直达路径的,多次反射的不需要。rir模拟当前位置的声波和房间内不同路径传播到麦克风的线性系统的冲击响应。clean相当于离麦克风较近的位置录制,添加混响以后就相当于在某个较远位置且存在反射的位置录制,rir模拟不同的位置和录音环境,直接使用近处的是无法对上远处的。去混响不是得到原始干净语音,而是缩短混响时间。直接使用clean不能训练,因为存在延时,需要加一个对齐模块。
clean + rir + noise -> clean_direction

例程

添加混响例程,参考SDDNet1

def add_reverb(cln_wav, rir_wav, return_direct = False):
    """
    Args:
        :@param cln_wav: the clean wav
        :@param rir_wav: the rir wav
    Return:
        :@param wav_tgt: the reverberant signal
    """
    
    rir_wav = np.array(rir_wav)
    rir = rir_wav
    wav_tgt = sps.oaconvolve(cln_wav, rir)
    #### generate dereverb label for training data
    if(return_direct is True):
        rir_direct = np.zeros(rir_wav.shape)
        rir_late = np.zeros(rir_wav.shape)
        clean_len = len(cln_wav)
        #cln_wav = cln_wav[:, np.newaxis]
        predelay_ms = 100
        dt = np.argmax(rir_wav)
        dt = int(dt + (predelay_ms * 16000 / 1000))
        rir_direct[:dt] = rir_wav[:dt]
        rir_late[dt:] = rir_wav[dt:]
        #print(rir_direct.shape)
        #print(cln_wav.shape)
        wav_tgt_direct = sps.oaconvolve(cln_wav, rir_direct, mode='full')[:clean_len]
        wav_tgt_late = sps.oaconvolve(cln_wav, rir_late, mode='full')[:clean_len]
        return wav_tgt, wav_tgt_direct, wav_tgt_late
    else:
        return wav_tgt

将最大峰值当作直达声,路径最短传播损耗最小。


  1. https://github.com/IMYBo/SDDNet/blob/main/tools/time_dataset_dereverb.py#L106 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值