语音识别 平常笔记

article/2025/11/8 16:11:04

Voice Recognition

2021年3月21日
HowardXue

语音模型发展:模板匹配(DTW) -> 统计模型(GMM高斯-HMM隐马) -> 深度学习(DNN-HMM,E2E)

音频编码:常用格式PCM的wav格式
语音采样率8khz 或16khz
6阵列mac 声源定位 有空间指向性,定位后,可有效抑制其他方向的声音干扰(旁边的其他人声音)
开源工具:HTK,Kaldi, Espnet(python)
音速序列:英语48个音素 20元音 28辅音,汉语32个音素,10个元音

离散傅里叶变换(DFT) 时域信号 -> 频域信号, 逆傅里叶变换 将频域信号恢复为时域
实际可以用快速傅里叶变换(FFT) 简化计算复杂度
加窗:分帧处理
常用的声学特征:MFCC,FBank,语谱图

HMM马尔科夫链:只根据当前事件,预测下一事件。 --双重随机过程
HMM是声学模型 -> 语音数据
RNN是语言模型 -> 文本数据,词与词之间的组合概率关系,基于统计语言模型
解码器:传统动态网络解码器Viterbi -> WFST静态网络解码器
WFST把发音词典、声学模型、语言模型(三大组件)合并成统一的静态网络 ->解码速度快

DNN的输出节点与HMM的状态节点一一对应,通过DNN的输出得到每个状态的观察值概率
不同音素(a e I …o)统一关联到DNN的输出节点

DNN使用CNN:语谱图 -> 变为图像处理,提取时域、频域feature map局部特征
RNN - LSTM, GRU
TDNN时延神经网络
CNN - TDNN-F 组合网络,CNN先提取局部频域特征,然后TDNN-F提取上下文的时域特征

E2E ASR Model,只需要输入端的语音特征和输出端的文本信息,将传统ASR三大组件融合成一个网络模型
E2E常用模型:CTC、RNN-T、Transformer
RNN-T联合建模:语音识别+说话人区别(识别后的文字后带有说话人ID)

Attention机制跟人类翻译文章时候的思路有些类似,即将注意力关注于我们翻译部分对应的上下文

序列对序列问题(sequence-to-sequence, seq2seq),通过Encoder/Decoder对输入特征和输出结果进行序列建模
加入Attention机制,改进了seq2seq,

Espnet,特征提取:直接用kaldi原生脚本,可以进行MFCC/FBank/PLP特征的提取
特征提取后,还需对特征进行倒普均值归一化(CMVN)来使特征服从高斯分布(均值为0,方差为1)

语音数据增强:音量扰动和速度扰动(变速)
词典生成:数字对应字符

data2json.sh: 映射文件都打包保存在data2json.sh脚本中
Train.yaml:训练配置文件,例如选择哪个声学模型,选择CTC/Attention/Transformer结构等
Lm_train.py:语言模型训练,输出是:rnnlm.model.best
Asr_train.py: 声学模型训练
默认使用的编码器:BLSTM
Asr.recog.py: 语言识别解码器

模型部署到Edge:编译Kaldi生成动态库.so/dll -> 嵌入式ARM Linux平台编译移植Kaldi

Transformer:

Transformer: 在每个Decoder和Encoder中都采用Attention机制,特别是在Encoder,把传统的RNN完全用Attention替代
Transformer 本质上还是seq2seq结构:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

未完待续。。。


http://chatgpt.dhexx.cn/article/eP7mWThx.shtml

相关文章

《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第1章 TWen-ASR-ONE简介

1.1 ASR-ONE概述 ASR-ONE是一颗专用于语音处理的人工智能芯片, 可广泛应用于家电、 家居、 照明、 玩具等产品领域, 实现语音交互及控制。开发板板载一颗 RGB 灯,引出 26 个 IO,外接喇叭和麦克风,用于快速验证语音产品…

语音识别技术基础知识

语音识别技术 让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术。 语音识别本质上是一种模式识别的过程,未知语音的模式与已知语音的参考模式逐一进行比较,最佳匹配的参考模式被作为识别结果。 语音识别的目的就是让机器赋予人的听觉特性…

语音识别模块

语音识别模块,是一种嵌入式语言识别模块,是将人类语音中的词语转换成计算机可读,与主芯片进行通讯,语音模块嵌入到智能化产品中,可以实现人机语音交互。 在炎热的夏季空调是不可少的,但在使用中我们可能会遇…

嵌入式端音频开发(基础篇)之2021-2022年国内主流语音识别芯片科普(1)

前言 为什么写这边文章?作为开发过不少语音在线识别和离线识别不少产品的嵌入式软件工程师来说,有不少同事和粉丝对于嵌入式端语音开发,经常问我:怎么做?怎么选芯片?有哪些厂家有芯片可以选择? …

《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第5章 TWen-ASR-ONE 串口使用

5.1 TWen-ASR-ONE 串口简介 关于串口我这里就不再赘述了,我相信搞过嵌入式的朋友经常会用到。 笔者这里简单介绍下TWen-ASR-ONE 串口。 TWen-ASR-ONE 开发板两路串口:串口0和串口1。串口0引脚是固定在P1_7、P2_0,而串口1可以设置在P0_5、P…

Android导航语音识别——读后听写语音识别(嵌入式)

嵌入式项目之Android语音识别——读后听写语音识别(语音识别功能主函数调用) 文章目录 前言一、代码示例二、代码分析 1.创建 SpeechSynthesizer 对象2.设置合成参数3.开始合成4.设置合成状态监听器5.五个speakText类函数的作用总结 前言 最近在学习嵌入…

嵌入式语音识别智能家居笔记1

1.环境 VMware 15.5 Ubuntu18.04 Qt安装包 2.共享目录设置 VMware->虚拟机->设置->选项->共享文件夹 3. QT的linux安装包:qt-opensource-linux-x64-5.9.1.run 复制到共享目录 打开终端: cd /mnt/hgfs/share sudo ./qt-opensour…

嵌入式语音识别系统之电路设计原理

现在社会发展的这么快,什么高科技都涌现出来,什么智能机器人啦,智能手机等,有很多在这里就不一一列举了,在这里我们要说的就是语音识别系统了,现在嵌入式产品如此的多,就像一些智能空调啦&#…

我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦

先前的文章《三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的 》说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的,是给我们练手用的,通过搭这个系统我们累积了一定的语音…

三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的

前面的博客里说过最近几个月我从传统语音(语音通信)切到了智能语音(语音识别)。刚开始是学语音识别领域的基础知识,学了后把自己学到的写了PPT给组内同学做了presentation(语音识别传统方法(GMMHMMNGRAM)概…

【毕业设计】基于stm32的语音识别 - 单片机 嵌入式 物联网 语音识别

文章目录 0 简介1 项目目标2 项目背景意义3 需求分析3.1 功能性需求3.2 非功能性需求 4 设备器件4.1 STM32单片机4.2 LD3320语音识别芯片4.3 TFT-LCD液晶显示屏 5 设计方案6 语音识别模块的开发7 报警电路模块的开发8 上位机模块的开发9 项目成果9 最后 0 简介 Hi,…

基于80251的嵌入式语音识别

一、文档介绍 嵌入式语音识别技术在251内核的实现。 缩写、术语 解 释 Specific Person Isolated Word Speech Recognition 特定人孤立词语音识别 Endpoint detection 端点检测 Feature parameter extraction 特征参数提取 DTW (Dynamic Time Warping) 动态时间规整…

嵌入式linux 声控,基于Cortex-A9的嵌入式语音识别系统设计

打开文本图片集 摘 要:在人工智能技术发展的进程中,语音识别已经成为重要分支之一。语音识别技术作为人与机器的一种交互方式,将前端处理之后的信号转换成文本或者指令,进而用于控制相关智能设备。当前,基于深度学习的云端语音识别技术已经逐渐成熟,但考虑到离线设备无法…

《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第3章 TWen-ASR-ONE 多线程和消息队列

3.1 Scratch简介 在开始本章之前,需要介绍下TWen-ASR-ONE的用户开发语言-Scratch,Scratch是麻省理工学院开发的一款简易图形化编程工具主要是为青少年开发的一种编程工具,它图形化编程工具当中最广为人知的一种形式,所有人都可以…

Android导航语音识别——语音听写(嵌入式)

嵌入式项目之Android导航语音识别——语音听写 文章目录 系列文章目录前言一、原理流程图二、语音听写 1.初始化无ui识别听写2.设置识别监听器3.启动功能总结 前言 最近在学习嵌入式系统的一个功能——导航语音识别,该功能是基于Android和科大讯飞语音识别语音合成…

static的三个作用

static作用 一、修饰局部变量-静态局部变量二、修饰全局变量-静态全局变量三、修饰函数-静态函数四、总结和注意点 一、修饰局部变量-静态局部变量 static修饰局部变量时,改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束&…

java中的静态变量的作用域_详解JAVA中static的作用

1、深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,那别人认为你…

express.static 作用及用法

express相信是很多人用nodejs搭建服务器的首选框架,相关教程有很多,也教会了大家来如何使用。如果你想更深的了解他的细节,不妨和我一起来研究一下。 先来看一个每个人都用到的方法app.use(express.static(__dirname/public)); 你肯定在你的a…

java static的作用

static是什么 static是java中的关键字,static表示”全局”、“静态”的意思,用来修饰成员变量和成员方法,定义的变量,我们通常将用static修饰的成员称为静态变量,静态方法或者静态成员。 static的作用 被static修饰…

static的作用有哪些?

C语言中的static的作用有:1.修饰局部变量。2.修饰全局变量。3.修饰函数。 1.修饰局部变量。 如图: 当只用int 定义变量a时,此时程序运行结果为: 程序运行结果为10个2,这是为什么呢?? 原因是此时的变量a为…