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

news/2024/7/10 20:11:41 标签: Speex, ANS, 开源, 算法
一、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、优化能量谱计算




http://www.niftyadmin.cn/n/966641.html

相关文章

HTTP协议详解 (转)

转自 http://blog.csdn.net/gueter/article/details/1524447引言 HTTP是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年提出&#xff0c;经过几年的使用与发展&#xff0c;得到不断地完善和扩展。目前…

OSG3.4+VS2013-x64+QT5.6.2编译安装

目录 文件准备 QT 编译OSG 初始化设置 config 再次Config Generate Open Project 安装OSG 文件准备 第一步&#xff0c;下载所需要文件&#xff0c;编译osg需要三个文件osg、osg第三方库和osgdata,编译时需要用到cmake软件&#xff0c;我用的是vs2013和osg3.4&#x…

介绍一种音频信号分类方法

能用来区分语音和音乐信号的音频特征有很多种&#xff0c;如感觉特性、能量、功率谱和Mel频标倒谱(MFCC)系数,能量、平均过零率、基频和功率谱峰值等。以下介绍一种基于子带音调个数比与频谱倾斜度相结合的区分方法。 一、基本原理 不同类型的音频&#xff0c;其音调分量在各个…

win10+VS2015 编译64位的gdal,并配置环境

目录 一、下载 二、修改编译文件 解压后的文件中应该有一个nmake.opt文件&#xff0c;在编译之前需要修改nmake.opt中的一些配置。 三、编译 1、进入VS2015 X64 本机工具命令提示符&#xff0c;在菜单栏的Visual Studio 2015文件夹下 2、使用命令行&#xff0c;进入到源代…

python6种数据类型_python的6种基本数据类型--字典

# a.直接用 {} 创建&#xff0c;key:value对应>>> skills {"s1":"python","s2":"linux","s3":"html/css","s4":"JavaScript"}>>> skills{‘s1‘: ‘python‘, ‘s2‘: ‘…

Saltstack详细介绍

Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段&#xff0c;可以看做是pssh弱化的Puppet的组合。间接的反映出了saltstack的两大功能&#xff1a;远程执行和配置管理。Saltstack使用Python开发&#xff0c;是一个非常简单易用和轻量级的管理工具。由Master和Minio…

Qt开发问题

目录 error C1071:在注释中遇到意外的文件结束 Qt之msvc-version.conf loaded but QMAKE_MSC_VER isnt set error C1071:在注释中遇到意外的文件结束 这个应该是你移植了不同格式的文件&#xff0c;比如原来是linux下的编码格式&#xff0c;你拷贝到windows下&#xff0c;有…

数字阵列麦克风处理技术概述

转载自地平线机器人大讲堂&#xff0c;主讲人徐荣强。 2011年11月毕业于英国爱丁堡大学通信与信号处理专业&#xff0c;曾任诺基亚&#xff0c;联想&#xff0c;微软高级音频工程师。现在Horizon-Robotics负责语音相关硬件系统设计&#xff0c;涉及远场高灵敏度麦克风阵列设计&…