当前位置: 首页 > news >正文

啸叫检测的方法:基于DSP的实现

前文大概讲述了如何设计一个陷波器,那么在声反馈系统最为关键的一步就是啸叫的检测方法实现

啸叫具有明显的时频域特征,故可以使用一些信号特征进行检测:
频域上,啸叫频点功率很高,是一个峰值,远超其他语音或噪声频率的功率;
时域上,啸叫频点的功率有一个迅速增大的过程,达到饱和幅度后一直保持。

这篇文章主要积累我所知道了解的内容,主要用于对啸叫检测方法的理论理解和code实现

①峰值均值功率比(Peak‐to‐Average Power Ratio ,PAPR)

        [引用论文] 基于峰值均值功率比的方法 ,通过计算信号功率谱峰值与均值的比值来判定是否产生啸叫 ,该方法简单且应用最为广泛 ,但存在虚警率偏高的问题

产生啸叫的频点功率远大于其他频点的功率,故可以先计算出整个频谱的平均功率,然后计算每个频点功率与平均功率之比。比值大于预设阈值的频点,记为候选啸叫频率。

②峰值谐波功率比(Peak‐to‐Harmonic Power Ratio ,PHPR)

        [引用论文] 基于峰值谐 波功率比的方法 ,利用啸叫成分没有谐波分量的特点 ,通过统计功率谱峰值与其 m 次 (m ∈ {0.5 ,1.5 ,2 ,3 , 4}) 谐波功率的比值来区分语音和啸叫 ,该方法虽然可以在一定程度上降低虚警率 ,但鲁棒性较差

语音谱有谐波峰,而啸叫频率是不含谐波峰的,故可以根据一个峰值点的谐波频率功率是不是也很大,来判断该峰值是否为啸叫点。

③帧间幅度斜率偏差(Interframe Magnitude Slope Deviation ,IMSD)

        [引用论文] 基于帧间幅度斜率偏差的方法 ,依据啸叫成分的幅度谱在对数刻度下近似线性增加的特点,通过统计幅度谱的变 化斜率在不同信号帧之间的偏差 ,以判定是否产生啸叫 ,该方法仍不能有效控制虚警率 ,容易造成输出语音 失真 ,影响扩声效果

        IMSD 也是时域特征,是从啸叫开始发生时判断,此时啸叫频点幅度线性增长,帧间斜率将会保持不变。取多帧进行区间观察,计算多帧平均斜率与区间内更短区间的斜率之间的差值,如果差值在设定阈值以下,就认为该区间斜率保持不变,可能是发生了啸叫。

④长时信号特定频带变化率 (Long‐Term Signal Variability at Specific Frequency Band , LTSV‐SFB)

⑤帧间峰值保持度(Interframe Peak Magnitude Persistence, IPMP)

        IPMP 是时域特征,如果一个频点,连续几帧都是检测出来的候选啸叫峰值,那就认为这个点确实发生了啸叫。实现时可以选定 5 帧,超过 3 帧是候选啸叫频点的位置,判定为啸叫点。

 ⑥峰值邻近功率比(Peak-to-Neighboring Power Raio, PNPR)

        PNPR 寻找功率谱的峰值点,加入候选啸叫频率。可以选取左右各 M 个相邻频点进行比较,当前频点功率比邻值都高时,记为候选啸叫频率,M 选取 5 点左右。

⑦峰值阈值功率比(Peak-to-Threshold Power Raio, PTPR)

        啸叫的功率远大于正常播放的音频。故设定一个阈值,只有功率超过阈值的频点,才会进行啸叫检测,减少无意义的检测判决。

        


频域特征 PTPR、PAPR、PNPR、PHPR 都是对一帧内频点进行分析,而时域特征是对多帧间的特征进行分析。所以在进行判决时,一般先对每帧频谱进行频域特征分析,然后对累计的时域特许证进行分析。

当然,其中的一些特性在某些场景中不一定明显,比如 PHPR,有些啸叫的系统是多频点的,并且高频确实是基频的谐波成分;比如 IMSD,在有外界干扰的情况下,这个特征也会被弱化。

相关文章:

  • java中比较两个map是否相同
  • C/C++编程工具及实用小软件推荐
  • [项目管理-15]:项目执行中的三大管理者:项目活动管理、职能部门管理、产品架构设计。
  • Code For Better 谷歌开发者之声——基于改进 EfficientDet 的电网线路的识别与检测的设计实现
  • 【for lovelier】IDEA + LeetCode Editor 最佳实践
  • React Native 0.70 版本发布,Hermes 成为默认引擎
  • 【Java基础】时间日期类之Date类、SimplDateFormat类、Calendar类及二月天案例
  • 2023计算机毕业设计SSM最新选题之javaEE的仓库管理系统93c6b
  • 编程路学习书单推荐
  • 【OpenCV】基于cv2的图像阈值化处理【超详细的注释和解释】掌握基本操作
  • SpringBoot整合Canal、RabbitMQ监听数据变更记录
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
  • 商业化广告--体系学习-- 6 -- 行业蓝图篇 -- 那些产品适合采用广告模式变现
  • 链路日志中追踪traceId
  • 2023计算机毕业设计SSM最新选题之javaJava班级信息管理系统x0w9c
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [译]前端离线指南(上)
  • Apache Pulsar 2.1 重磅发布
  • JavaScript设计模式与开发实践系列之策略模式
  • leetcode388. Longest Absolute File Path
  • SpiderData 2019年2月23日 DApp数据排行榜
  • tensorflow学习笔记3——MNIST应用篇
  • 阿里云应用高可用服务公测发布
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端面试总结(at, md)
  • 如何使用 JavaScript 解析 URL
  • 树莓派 - 使用须知
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序开发问题汇总
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 智能合约开发环境搭建及Hello World合约
  • # C++之functional库用法整理
  • (003)SlickEdit Unity的补全
  • (20050108)又读《平凡的世界》
  • (补)B+树一些思想
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读40-45)图像描述1
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (五)Python 垃圾回收机制
  • (原創) 未来三学期想要修的课 (日記)
  • (转)编辑寄语:因为爱心,所以美丽
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 反射的使用
  • .ui文件相关
  • :O)修改linux硬件时间
  • @test注解_Spring 自定义注解你了解过吗?
  • [c++] C++多态(虚函数和虚继承)
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [jquery]this触发自身click事件,当前控件向上滑出
  • [JS] 常用正则表达式集(一)