搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小丑西瓜9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
BERT-BiLSTM-CRF命名实体识别应用
2
jenkins 部署springboot 项目
3
连接Azure Blob_azure blob的连接方式
4
Hping3 拒绝服务攻击手册_ping of death攻击
5
SpringCloudConfig使用ssh方式连接GitHub报错JSchException: Auth fail_ssh连接失败jschexception auth fail
6
基于YOLOv5的头盔检测模型训练与系统开发(YOLOv5s训练模型文件,qt开发可视化界面,pyinstaller打包成桌面应用程序)_安全帽 yolov5 pt模型文件
7
3Dmax-Vray动画渲染参数预设_vray卡通 参数
8
图解LeetCode——138. 复制带随机指针的链表_复制带有随机 random 的链表
9
SpringBoot 源码解读与原理分析_springboot源码解读与原理分析 码农pdf
10
自然语言处理基础详解入门_自然语言处理相关理论和知识
当前位置:
article
> 正文
声学回声消除原理
作者:小丑西瓜9 | 2024-05-02 13:58:17
赞
踩
回声消除原理
【01】回声信号的产生
回声消除不仅仅是算法调试,更多的是工程设计的调试。
上图中第一行为近端信号 s(n),已经混合了近端人声和扬声器播放出来的远端信号,黄色框中已经标出对齐之后的远端信号,其语音表达的内容一致,但是频谱和幅度(明显经过扬声器放大之后声音能量很高)均不一致,意思就是:参考的远端信号与扬声器播放出来的远端信号已经是“貌合神离”了,与降噪的方法相结合也是不错的思路,但是直接套用降噪的方法显然会造成回声残留与双讲部分严重的抑制。接下来,我们来看看 WebRTC 科学家是怎么做的吧。
【02】算法流程
流程为三个步骤:
时延的产生和作用:
参考信号因为反射叠加和衰减会产生时延,估计参考信号和回收信号之间的时间延迟量。将参考信号和mic信号进行时间上的对其。算法核显是衡量参考信号和近端mic信号之间的相似度,寻找相似度最高时对应的时间差。
常用算法为广义互相关、二源谱统计法(webrtc)
。
线性自适应滤波:
消除线性回声,以x(n)为远端参考信号,经过一个传输信道w(n),得到一个回声信号的估计值y(n),同时近端麦克风采集的信号的d(n)。因为参考信号经过信道加权得到所以称为线性自适应滤波。自适应是因为需要不断的调整滤波器系数也就是w(n)。为了评估回收信号的估计值我们定义损失函数为估计值和真实值的差值,也就是 e(n)=d(n)-y(n),也就是 e(n)=d(n)-w(n)x(n)。
其中n是表示任意shape的矩阵,对于 d(n) 和 x(n)来说就是一段语音信号(已知),对于w(n)来说就是同shape的矩阵(未知),以n为5*5为例,w就表示为[w1、w2、w3....w25]的权向量。损失函数为均方误差(二次函数)也就是开口向上的关于w的凸函数:
迭代的方式就是给一组初始w=0,从零点开始左右滑动,滑动方向是梯度下降的方向,也就是斜率大于0说明函数递增那么w左滑才能使e(n)更小,斜率小于0说明函数递减那么w右滑才能使得e(n)更小。所以w的滑动公式为:
w(i+1) = w
(i) - 斜率*学习率
其中斜率就是e(n)对w求导,因为x(n)和d(n)已知,所以这一部分是个常数。给定一个学习率,求出斜率不断使得w左右滑动直到e(n)达到最小而收敛(指定e(n)为常数极小值以判断收敛)。注意随机梯度下降是每次求斜率随机取一个样本进行计算,经典梯度下降是取所有样本进行计算。
非线性处理:
消除非线性残留回声。包含两部分:
残留回声信号:根据误差信号和参考信号的相关性、相干性、短时能量等参数来判断当前单双讲状态以及残留回声量,得到衰减系数。相两个相关性大小比值可以判断是单讲还是双讲。给一个衰减系数阈值当衰减系数大于阈值说明衰减得不够小任然可以听到,则
衰减系数乘误差信号就可以得到残留回声
,后续减掉这个残留回声即可
非线性处理:进一步抑制残留的可感知小回声。
【03】算法细节
单讲和双讲的,为什么单讲时滤波加自适应、双讲是只滤波?
首先滤波就是在现有的信道估计w(n)情况下对参考信号x(n)进行估计,而自适应则是通过参考信号和mic信号进行参数w(n)的更新。
单讲:只有远端单讲,这个阶段的参考信号和mic信号没有近端语音,适合快速收敛进行回声信道估计。这个时候执行滤波加自适应。
双将:使用已经收敛的自适应滤波对远端参考信号进行估计,然后mic信号直接减去回收信号的估计值即可。这个时候只执行滤波不执行自适应,防止近端讲话对模型w(n)产生影响。
为什么需要自适应:
因为近端设备位置移动、环境变换造成回声传输信道的变更,回声信道变化所以信道估计w(n)也需要一直变换,需要在每次传输信道变化后都快速收敛。
如何检测单讲和双讲:
回声估计信号和对端参考信号和近端mic输入一次判断相关性。
延迟估计:
早先webrtc使用声纹对比在频域上通过时间的滑动来打分,找出打分最高部分则任务已经对齐但是检测效果和速度都不理想:
后来使用nlms来实现延迟估计:
算法能够估计512毫秒内的延迟,利用窗口和移动得到5个128毫秒的采样片段,每个128毫秒之间有32毫秒的重叠。每一块先16k下采样到4k,然后5块片段分别和
matlab的lms算法:
参考文档:
【优化】超详细的LMS算法的matlab实现_LZ君的博客-CSDN博客_lms算法matlab
LMS自适应滤波算法的学习与FPGA实现过程_1_仿真学习_哔哩哔哩_bilibili
自适应滤波器(一)LMS自适应滤波器 - 知乎
其中rrin为参考信号,ssin为期望信号,需要在单讲时获取纯净无近端mic输入的信号,这样才能得到回声传输信道w(n)一个比较好的估计。
注意为什么卷积计算 RRin(1,i-N+1:i)表示取第 i-N ~ i 一共 N 个列,这个N就是滤波器阶数,至少N个点参与计算也就是说允许的时延是有限的。如果时延越长则滤波器的长度就必须越长。
matlab的nmls算法:
对于lms算法,如果 x(n)太大会造成梯度放大,而x(n)太小会造成收敛速度太慢。
WebRTC的算法:
时延估计:
算法会缓存参考信号512毫秒内的音频数据,利用窗口和移动得到5个128毫秒的采样片段,每个128毫秒之间有32毫秒的重叠。每一块先16k下采样到4k,然后5块片段分别和1块mic信号进行对比(利用二元谱),如果相似则这两片128的采样片段就认为是对齐了,则计算出时延。这样就把时延缩短到了128毫秒内。此时nmls就不需要设置过大的阶数了。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小丑西瓜9/article/detail/524433
推荐阅读
article
【
数据结构
】
CH4
串
_第
1
关
:
求子
串
...
串
的介绍_第
1
关
:
求子
串
第
1
关
:
求子
串
目录 前言 一、
串
的基本概念
1
.相关概念 2.
串
的抽象...
赞
踩
article
排序
算法——直接
插入
排序
...
直接
插入
排序
与希尔
排序
是
插入
排序
的两个分支,直接
插入
排序
是较为简单的一种
排序
算法,同时也是众多算法实现或优化的基石。
排序
...
赞
踩
article
私有
git
服务器
(
git
lab
)部署
,
汉化
,
项目
备份
,
迁移_
git
lab
汉化
...
1. docker搭建
git
lab
服务器
2.
git
lab
服务器
备份
和恢复
备份
3. 从别的
服务器
迁移到
git
lab
_gi...
赞
踩
article
Stable
Diffusion
WebUI
本地部署教程_
stable
diffusion
怎么链接...
以下是关于如何在 Windows 系统上本地部署
Stable
Diffusion
WebUI
的详细教程。请注意,这里...
赞
踩
article
不谈虚
的
,
平台
即
产品
真
的
有
那么
好吗?...
从开发者角度看PaaP
,
会关注哪些点?不谈虚
的
,
平台
即
产品
真
的
有
那么
好吗? ...
赞
踩
article
VS
Code
上搭建Vue开发环境超
详细
教程_前端vs
安装
脚手架
vue
详细
步骤
...
这篇关于在Visual Studio
Code
上搭建
vue
开发环境的超
详细
教程手把手教会你!首先在Visual Stud...
赞
踩
article
大语言
模型
LLM
推理
加速:
LangChain
与
ChatGLM3
-6B的
推理
加速技术(
LLM
系列11)...
此外,通过缓存机制,频繁查询的结果得以复用,进一步优化了
推理
效率。总结而言,通过
LangChain
的分布式计算框架和知识...
赞
踩
article
转载:
DAMA
数据
管理
知识
体系_大
数据
dmma
...
数据
可以采用多种不同的模式来表示。如果这些
数据
实现了共享,所有的业务部门就都可以访问相同的客户清单、地理位置代码、业务部...
赞
踩
article
CORTEX
-
M4F
基本知识...
文章目录一、ARM Cortex-
M4F
处理器1.1ARM Cortex-
M4F
处理器简介1.1.1ARM Cortex...
赞
踩
article
如果
有人
问你怎么
用
webservice
和底层原理
,
直接把这
篇文章
甩出去
_
webservice
还
有人
...
版权声明:本文为博主原创文章
,
未经博主允许不得转载:https://blog.csdn.net/xiao
_
longhua...
赞
踩
article
anaconda
点开后 一直停留
在
loading
application
s的解决方法
_
anacon...
2.
在
cmd窗口输入命令语句:tasklist | findstr “pythonw” (找到pythonw的PID,如...
赞
踩
article
Stable
Diffusion
Web UI
Windows
部署及坑_
stable
-diffusi...
进入电脑网络共享中心 --> 查看活动网络 -->点击wifi或interent --> 弹出的框点击属性 --> 双击...
赞
踩
article
微信小
程序
账户系统使用
unique
_
id
多平台账号通用_
wechat
unique
id
...
小
程序
端获取数据:使用session_key 去获取
unique
id
。app.jslogin: function () ...
赞
踩
article
玩转
PyCharm
...
在上图所示的界面在,我们可以选择新建虚拟环境(New environment using Virtualenv),这里的...
赞
踩
article
一些常用
的
分布式
组件
设计技巧_
redisson
readmode
...
可用redis
的
pubsub机制来支持集群内
的
广播。_
redisson
readmode
redisson
readmod...
赞
踩
article
数据结构
——
树
_子
树
数据结构
...
树
1.预备知识
树
的定义: 一棵
树
是一些节点的集合。这些集合可以是空集;若不是空集,则
树
由称作根(root)的节点 r 以...
赞
踩
article
Python实现GA
遗传
算法
优化
XGBoost
回归
模型
(XGBRegressor
算法
)项目实战_加速...
Python实现GA
遗传
算法
优化
XGBoost
回归
模型
(XGBRegressor
算法
)项目实战_加速
遗传
算法
组合预测py...
赞
踩
article
k8s
部署
ElasticSearch
...
k8s
部署
ElasticSearch
apiVersion: v1kind: ConfigMapmetadata: nam...
赞
踩
article
LeetCode
刷题
-
链表
小结
_
链表
刷题
总结...
刷题
链表
小结
_
链表
刷题
总结
链表
刷题
总结
链表
的基础知识是什么? 1.翻转
链表
2.双指针合并
链表
...
赞
踩
article
二、H5
全景
图
-朋友圈
全景
图
-720°
全景
-VR ----
项目
简单分析
_
pano2vr
.
js
...
官方网站这里我们主要看一下生成的
项目
中都有什么。源码中都有什么,如何去自定义我们先只导入一张
全景
图
,不做任何设置 然后导...
赞
踩
相关标签
开发语言
排序算法
数据结构
算法
docker
服务器
容器
stable diffusion
运维
PaaP
平台工程
团队开发
vue.js
javascript
前端
语言模型
langchain
人工智能
自然语言处理
深度学习
python
神经网络
devops
CORTEX-M4F
指令系统