基于python的griffin语音信号重建

griffin算法是基于没有相位的线性语谱图进行重建。本文采用45ms窗宽,10ms滑动窗的语谱图进行语音信号重建。以下为python实现的griffin重建算法。基本思想:

step1: 初始化一个随机相位

step2: 短时反傅里叶变换

step3: 短时傅里叶变换,保留相位,幅度取最初的幅度

step4: 循环至停止N次迭代。

gl_iters = 120
n_fft, hop_length, win_length = 720, 160,720
def _griffin_lim(S):
    angles = np.exp(2j * np.pi * np.random.rand(*S.shape))
    S_complex = np.abs(S).astype(np.complex)
    y = _istft(S_complex * angles)
    for i in range(gl_iters):
        angles = np.exp(1j * np.angle(_stft(y)))
        y = _istft(S_complex * angles)
    return y


def _stft(y):
    
    return librosa.stft(y=y, n_fft=n_fft, hop_length=hop_length, win_length=win_length)


def _istft(y):
    return librosa.istft(y, hop_length=hop_length, win_length=win_length)

 

AudioData, sr = librosa.load(filename, sr=16000, mono=True)  # 使用文件采样率
D = librosa.stft(AudioData, n_fft=n_fft, hop_length=hop_length, win_length=win_length)
spect, phase = librosa.magphase(D)  # 语音信息域幅度和相位3密切关联
ReAudio = _griffin_lim(D)

plt.plot(AudioData)
plt.plot(ReAudio)

原始语音信号

重建一次语音信号

重建120次语音信号

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值