基于Python的语音信号处理(1)——能量分离算法研究

前言

笔者要投身于语音信号的研究当中,这段时间会更一些语音信号相关算法研究。
能量分离算法(ESA)使用非线性能量算子来跟踪语音信号,将只包含单个共振峰的语音信号分离成频率分量与幅值分量。
ESA基于Teager能量算子,其中在离散领域中其能量算子可以表示为:
s(n)*s(n)-s(n+1)*s(n-1)
s(n)代表语音信号

Teager能量算子的python实现

def Teager_power_function(audio_wav):
    Teager_power=np.zeros(len(audio_wav))
##############离散Teager能量算子的公式=S(n)*S(n)-S(n+1)*S*(n-1)
    for i in range(1,len(audio_wav)-1):
        Teager_power[i]=audio_wav[i]*audio_wav[i]-audio_wav[i+1]*audio_wav[i-1]
    return Teager_power

ESA算法的实现

由于具体的公式比较麻烦,这里就不贴了,大家可以去看韩纪庆的语音信号处理第二章2.4.3节的讲解。

r_d=Teager_power_function(audio_1)
y=np.zeros(len(audio_1))
###########前向差分
for i in range(1,len(audio_1)):
    y[i]=audio_1[i]-audio_1[i-1]
z=np.zeros(len(audio_1))
###############后向差分
for i in range(0,len(audio_1)-2):
    z[i]=audio_1[i+1]-audio_1[i] 
    
y_d=Teager_power_function(y)
z_d=Teager_power_function(z)
G=1-(y_d+z_d)/(4*r_d)
f=(i/2*3.14*20)*np.arccos(G)
a=np.sqrt(r_d/(1-pow(G,2)))
plt.figure(1)
plt.plot(f)
plt.figure(2)
plt.plot(a)

这部分代码主要做了两件事,用y与z来代表语音信号的前向与后向差分,然后分别求得y与z的Teager能量算子,最后根据相应的公式求得频率与幅值的结果。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值