基于wRLS滤波器和神经网络回声残留抑制的AEC模型——延迟估计TDE

参考文献:WEIGHTED RECURSIVE LEAST SQUARE FILTER AND NEURAL NETWORKBASED RESIDUAL ECHO SUPPRESSION FOR THE AEC-CHALLENGE

参考视频:https://www.bilibili.com/video/BV19t421j7qR/?spm_id_from=333.999.0.0&vd_source=77c874a500ef21df351103560dada737

代码如下:

# 将认为有延时的信号放第一个参数,即近端麦克风信号
# 将认为没有延时的参考信号放第二个参数,即远端参考信号
def  Time_delay_Estimate(S_near,S_far,alpha=0.1):
    D,T = S_near.shape
    Phi = np.zeros((D))
   
    taus = []
    for i in range(T):
        Phi = alpha*Phi + (1-alpha)*(S_near[:,i]*np.conjugate(S_far[:,i]))
        tau = np.argmax(np.abs(np.fft.irfft(Phi/np.abs(Phi))))
        taus.append((tau))
    return taus

# 在频域上进行的延迟
def TDE_X(X,taus,inc_TDE,inc_frame):  # inc_TDE=250ms;inc_frame=10ms,即对x'(t)进行linear filter时需要进行stft的帧移长度

    D,T = X.shape

    N_spread = int(inc_TDE/inc_frame)  # taus需要复制的次数
    
    taus = np.expand_dims(np.array(taus),-1)
    taus_frame = taus/inc_frame  # 把样本点的taus换算成帧数
    
    taus = np.tile(taus_frame,[1,N_spread]).reshape([-1])  # 进行扩展
    print(taus)
    X_TDE = np.zeros_like(X,dtype=complex)

    for i in range(T):  # 对x的每一帧进行延时
        # index = max(i-int(taus[i]),0)
        index = i-int(taus[i])
        if i-int(taus[i])<0:
            continue
        else:
            X_TDE[:,i]=X[:,index]  # x的第i帧 等于 x的第i帧延迟taus,即x(i-taus)

    return X_TDE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值