一 原理解析
从下图一中可以看出,该算法的原理也是先检测出来啸叫,然后通过陷波器来进行啸叫抑制的,和笔者以前分析的所用方法基本耦合。

 
二 源码分析
 
函数PAPR:计算峰值功率和平均功率的比值
 
def papr(frame, threshold):
"""Peak-to-Avarage Power Ratio (PAPR)
Returns all frequency indices where power is greater than avarage power + threshold,
which are possible candidates where howling occurs.
函数PTPR:计算峰值功率和阈值功率的比值,这里的阈值功率是系统可以产生啸叫的功率阈值,根实际环境有关系。
 
def ptpr(frame, threshold):
"""Peak-to-Threshold Power Ratio (PTPR)
函数PNPR:计算峰值功率和相邻频段功率的比值
 
def pnpr(frame, threshold):
"""Peak-to-Neighboring Power Ratio (PNPR)
Returns all frequency indices of power peaks,
which are greater than neighboring frequency bins by a threshold.
函数howling_detect该函数是检测出啸叫频点,是最重要的部分,啸叫抑制的难点就是怎么检出啸叫抑制的频点:这里通过三个维度来筛选,找出共同的频点,认为共同的频点就是啸叫的频点。
 
def howling_detect(frame, win, nFFT, Slen, candidates, frame_id):
insign = win * frame
spec = np.fft.fft(insign, nFFT, axis=0) #========== Howling Detection Stage =====================#
ptpr_idx = pyHowling.ptpr(spec[:Slen], 10)
papr_idx, papr = pyHowling.papr(spec[:Slen], 10)
pnpr_idx = pyHowling.pnpr(spec[:Slen], 15)
intersec_idx = np.intersect1d(ptpr_idx, np.intersect1d(papr_idx,pnpr_idx))
#print("papr:",papr_idx)
#print("pnpr:",pnpr_idx)
#print("intersection:", intersec_idx)
for idx in intersec_idx:
candidates[idx][frame_id] = 1
ipmp = pyHowling.ipmp(candidates, frame_id)
#print("ipmp:",ipmp)
result = pyHowling.screening(spec, ipmp)
#print("result:", result)
return result
三 总结
 
该算法从 效果来看,效果还是比较不错的,但是有一个维度难以把握,就是阈值的设置,这个是和实际环境有关系的,需要根据实际环境调试,这个也决定了算法的准确度。

基于python源码的啸叫抑制算法解析的更多相关文章

  1. Python源码学习(一)

    考虑到性能的要求,我在工作中用的最多的是c/c++,然而,工作中又经常会有一些验证性的工作,这些工作对性能的要求并不高,反而对完成的效率要求更高,对于这样的工作,用一种开发效率高的语言是合理的想法,鉴 ...

  2. Python源码分析(一)

    最近想学习下Python的源码,希望写个系列博客,记录的同时督促自己学习. Python源码目录 从Python.org中下载源代码压缩包并解压,我下载的是Python2.7.12,解压后: 对于主要 ...

  3. Python 源码剖析(六)【内存管理机制】

    六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...

  4. Python 源码剖析(一)【python对象】

    处于研究python内存释放问题,在阅读部分python源码,顺便记录下所得.(基于<python源码剖析>(v2.4.1)与 python源码(v2.7.6)) 先列下总结:      ...

  5. Python 源码学习之内存管理 -- (转)

    Python 的内存管理架构(Objects/obmalloc.c): _____ ______ ______ ________ [ int ] [ dict ] [ list ] ... [ str ...

  6. 读python源码--对象模型

    学python的人都知道,python中一切皆是对象,如class生成的对象是对象,class本身也是对象,int是对象,str是对象,dict是对象....所以,我很好奇,python是怎样实现这些 ...

  7. VS2013编译python源码

    系统:win10 手头有个python模块,是用C写的,想编译安装就需要让python调用C编译器.直接编译发现使用的是vc9编译,不支持C99标准(两个槽点:为啥VS2008都还不支持C99?手头这 ...

  8. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  9. 《python源码剖析》笔记一——python编译

    1.python的架构: 2.python源码的组织结构: 3.windows环境下编译python:

  10. 转换器5:参考Python源码,实现Php代码转Ast并直接运行

    前两个周末写了<手写PHP转Python编译器>的词法,语法分析部分,上个周末卡文了. 访问器部分写了两次都不满意,没办法,只好停下来,参考一下Python的实现.我实现的部分正好和Pyt ...

随机推荐

  1. C/C++中的可变参数和可变参数模板

    目录 1.说明 2.C语言中的可变参数 3.C++中的可变参数模板 2.1.使用递归的方式遍历 2.2.使用非递归的方式遍历 1.说明 不谈官方定义,就从个人理解上说,可变参数 就是函数传参的时候,不 ...

  2. shell find 根据时间获取文件列表

    根据时间得到文件,可以使用find进行查找,支持查找: find以时间为条件查找可用选项: -amin n:查找n分钟以前被访问过的所有文件. -atime n:查找n天以前被访问过的所有文件. -c ...

  3. Exadata刷机快速参考

    本文以Exadata X8 HC 1/4 rack为例,介绍整个Exadata刷机的步骤. 我理解刷机最关键的就两大步骤:第一步是所有机器刷OS,第二步是使用OEDA一键刷机.至于其它所有工作都是在为 ...

  4. Guava EventBus的具体使用以及源码解析

    使用Guava EventBus对系统进行异步解耦改造 一.背景 最近在写的项目里,在使用定时器进行自动任务下派时,发现之前写的程序中将包括启动流程.地图更新.发送短信.效能计算等操作全部集成在同一个 ...

  5. gif 制作

    gif 制作 博文中使用 gif 有时比纯粹的图片更明了.比如展示"墨刀"中的动画效果: 录制视频 首先利用录制视频,例如使用在线录制工具 vizard. Tip:需要花费2分钟手 ...

  6. SpringBoot+Shiro+LayUI权限管理系统项目-1.项目介绍

    1.项目介绍 本项目旨在打造一个基于RBAC架构模式的通用的.并不复杂但易用的权限管理系统.通过本项目可以较好的理解权限系统的常见业务同时学习掌握Springboot和Shiro等诸多技术点.需要的朋 ...

  7. Oracle字符串行专列(字符串聚合技术)

    原文链接:http://oracle-base.com/articles/misc/string-aggregation-techniques.php 1     String Aggregation ...

  8. Fiddler捕获Java发送的HttpURLConnection请求

    1.说明 平常使用Fiddler抓包工具查看浏览器的请求和响应信息很方便, 但有时候我们也需要拦截java代码执行的http请求. 以便更好的调试程序.具体方法如下: 2.编写Java代码 // 配置 ...

  9. Spring Security实现JDBC用户登录认证

    在搭建博客后端服务框架时,我采用邮件注册+Spring Security登录认证方式,结合mysql数据库,给大家展示下具体是怎么整合的. 本篇是基于上一篇:spring boot实现邮箱验证码注册 ...

  10. Auxiliary Set题解

    F Auxiliary Set 树上LCA + DFS 注意一下输出格式! #include<bits/stdc++.h> using namespace std; const int N ...