作者:桂。

时间:2017-05-24  10:06:39

主要是《Speech enhancement: theory and practice》的读书笔记,全部内容可以点击这里

书中代码:http://pan.baidu.com/s/1hsj4Wlu,提取密码:9dmi


 一、谱减的基本原理

  A-基本问题

基本模型是加性噪声:

频域模型:

所谓谱减法,可以通过不同的假设进行,一般的:

通常为了避免幅值出现负数,加上一个半波整流。这时的幅度估计+带噪信号的相位,即可得出降噪的信号。

  B-典型

分别取 p = 1, p = 2分析。

p = 1时,谱减

p = 2时,谱减

可以看出p = 2是基于统计无关的假设:

反过来看看p = 1的情形,可以写成:

也就是clean信号与noise相位相同,且统计相关。

对比来看,p =  2的假设在应用场景里应该比 p = 1更合理,尽管作为非平稳信号,完全无关的假设难以严格满足。p取其他值的分析类似

谱减法的基本框架:

回顾上面的谱减法,理论分析的前提是基于频点,事实上许多应用场景里,noise与clean(特别是在高频区域)满足一定的正交性,即该频点完全属于clean/noise,而非二者的混合,从这一点来说p的不同取值带来的影响远没有理论中体现的那么大。下图也说明了:高频部分的正交性更明显。

二、谱减法的不足

1-带来了Musical noise

谱减过程中没有完全消除噪声,而把峰值保留了下来,造成Musical noise:

2-相位失真

相位不准确带来的信号失真,带噪的相位来表达clean的相位,造成语音的可懂度下降(书中指出SNRs (<0 dB),其实这么说是不合适的,噪声与信号正交程度越小,这种论证才有意义).

三、其它谱减法

  A-Boll的过减法

Boll的思路其实就是平滑,如果平滑呢?这里没有用线性平滑,而是用了一个min/max{相邻帧信息}的思路,为了防止毛刺:1)谱减的门限D尽可能Max,2)信号的估计尽可能min

Berouti等人也提出了一种方法:

这个思路的核心在于β的选取,其实就是为了减少毛刺引入了填充,其中

,图中可以观察到β的影响:

  B-非线性谱减

这个的动机是:现实中,噪声对所有频段的影响,并不是均衡的,按上面的思路过于粗糙,例如汽车噪声,可能在某一频段干扰明显,又比如一些噪声对于低频影响更大。非线性谱减的基本规则:

核心在于a(w)不再是一个常数,取值与频率有关。其中的参数一般平滑与处理一下

a通常取非线性函数

其中ρ

信噪比越大,a越小。

  C-多带谱减法

多带谱减也可以归类为非线性谱减,其实就是分自带计算,类似分治法

谱减的思路可以按照上面任何一个方法,不同的是用了两个参数:α、

对于α:

其中

对于

多带的实现框图

  D-MMSE谱减法

上面提到的谱减法,可以有一种广义的定义方式

且上面的方法都是通过实验经验设定参数,其实对于参数γ、α可以借助MMSE(最小均方误差估计)/其他准则合理即可:

得出的参数估计(细节可参考这里)

其中

从而得出降噪结果:

这里用到一个粗糙但简便的假设:噪声谱与干净信号谱的相位相同

如果假设,可以得到类似的降噪算法

其中是与p有关的常数,如对应。得到估计之后可以通过上面提到一些方式作进一步的后处理。

这个方法的关键在于:作为一个理论值,实际应用如何估计它?

直观的思路是,可以借助已处理的信息进行估计:,也可以利用当前信息估计:,一种折中的思路是二者的权衡:

  E-扩展谱减法

上面的算法都需要借助VAD技术/噪声估计技术,实际上 维纳+谱减 的结合,可以实现降噪并称该方法:扩展谱减法。

维纳滤波原理

其中y为带噪信号,x为clean,n为noise.对于也就是

细节处理上可以用一下平滑

利用估计的噪声谱得出当前的噪声谱

从而估计当前的信号

它是自适应的,不需要估计噪声,因此对于非平稳噪声环境也同样适用。实现框图:

Chapter 5:Spectral-Subtractive Algorithms的更多相关文章

  1. Chapter 1:Introduction

    作者:桂. 时间:2017-05-24  08:06:45 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 1. ...

  2. [Algorithm] 如何正确撸<算法导论>CLRS

    其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话 ...

  3. UVA 10652 Board Wrapping 计算几何

    多边形凸包.. .. Board Wrapping Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu ...

  4. 某Facebook工程师写的攻略。

    Chapter 1 Interesting read, but you can skip it. Chapter 2 2.1 Insertion Sort - To be honest you sho ...

  5. scikit-learn:class and function reference(看看你究竟掌握了多少。。)

    http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition Reference This is t ...

  6. 剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite)

    目录 6.1 本篇概述 6.1.1 本篇内容 6.1.2 基础概念 6.2 UE5新特性 6.2.1 UE5编辑器 6.2.1.1 下载编辑器及资源 6.2.1.2 启动示例工程 6.2.1.3 编辑 ...

  7. JVM,我就不信学不会你了

    JVM 对 Java 有多重要,对程序员面试有多重要,这些不用多说. 如果你还没意识到学 JVM 的必要性,或者不知道怎么学 JVM,那么看完这篇文章,你就能知道答案了. 曾经的我很不屑于学 JVM, ...

  8. 论文解读DEC《Unsupervised Deep Embedding for Clustering Analysis》

    Junyuan Xie, Ross B. Girshick, Ali Farhadi2015, ICML1243 Citations, 45 ReferencesCode:DownloadPaper: ...

  9. Chapter 9:Noise-Estimation Algorithms

    作者:桂. 时间:2017-06-14  12:08:57 链接:http://www.cnblogs.com/xingshansi/p/6956556.html 主要是<Speech enha ...

  10. planning algorithms chapter 2

    planning algorithms chapter 2 :Discrete Planning 离散可行规划导论 问题定义 在离散规划中,状态是"可数"的,有限的. 离散可行规划 ...

随机推荐

  1. Linux-进程描述(5)之进程环境

    main函数和启动例程 当内核使用一个exec函数执行C程序时,在调用main函数之前先调用一个特殊的启动例程,可执行程序将此例程指定为程序的起始地址.启动例程从内核获取命令行参数和环境变量,然后为调 ...

  2. 比较Java中几个常用集合添加元素的效率

    初始化需要进行比较的集合,统一增加10万个元素,获取整个过程的执行时间. 1.List集合增加元素 private static void testList() { List<Integer&g ...

  3. [ext4]03 磁盘布局 – Flexible group分析

    Flexible Block Groups (flex_bg),我称之为"弹性块组",是EXT4文件系统引入的一个feature. 所谓Flexible Block Groups, ...

  4. 第一篇 Rewrite规则简介

    1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用到rewrite模块,必 ...

  5. linux系统资源限制

    概述 拜读了小Y对ora-7445问题的解读,猛然惊醒发现自己对oracle运行在linux上的资源限制一直是朦朦胧胧的,以此文章督促自己深入了解. 1 limits.conf 和sysctl.con ...

  6. Log4j appender输出类型配置

    Log4j官方的appender给出了一下几种实现 org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), ...

  7. hdu4681 String DP(2013多校第8场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路: 我是胡搞过的 就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串 然后对于A ...

  8. MFC基础程序设计VS2015 最新03

    视频教程地址观看:http://pan.baidu.com/s/1mhKQ6kK 一.数字(浮点数或整数)转为文字:a)如果转为窄字符字符串,sprintf函数很好用,浮点数都没问题:b)如果转为宽字 ...

  9. 看完48秒动画,让你不敢再登录HTTP网站(附完整示例代码)

    在我的 单点登录SSO示例代码 一文中,强烈不建议部署HTTP的SSO服务站点. 在此写个基于网络包嗅探的HTTP会话劫持程序,给大家一个直观的危害性展示. 示例中,我在一台Mac上登录58同城,被另 ...

  10. 自定义ScriptableObject属性显示

    自定义ScriptableObject属性显示的三种方式 1. 继承Editor,重写OnInspectorGUI方法 Editor官方文档 需求 将TestClass中intData属性和strin ...