speex降噪算法流程介绍与算法原理

2023-10-20 02:10

本文主要是介绍speex降噪算法流程介绍与算法原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、speex降噪流程介绍

本文对speex去噪算法步骤做一些简要整理和介绍,以提供给对该算法感兴趣的读者参考。

1)preprocess_analysis()包括两部分,主要是加窗交叠傅立叶(fft)变换等常用的信号处理算法。
1.1)预处理
      信号输入,加窗,交叠(overlap),时频傅立叶变换(fft)
1.2)计算能量
      计算频域能量ps,而filterbnak_compute_bank32()计算基于Bark带(临界频带)内的带噪信号能量。
2)update_noise_prob()更新噪声能量,使用的方法比较简单,即一般的固定迭代因子平滑算法;
3)更新mel噪声谱能量;
4)计算后验信噪比和进行先验信噪比更新:
post_SNR = ps/noise - 1;
gamma = 0.1 + 0.89*(old/(old+noise))^2;
priori_SNR= gamma*max(0,post) + (1-gamma)*old_ps/noise;
5)先验信噪比平滑(zeta[i]),用于本底增益计算,计算范围包括fft域和Bark域(Bark域计算后没有用到)。 
6)计算Bark带(临界频带)内的EM算法增益和线性频域上的EM算法增益。
{注:EM(YARIV EPHRAIM 和 DAVID MALAH) 是语音增强领域的泰斗。}
考虑到在临界频带内幅度谱并不一定符合高斯随机分布,所以EM算法在Bark带内不能严格适用,这一点JEAN-MARC也在c代码中做了说明, 所以此处只以线性频率上的EM增益为例进行说明。
    6.1 )   weiner 滤波:prior_snr=   prior_snr /(   prior_snr +1);
    6.2 )  超几何分布增益参数 theta= prior_snr *(1+post_snr);
    6.3)   超几何分布增益 MM=exp(-theta/2)*[(1+theta)*I0(theta/2)+theta*I1(theta/2)];其中I0和I1是贝塞尔函数。
    6.4)   增益 g=min(1,prior_ratio*mm);
    6.5)   p=gain2[i];gain2是由临界频率计算后的增益扩展到线性频域后的增益。
    6.6)   约束增益:如果 g/3>st->gain  则 g=3*st->gain  ;
    6.7)  gain=g;     如果 gain<gain_floor  则  gain =gain_floor  ;
    6.8) 最终幅度谱增益
             gain2={p*sqrt(g)+(1-p)*sqrt(st->gain_floor  )}^2;
  7)将幅度谱增益gain2作用于fft幅度谱

   8)后处理,包括反傅立叶变换(ifft)、加合成窗函数、交叠相加,最终得到去噪以后的时域信号

二、降噪算法原理介绍

    speex降噪算法采用一种基于MMSE短时谱幅度估计的语音增强算法,即STSA-MMSE. 该算法利用了人耳对语音相位变换不敏感的特性,估算得到短时幅度谱之后,利用带噪语音相位信息,合成增强语音。另外spee还应用了MCRA算法进行噪声跟踪,此处不讨论。以下是STSA-MMSE算法原理推导:





三、算法优化思路

 1、优化先验信噪比的估计,先验信噪比能反映声场噪声的变化,其反应速度越灵敏,消噪效果越好。speex中是采用的”直接判决法“估计先验信噪比,该方法中平滑因子是固定的,可以采用自适应变化的平滑因子提高估计准确度。

 2、优化噪声谱跟踪算法,更精准的噪声跟踪对消噪能力提升明显。

 3、优化能量谱计算



这篇关于speex降噪算法流程介绍与算法原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243905

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.