Android端信号处理总结

最早之前不管是视频录制还是视频直播,都是从麦克风获取音频后,直接交编码器,封装复用到不同媒体格式。在后面在IM场景中做短语音消息、短语音消息转文本以及语音输入设计到语音识别,也仍然是直接从麦克风拿数据。在整个语音SDK设计开发完成后自己规划了音效、语音分离合成、重采样等技术需求。

今年年初接手了一个类似于小爱、小度的语音交互系统的项目,整个链路包括:

在这里插入图片描述

这时候才知道原来自己规划的那些有个专业的术语叫“信号处理”,整个交互链路中有一个单独的“信号处理”模块。我们先看看什么是语音信号处理,信号处理包含哪些功能。

信号处理功能

语音信号处理是以语音语言学和数字信号处理技术相结合的交叉学科,它和认知科学、心理学、语言学、计算机科学、信号与信息处理、声学、模式识别和人工智能等学科联系紧密。生理学、语言学等多门学科的交叉学科。研究内容包括语音识别、说话人识别、语种识别、语音合成、语音前端处理(包括但不限于语音增强、语音分离、回声抵消、麦克风阵列信号处理等)、语音编码等。

上面是专业的定义,我们今天说的主要是语音前端信号处理。

回声消除AEC

在通信系统中,回声主要分为两类:电路回声声学回声。我们这里介绍的回声消除(Acoustic Echo Cancellation,AEC )主要指声学回声,即在麦克风与扬声器互相作用影响的双工通信系统产生的“远端讲话者A–>麦克风A–>电话A–>电话B---->扬声器B—>麦克风B–>电话B–>电话A–>扬声器A—>麦克风A—>…"的无限循环。直观的描述就是两个人语音通话,其中一个人打开了扬声器,录音的时候把对方讲话的声音也同时录进去,导致对方听到了自己本身说的话。

如果回声在通话中只是造成很差的用户体验,那么在语音识别中将是灾难性的。所以AEC作为3A中的一员,是大部分信号处理系统要做的。在Android系统中大部分手机已经在Framework层提供了回声消除能力,如果要自己实现的话必须能拿到参考信号,但是很多手机都不会开放这部分权限,只能是自研系统的场景下用的到。

噪音抑制NS

噪声抑制(Noise Suppression, NS)技术用于消除背景噪声,改善语音信号的信噪比和可懂度,让人和机器听得更清楚。主要是去除一些背景噪音,比如敲击键盘声音、喝水声音、关门声音等等。

噪声抑制的两部分:噪声估计、增益因子估计

自动增益AGC

音频AGC是音频自动增益控制算法,更为准确的说是峰值自动增益控制算法,是一种根据输入音频信号水平自动动态地调整增益的机制。当音量(无论是捕捉到的音量还是再现的音量)超过某一门限值,信号就会被限幅。限幅指的是音频设备的输出不再随着输入而变化,输出实质上变成了最大音量位置上的一条水平线;当检测到音频增益达到了某一门限时,它会自动减小增益来避免限幅的发生。另一方面,如果捕捉到的音量太低时,系统将自动提高增益。当然,增益的调整不会使音量超过用户在调节向导中设置的值。

当我们说话音量比较低时,我们想通过拉幅的方式来提高音量,但是声音的幅度不是均匀的,可能某些地方已经要截幅了,另一些地方还幅值还是很小,如果固定增加分贝很难达到理想效果,所以就需要自动增益功能。

盲源分离BSS

麦克风阵列算法有两大类,一类是波束形成算法,另一类是盲源分离算法。

盲源分离(BSS,Blind Signal/Source Separation)是在不知道源信号及信号混合参数的情况下,仅根据观测到的混合信号估计源信号。

盲源分离算法的优点:

  • 盲源分离不需要目标语音VAD的先验信息。这个先验信息对于波束形成算法是很关键的,其准确程度直接影响性能。而盲源分离不需要做自适应滤
  • 盲源分离不需要目标语音的DOA信息。

波束成型BF

波束成型也是麦克风阵列的一种算法,我们在语音交互系统中主要用来将多路麦克风采集的信号生成为一路。

在这里插入图片描述

波达方向估计DOA

波达方向(DOA)估计的基本问题就是确定同时处在空间某一区域内多个感兴趣的信号的空间位置(即多个信号到达阵列参考阵元的方向角)。

去混响

声波在室内传播时,要被墙壁、天花板、地板等障碍物反射,每反射一次都要被障碍物吸收一些。这样,当声源停止发声后,声波在室内要经过多次反射和吸收,最后才消失,我们就感觉到声源停止发声后还有若干个声波混合持续一段时间(室内声源停止发声后仍然存在的声延续现象)。这种现象叫做混响,这段时间叫做混响时间。

混响信号也会对我们的语音识别结果产生影响,所以有时会针对特性的场景(比如固定客厅或者会议室)做去混响处理。

语音信号处理基础知识

上面主要介绍了信号处理是干什么事情的,对于原理我们一点都没提。市面上有一些开源的3A算法,比如webrtc等,但是他们是基于通用方案的实现,效果不是很理想。在识别处理场景,为了追求效果会针对特定的麦克风或者场景进行优化。

本节我们讨论信号处理设计到的一些算法及基础知识体系。

语音信号处理理论与算法

  1. 数字信号及其基本运算;
  2. 采样定理;
  3. 时频分析与傅里叶变换;
  4. 自适应滤波Overlap-save;
  5. 自适应滤波RLS算法;
  6. 自适应滤波AP算法;
  7. 自适应滤波LMS和RLS算法;
  8. 回声消除与噪音抑制算法;
  9. 麦克风阵列相关

看到这些是不是有点蒙圈,其实大学里面有一门信号处理的课程,可以先从这个课程学习或者复习起,掌握基础。

信号处理基础

  1. 信号与系统概念
    1. 信号概念
    2. 典型信号及其特征
    3. 信号的基本运算
    4. 信号的分解
  2. 连续时间系统的时域分析
    1. 连续时间系统的描述及响应
    2. 零输入响应和零状态响应
    3. 冲击响应和阶跃响应
    4. 卷积积分
    5. 单位冲激响应表示的系统特性
  3. 离散时间系统的时域分析
  4. 连续时间信号与系统的频域分析
    1. 信号的正交分解
    2. 周期信号的频谱–傅里叶级数
    3. 傅里叶级数的性质
    4. 非周期信号的频谱–傅里叶变换
    5. 傅里叶变换的性质
    6. 信号的功率频谱和能量频谱
  5. 离散时间信号与系统的频域分析
  6. 连续时间信号与系统的复频域分析
    1. 拉普拉斯变换
    2. 拉普拉斯变换的性质
    3. 拉普拉斯反变换
    4. 连续时间LTI系统的复频域分析
  7. 离散时间信号与系统的z域分析
    1. z变换
    2. z变换的性质
    3. z反变换
  8. 信号与系统理论的应用
    1. 信号的无失真传输
    2. 调制与解调
    3. 多路复用
    4. 信号滤波
  9. 系统的状态变量分析

里面涉及到高等数学的一些知识,学习的时候可以一起捡起来了。

信号处理相关工具

我们主要会用到Adobe Audition以及matlab。

在这里插入图片描述

总结

本文介绍了信号处理模块的各个功能点以及在移动端语音处理中的作用。还介绍了信号处理的基础知识以及常用工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/691792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

新火种AI|超越苹果成为市值第二大公司!英伟达的时代已然来临...

美东时间周三(6月5日) ,人工智能领域的龙头公司英伟达开始发力,其股票实现大涨,幅度超过5 %,刷新历史新高。更重要的是,历经了这一波的上涨,英伟达的市值突破了3万亿美元。截至当日收…

嵌入式 Linux LED 驱动开发实验学习

I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,进行这个驱动开发实验之前,需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU&#x…

香港电讯荣获广东省香港商会「2023金领航奖」

🎉近日,由香港贸易发展局与广东省香港商会联合主办的「粤港服务业合作交流会 暨 2023金领航奖颁奖典礼」在广州举行,香港电讯非常荣幸获颁「卓越企业大奖」🏆 🏆「金领航奖」由广东省香港商会于2018年创办,…

常见的api: BigInteger

一.获取一个大的随机整数 1.代码: BigInteger bd1 new BigInteger(4, new Random());System.out.println(bd1); 2.打印的结果:2 3.注释获取的是0-16之间的随机整数 二.获取一个指定的大的数 1.代码: BigInteger bd2 new BigInteger("100");System.o…

Science刊发!乌普萨拉大学最新神经形态触觉人造皮肤可快速精准识别物体

当前,人形机器人使用的传统电子皮肤在处理触觉感知信息方面的能力并不强,尤其是在时间信息编码和快速特征提取方面存在一定的局限性。简单来说就是机器人无法完成在接触到物品的瞬间,判断用怎样的力度去对该物品做出反应。尽管多模态大模型和…

171.二叉树:二叉树的所有路径(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

C 语言实现在终端里输出二维码

Mac 环境安装二维码库 brew install qrencode安装过程报权限问题执行以下命令 sudo chown -R 用户名 /usr/local/include /usr/local/lib chmod uw /usr/local/include /usr/local/lib#include <stdio.h> #include <qrencode.h>void print_qr_code(QRcode *qrcode…

【学习笔记】解决 VMware Workstation 17 Player 和主机之间无法复制粘贴的问题

【学习笔记】解决 VMware Workstation 17 Player 和主机之间无法复制粘贴的问题 使用VMware Workstation 17 Player&#xff0c;再上面安装 Ubuntu &#xff0c;安装完之后&#xff0c;需要和主机之间进行复制粘贴。 首先安装了VMware Tools。 在打开的页面下把 VMwareTools…

【数据可视化系列】使用Python和Seaborn绘制相关性热力图

热力图&#xff08;Heatmap&#xff09;是一种数据可视化工具&#xff0c;它通过使用颜色的深浅来展示数据矩阵中数值的大小或密度。在热力图中&#xff0c;每种颜色的深浅代表数据的一个特定值或值的范围&#xff0c;通常使用红色、黄色和绿色等颜色渐变来表示数据的热度&…

能在电脑和手机上使用的便签app 好用的便签软件

随着科技的日新月异&#xff0c;越来越多的软件被开发出来&#xff0c;极大地便利了我们的工作和生活。其中&#xff0c;便签软件凭借其便捷的记录功能&#xff0c;受到了广大用户的喜爱。特别是那些能在电脑和手机上同步使用的便签app&#xff0c;更是为我们的工作和生活带来了…

抖抖分析师和抖音分析有什么区别?

"抖抖分析师"和"抖音分析"虽然都与抖音这个平台有关&#xff0c;但是二者的含义有很大的区别。 首先&#xff0c;抖抖分析师通常指的是专门对抖音平台进行各种数据分析、用户行为研究、内容趋势预测等工作的人员。他们可能会洞察用户在抖音上的行为习惯&a…

【SQLAlChemy】如何定义ORM模型,如何映射到数据库?

定义ORM模型并映射到数据库 创建 ORM 基类 使用 declarative_base 根据 engine 来创建一个 ORM 基类。 from SqlAIchemy.LinkDB.main import engineBase declarative_base()创建自定义类 用上边定义的 Base 类来实现自己的 ORM 类。 __tablename__ 类属性&#xff0c;可以…

Linux的目录结构介绍和环境变量的设置

目录 前言一、系统环境二、Linux的目录结构2.1 Linux目录结构介绍2.2 Linux文件的路径描述2.2.1 绝对路径2.2.2 相对路径2.2.3 特殊的路径符 三、Linux的环境变量设置3.1 环境变量PATH3.2 关于$符的使用3.3 环境变量的设置 总结 前言 本篇文章介绍Linux的目录结构和环境变量的…

嵌入式linux系统中利用I2C控制器应用开发详解

大家好,今天主要给大家分享一下,在linux系统上如何使用I2C进行应用开发详解。 l2C (Inter一Integrated Circuit BUS)是I2C BUS简称.中文为集成电路总线.是目前应用最广泛的总线之一。和IMX6ULL有些相关的是.刚好该总线是NXP前身的PHLIPS 设计。 第一:I2C协议概述 …

spring源码解析-(2)Bean的包扫描

包扫描的过程 测试代码&#xff1a; // 扫描指定包下的所有类 BeanDefinitionRegistry registry new SimpleBeanDefinitionRegistry(); // 扫描指定包下的所有类 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry); scanner.scan(&quo…

HTML静态网页成品作业(HTML+CSS)—— 家乡南宁介绍网页(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。 二、作品演示 三、代…

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO以前版本在后处理和模型架构方面…

大模型时代的具身智能系列专题(十一)

UMass Amherst 淦创团队 淦创是马萨诸塞大学阿默斯特分校的一名教员&#xff0c;也是麻省理工学院- ibm沃森人工智能实验室的研究经理。在麻省理工学院博士后期间&#xff0c;和Antonio Torralba教授、Daniela Rus教授和Josh Tenenbaum教授一起工作。在此之前&#xff0c;在清…

【面试官】知道synchronized锁升级吗

一座绵延在水上的美术馆——白鹭湾巧克力美术馆。它漂浮于绿水之上&#xff0c;宛如一条丝带轻盈地伸向远方 文章目录 可重入锁synchronized实现原理 synchronized缺点保存线程状态锁升级锁升级优缺点 1. 可重入锁 面试官&#xff1a;知道可重入锁有哪些吗? 可重入意味着获取…