关于语音识别

初学语音识别笔记

注:此文仅为个人学习笔记,走过路过前辈们,如果文章有问题还请批评指正,博主本人时刻虚心请教!
参考博客Yngz_Miao:https://blog.csdn.net/qq_38410730/article/details/81838472
(持续更新ing…)

一、关于语音识别

1) 坑:

1、PyCharm启动不了
Pycharm下载的是官方版本,然后自己下载了破解jar,添加了这个插件的路径到.vmoptions文件,-javaagent:F:\pycharm\PyCharm 2019.2\bin\jetbrains-agent.jar,但路径写的jar没有找到,导致打不开exe。方法:检查路径是否正确,jar是否存在,ok。
2、from tensorflow.python.ops import ctc_ops飘红
pip install tensorflow --upgradegrad
3、Pycharm提示错误:module ‘tensorflow’ has no attribute 'placeholder’
不要用:import tensorflow as tf
将其替换为:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
3、XunFeiDemo-master这个工程:调用科大讯飞的api,实现语音识别和语音合成(文本转语音)https://www.xfyun.cn/
android studio
这个软件打开,已经安装了android虚拟器,但报错:启动录音失败20006,没有解决???
4、运行成功pycharm“phonetic-recognition-master”,这个工程,开源算法,运行成功,显示准确率的

2)语音识别:

1、Kaldi中文语音识别公共数据集:
A.thchs30: 清华大学30小时的数据集,地址:http://www.openslr.org/18/
B.aishell: AI SHELL公司开源178小时中文语音语料及基本训练脚本,见kaldi-master/egs/aishell
C.gale_mandarin: 中文新闻广播数据集(LDC2013S08, LDC2013S08)
D.hkust: 中文电话数据集(LDC2005S15, LDC2005T32)
MFCC??

二、技术

1、什么是one-hot编码?

目的:使所有类别之间的距离两两相等
例如:a,b,c
只看ASCII码,97 98 99,他们之间的距离肯定是不相等的,那在一些处理文本等场景中,文字之间是平等的,我们想他们之间的距离相等,就需要用到one-hot编码方式,即转化为二进制方式进行编码。
a={100},b={010},c={001},这样他们之间的距离就相等了

2、MFCC

梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients,简称MFCC)是在Mel标度频率域提取出来的倒谱参数,Mel标度描述了人耳频率的非线性特性,它与频率的关系可用下式近似表示:
在这里插入图片描述
语音特征参数MFCC提取过程:
(1)连续语音
(2)预加重
将语音信号通过一个高通滤波器:
在这里插入图片描述
式中的值介于0.9-1.0之间,我们通常取0.97。
预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱。同时,也是为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。
(3)分帧
先将N个采样点集合成一个观测单位,称为帧。通常情况下N的值为256或512,涵盖的时间约为20~30ms左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。
通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000 1000=32ms。
(4)加窗
将每一帧乘以汉明窗,以增加帧左端和右端的连续性。假设分帧后的信号为S(n), n=0,1,…,N-1, N为帧的大小,那么乘上汉明窗后S’(n)=S(n)xW(n),W(n)形式如下:
在这里插入图片描述
不同的a值会产生不同的汉明窗,一般情况下a取0.46。
(5)FFT
由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。
在这里插入图片描述
式中x(n)为输入的语音信号,N表示傅里叶变换的点数。
(6)Mel滤波器组
三角带通滤波器
将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为 。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图所示:
对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。(因此一段语音的音调或音高,是不会呈现在MFCC 参数内,换句话说,以MFCC 为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响)此外,还可以降低运算量。
(7)对数运算
计算每个滤波器组输出的对数能量
在这里插入图片描述
(8)DCT
经离散余弦变换(DCT)得到MFCC系数
在这里插入图片描述
将上述的对数能量带入离散余弦变换,求出L阶的Mel-scale Cepstrum参数。L阶指MFCC系数阶数,通常取12-16。这里M是三角滤波器个数。倒谱(cepstrum)就是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱

你可能感兴趣的:(专业技术笔记)