kaldi源代码简单说明
kaldi是开源的,基于C++的语音识别工具。一方面语音识别有较高的技术门槛,包含了很多方面的东西,另一方面kaldi集成了太多的东西,造成了其代码量很大,阅读起来很困难。
kaldi现在集成了很多的东西,造成其代码量很大,直接阅读起来感觉无从下手。但是,每个项目,一开始的时候,都是比较简单的,代码量也较小。
我从git上下载过来kaldi源码后,通过git reset 命令,回退到最原始的版本,看最原始版本的代码,就没有那么难了。最原始的版本,虽然缺失了很多功能,比如online解码、神经网络,kws等,但是其基本的代码还是有的。这里主要就是记录了阅读这些代码时总结的一些东西。当然,代码也只是走马观花地看了一遍,没有仔细看细节。
kaldi/base 文件夹 ==============================================
包含两个基本的头文件 kaldi-type.h kaldi-common.h
四个小模块 kaldi-error kaldi-math kaldi-utils io-funcs
kaldi-type.h 中定义了基本的unint32 int32等类型,以及BaseFloat
kaildi-error 中,定义了 KALDI_ERR KALDI_WARN KALDI_LOG 和 KALDI_EXIT 等。还是用的define,以及类中返回stream的方法。比起后面的版本,要简单很多
kalid-math 中,定义了基本的π,根号2等的值,定义一些最大最小值,定义随机数的实现,LogAdd LogSum等,公约数,因式分解等
kaldi-utils中,KALDI_SWAP4 KALDI_DISALLOW_COPY_AND_ASSIGN KALDI_ASSERT_IS_INTEGER_TYPE KALDI_STRTOLL 等
io-funcs中,定义基本输入输出,类模板定义方式 WriteBasicType ReadBasicType,可以是二进制或文本模式
四个小模块分别生成.o文件,然后生成kaildi-base.a。每个模块都有测试代码。
kaldi/matrix文件夹 ==============================================
生成的.o文件 kaldi-matrix.o kaldi-vector.o packed-matrix.o sp-matrix.o tp-matrix.o matrix-functions.o srfft.o
生成的.a文件 kaldi-matrix.a
kaldi-blas.h matrix-comm.h 两个基本的头文件;前者定义使用哪个blas,后者定义了基本的矩阵类型
packed-matrix 基本压缩矩阵,声明模板类PackedMatrix
tp-matrix 和 sp-matrix 三角矩阵和对称矩阵TpMatrix SpMatrix,其基类是PackedMatrix
kaldi-vector 和 kaldi-matrix kaldi中的向量和矩阵,声明模板类 VectorBase Vector SubVector MatrixBase SubMatrix Matrix
jama-eig jama-svd 特征分解和奇异值分解,只有使用atlas时才用到这两个文件,因为其他的库已经自带这两个算法了
matrix-functions 矩阵计算应用函数,如计算FFT; srfft 另一种高效的FFT计算方法