语音增强——基本谱减法及其python实现

这篇具有很好参考价值的文章主要介绍了语音增强——基本谱减法及其python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考视频:

https://www.bilibili.com/video/BV1eV411W7V4/?spm_id_from=333.788&vd_source=77c874a500ef21df351103560dada737

语音增强(去噪):消除语音中的噪声,增加语音听感与可懂度。

顾名思义,谱减法,就是用带噪信号的频谱减去噪声信号的频谱。谱减法基于一个简单的假设:假设语音中的噪声只有加性噪声,只要将带噪语音谱减去噪声谱,就可以得到纯净语音,这么做的前提是噪声信号是平稳的或者缓慢变化的。提出这个假设就是基于短时谱(25ms),就是频谱在短时间内是平稳不变的。

 语音增强——基本谱减法及其python实现

那噪音是怎么估计出来的呢?文献中一般都假设输入的一段语音中前n帧作为silence时间,也就是说这段时间没有语音输入,只有噪音,可以称之为底噪,将这前n帧中的噪音强度取平均值,作为估计出来的噪音。

实际上,我们不知道噪声是什么,我们要想办法对噪声进行估计,一般我们认为噪声是加性噪声,从语音开始的那一小段对噪声进行估计。一般去带噪语音前20-40帧进行噪声估计

但是这样做的方法有一个缺点就是由于我们估计噪音的时候取得平均值,那么有的地方噪音强度大于平均值的时候,相减后会有残留的噪音存在。在噪音波形谱上表现为一个一个的小尖峰,我们将这种残存的噪声称之为音乐噪声(music noise)。

语音增强——基本谱减法及其python实现

运行程序后出现问题如下:

语音增强——基本谱减法及其python实现

解决方法:

你可以偷偷看一下你是不是在新建python文件时文件命名是这样的情况:

‘test_’开头或者‘_test’结尾

因为这个,所以在运行这个python文件的时候报错Empty suite

比如你是test_A,把下划线去掉就可以了testA,然后就可以正常运行了。

下面来说一下为什么‘test_’开头或者‘_test’结尾用会导致出现Empty suite:

因为test_ 或者 _test 会使得程序认为你这个是做自动化测试的测试用例文件,

程序如下:

import librosa
from librosa.core.spectrum import amplitude_to_db
import numpy as np
import soundfile as sf
import matplotlib.pyplot as plt

if __name__ == "__main__":
    clean_wav_file = "sf1_cln.wav"
    clean,fs = librosa.load(clean_wav_file,sr=None) # sr=None表示读取原始信号的采样率
    print(fs)

    noisy_wav_file = "sf1_n0L.wav"
    noisy,fs = librosa.load(noisy_wav_file,sr=None)

    # 计算 nosiy 信号的频谱,帧长win_length,帧移hop_length,傅里叶变换的点数是n_fft=256个点
    S_noisy = librosa.stft(noisy,n_fft=256, hop_length=128, win_length=256)  # D x T
    D,T = np.shape(S_noisy)
    Mag_noisy= np.abs(S_noisy)
    Phase_nosiy= np.angle(S_noisy)
    Power_nosiy = Mag_noisy**2 # 得到信号的能量谱
    print(fs)
    # 估计噪声信号的能量
    # 由于噪声信号未知 这里假设 含噪(noisy)信号的前30帧为噪声
    Mag_nosie = np.mean(np.abs(S_noisy[:,:30]),axis=1,keepdims=True) # 沿T的维度取均值,输出维度是129*1
    Power_nosie = Mag_nosie**2
    Power_nosie = np.tile(Power_nosie,[1,T]) # 对前30帧进行不断复制到与带噪语音等长


    # 能量减
    Power_enhenc = Power_nosiy-Power_nosie
    # 保证能量大于0
    Power_enhenc[Power_enhenc<0]=0
    Mag_enhenc = np.sqrt(Power_enhenc)

    # 幅度减
    # Mag_enhenc = np.sqrt(Power_nosiy) - np.sqrt(Power_nosie)
    # Mag_enhenc[Mag_enhenc<0]=0

    # 对信号进行恢复
    S_enhec = Mag_enhenc*np.exp(1j*Phase_nosiy)
    enhenc = librosa.istft(S_enhec, hop_length=128, win_length=256)
    sf.write("enhce.wav",enhenc,fs)
    print(fs)
    # 绘制谱图
    
    plt.subplot(3,1,1)
    plt.specgram(clean,NFFT=256,Fs=fs)
    plt.xlabel("clean specgram")
    plt.subplot(3,1,2)
    plt.specgram(noisy,NFFT=256,Fs=fs)
    plt.xlabel("noisy specgram")   
    plt.subplot(3,1,3)
    plt.specgram(enhenc,NFFT=256,Fs=fs)
    plt.xlabel("enhece specgram")  
    plt.show()
    
    plt.imshow(librosa.amplitude_to_db(Mag_enhenc,ref=np.max),origin='lower') 
    plt.show()
    
    
   
    # plt.show()
    # plt.savefig("suntest_1.bmp")

运行结果如下:

语音增强——基本谱减法及其python实现

 文章来源地址https://www.toymoban.com/news/detail-493058.html

语音增强——基本谱减法及其python实现

 

到了这里,关于语音增强——基本谱减法及其python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 语音增强的算法及应用

            语音增强的目的是从带噪语音中提取尽可能纯净的原始语音,主要目标是提高语音质量和可懂度。这一领域的发展历程相当丰富,多年来,学者们一直在努力寻求各种优良的语音增强算法。         在近年的研究中,各种语音增强方法不断被提出,如基于小波

    2024年02月07日
    浏览(51)
  • 【C++】容器篇(三)—— stack的基本介绍及其模拟实现

    前言: 在之前的学习中我们已经了解了 vector 和 list ,今天我将带领学习的是关于STL库中的 stack的学习!!! 目录 (一)基本介绍 1、基本概念  2、容器适配器 (二)基本使用 (三)stack模拟实现 1、stack的使用 2、 模拟实现 (四)题目讲解 1、逆波兰表达式求值 (五)总

    2024年02月06日
    浏览(48)
  • 【C++】优先级队列的基本概念以及其模拟实现

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! C++仿函数(function object)是一种可以像函数一样调用的对象。仿函数通常是一个类,它重载了函数调用运算符operator(),使得对象可以被调用。 仿函数就是基于函数模板生成

    2024年02月15日
    浏览(48)
  • c语言数据结构——链表的实现及其基本操作

    顺序表的问题及思考 问题: 中间/头部的插入删除,时间复杂度为O(N) 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到 200,我们再继续插入了5个数据,后面没有数据插

    2023年04月09日
    浏览(85)
  • 扩展语音识别系统:增强功能与多语言支持

            在之前的博客中,我们成功构建了一个基于 LibriSpeech 数据集的英文语音识别系统。现在,我们将对系统进行扩展,增加一些增强功能,并尝试支持多语言识别。 语音合成   --除了语音识别,我们还可以增加语音合成( Text-to-Speech, TTS )功能,将文本转换为语音输

    2024年02月19日
    浏览(61)
  • AudioGPT 语音技术全覆盖:语音识别、增强、分离、风格迁移等 | 开源日报 No.114

    Stars: 1.7k License: MIT oil.nvim 是一个类似于 vim-vinegar 的文件浏览器,允许您像普通 Neovim 缓冲区一样编辑文件系统。其主要功能包括支持常见插件管理器、通过适配器抽象进行所有文件系统交互以及提供 API 来执行各种操作。该项目的关键特点和核心优势包括: 通过适配器实现跨

    2024年02月04日
    浏览(46)
  • 【Python 千题 —— 基础篇】减法计算

    题目描述 编写一个程序,接受用户输入的两个数字,然后计算这两个数字的差,并输出结果。 输入描述 输入两个数字,用回车隔开两个数字。 输出描述 程序将计算这两个数字的差,并输出结果。 示例 示例 ① 输出: 下面是本题的代码:

    2024年02月06日
    浏览(49)
  • 传统语音增强——最小均方(LMS)自适应滤波算法

    一、语音降噪的意义 语音降噪主要研究如何利用信号处理技术消除信号中的强噪声干扰,从而提高输出信噪比以提取出有用信号的技术。消除信号中噪声污染的通常方法是让受污染的信号通过一个能抑制噪声而让信号相对不变的滤波器,此滤波器从信号不可检测的噪声场中取

    2024年02月03日
    浏览(54)
  • Python实现图像对比度增强

    Python实现图像对比度增强 在数字图像处理中,对比度增强被广泛运用于图像增强、图像去噪、特征提取等领域。本文将用Python实现一种简单的图像对比度增强方法,并提供源代码。 首先,我们需要导入必要的库:numpy和OpenCV。在执行之前确保已安装这两个库。 以下是我们实

    2024年02月07日
    浏览(55)
  • ICASSP 2023 | 解密实时通话中基于 AI 的一些语音增强技术

    ‍ 动手点关注 干货不迷路 实时音视频通信 RTC 在成为人们生活和工作中不可或缺的基础设施后,其中所涉及的各类技术也在不断演进以应对处理复杂多场景问题,比如音频场景中,如何在多设备、多人、多噪音场景下,为用户提供听得清、听得真的体验。作为 RTC 方案中不可

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包