shichaog
这个作者很懒,什么都没留下…
展开
-
语音方向总结-给新人
一张图总结下语音方向、算法、以及开源工程,给需要找工作以及想深入研究方向同学一张思维图。原创 2022-08-12 13:22:35 · 983 阅读 · 0 评论 -
WebRTC模块化设计思想之编解码
编码器的种类很多,有Opus,G711,Isac,PcmA,G722等,这些都是第三方的库或者开源软件,为了和第三方的隔离,只需第三方提供的接口文件以及相应的库就行,并不需要编译第三方库源码,类似上面的方法,封装一层;由上可以看出,只要AudioCodingModule定义好,则TwoWayCommunication这个类所属的模块开发者就可以开发编译调试自己的模块,而不必关心AudioCodingModuleImpl是否实现了对应的方法,只在双方联调的时候才需要对方正确实现该接口类中的方法。...原创 2022-08-12 19:15:00 · 704 阅读 · 0 评论 -
模型推理那些事
模型推理那些事目前主流的深度学习框架有目前越来越多的深度学习框架、工具集以及定制化硬件使得构建、部署和跨框架管理深度学习越来越复杂。常用的深度学习框架有TensorFlow、Pytorch、MXNet和CNTK,因为训练最为耗时,所以常使用GPU、FPGA、TPU和ASIC等硬件加速模块缩短训练耗时,这些定制化的硬件需要使用定制化的驱动和库以便和深度学习框架交互。NVIDIA CUDA/cuDNN和Intel的OneDNN是这种情况的两个例子。当训练结束得到最终模型之后,部署阶段的平台可以是公有云、电脑、原创 2021-05-30 08:58:34 · 2964 阅读 · 1 评论 -
语音编码之压缩
我的书:购买链接:京东购买链接淘宝购买链接当当购买链接这本书里叙述了SILK和Opus语音编解码器,这里简单的串接编解码的核心知识点。LPCLPC(Linear predictive coding)在音频和语音处理领域常用于表示压缩信号的谱包络,这是最强大的语音分析技术之一,也是低比特率高品质语音编码常用到的方法之一。LPC基于人的发声生物物理机理的发音过程建模模型。由于语音信号是短时平稳信号,基频和共振峰在短时是不变的,通常将一秒钟的数据分割为30~50个块分析各块的L原创 2020-05-29 21:24:05 · 2525 阅读 · 0 评论 -
WebRTC之视频采集
基于WebRTC的实时音视频会议中对于视频处理流水,第一级就是视频采集,视频内容可以摄像头、屏幕和视频文件,视频来源的操作系统可以是Linux、Windows、Mac,IOS以及Android,不同的平台由不同的公司开发设计,因而他们从camera获取视频的底层框架并不一样,Linux系统使用V4L2(Video for Linux Version 2),Mac和IOS都是苹果公司开发的,都使用AVFoundation框架,Windows使用的是微软开发的DS(Direct Show)框架,Android使原创 2020-05-17 23:23:41 · 3075 阅读 · 0 评论 -
深度学习 回声消除 AEC
我的书:购买链接:京东购买链接淘宝购买链接当当购买链接本篇阐述核心思想和初级的demo,在《实时语音处理实践指南》一书中介绍过rnnoise降噪,并且笔者github上也附带了该git库;承接书中“实时”性要求,基于深度学习的AEC必须满足两个要求,一个是计算量要少,一个是处理的窗长要短,故而这里选择了10ms(16kHz采样率信号,160个点);由于AEC存在Near和Far端两个信号,如果按照频点计算,那么计算量将是单通道的两倍,所以这里按照频带计算,以便输入网络的参数能少些原创 2020-05-10 09:42:38 · 4505 阅读 · 12 评论 -
深度学习语音增强
深度学习语音增强我的书:购买链接:京东购买链接淘宝购买链接当当购买链接在我的这本书里,详述了基于信号处理的语音降噪(NS)和回声消除(AEC)算法,并对基于监督深度学习降噪介绍了例子;这里对深度学习方法做个补充总结。传统信号处理方法是经过全人类数百年经验积累而得到的,源于大千世界,因而模型的普适性较强,而监督深度学习依赖监督对象(训练集),由于训练集始终只能是大千世...原创 2020-05-02 15:44:02 · 5501 阅读 · 6 评论 -
WebRTC 架构
WebRTC Native框架我的书:购买链接:京东购买链接淘宝购买链接当当购买链接WebRTC还是比较庞大的,咋一看无从下手,本篇以WebRTC自带的例子,阐述WebRTC Native核心的音频、视频和信令三个部分,WebRTC本身架构是P2P的,信令的部分也是围绕P2P展开的,好了,废话不多,直接上正文了。WebRTC是Google开源的Web实时音视频通信框...原创 2020-04-30 17:32:32 · 6440 阅读 · 8 评论 -
高效率代码技巧
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书1.对齐memory,高效利用cache line,尽可能减少取数次数/* |alignment| is the byte alignment and MUST be a power of two. */```struct AlignedPtr* AllocAlignedPointer(int ...原创 2020-04-21 16:48:41 · 1643 阅读 · 2 评论 -
数学计算库
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书写算法的实现,离不开各种矩阵以及线性代数的运算,包括矩阵求逆,矩阵分解,SVD以及特征值,特征向量等;尤其是复高斯模型或者在频域里做处理时用到复数矩阵相关运算;APP公司官网的加速链接中就有BLAS相关的API。这里gsl是开源的计算库,该库的最新文档链接如下:https://www.gnu.org/sof...原创 2018-06-21 16:27:56 · 1746 阅读 · 0 评论 -
tensorflow 模型文件
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书tensorflow生成的模型文件主要有三个:```.meta, .index和.data```分成三个文件的原因是tensorflow将计算图结构和变量值存储在不同的文件里。.meta文件描述的是计算图结构。freeze_graph.py脚本从一个GraphDef(.pb或者.pbtxt)文件和c...原创 2018-06-19 17:59:47 · 1844 阅读 · 0 评论 -
makefile 编译第三方库
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书以前在编写跨平台编译框架时,要引用第三方库,这里的例子实现了下载和编译第三方库,正适合用~!```FFTW = fftw-3.3.4all: .deps fftw decode ops utils.deps: sudo apt-get install libsamplerate-dev -y...原创 2018-05-28 10:15:34 · 2422 阅读 · 0 评论 -
关于AEC算法的几点思考
CSND已永久停更,最新版唯一来源点击下面链接跳转:一年前我剖析过开源的AEC算法,文章链接是语音增强和语音识别网页书;时隔这么长时间,再过来看这个算法,略有体会,以下有几点个人思考:AEC算法的主要目的是自身音源消除,对于手机或者pc这类的通话场景,这类场景和音响场景稍有差异,两者遇到的主要问题会有些差异;对于视频通话这类场景,两个通信终端的时钟偏斜和漂移是不定的,而音箱场景这个是可...原创 2018-05-16 23:40:51 · 10050 阅读 · 0 评论 -
唤醒词识别
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书有如下几个原因使得唤醒词识别具有难度1.低功耗;2.低成本;占用的运算资源少,包括cpu以及memory资源;3.连续语音识别;4.场景较为复杂;噪音(办公,居家,电视,自然,电器),远场(增强,波束),方言,口音(儿童,男、女)等5.训练的语料集合本文就唤醒词的理解和Am...原创 2018-05-14 21:41:55 · 14030 阅读 · 5 评论 -
音频应用处理器性能benchmark
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书处理器类别1.Analog Devices(SHARC, Blackfin, SigmaDSP)2.TI(c55, c67x,c66x)3.ARMcortex-M4/M7; cortex-A8/A9/A15/A53/etc4.Intel x86/x645.软IP语音增强和语音识别Tens...原创 2018-05-10 14:43:02 · 1097 阅读 · 0 评论 -
舒适噪声生成算法及其实现
CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书舒适生成算法CNG(comfort noise generation) 舒适噪声应用在实时语音通信(VoIP,电话等)场景中,主要解决两个问题,第一个是减小传输数据量,进而减小传输带宽的要求,这是因为50%的时间是没有语音的,第二个是让人感觉语音通信是持续连接的。随机数生成舒适噪声的生成算法中用到了随...原创 2018-05-05 22:48:59 · 5055 阅读 · 0 评论 -
Kaldi HMM拓扑和状态转换模型
HMM拓扑使用c++的HmmTopology来描述音素的HMM拓扑。其描述的一个实例(3-state Bakis模型)如下:Topology> TopologyEntry> ForPhones> 1 2 3 4 5 6 7 8 ForPhones> State> 0 PdfClass> 0 Transition> 0 0.5翻译 2017-11-10 09:20:48 · 4388 阅读 · 1 评论 -
Kaldi知识点汇集
特征提取MFCCcompute-mfcc-feats.ccCreate MFCC feature files.Usage: compute-mfcc-feats [options...] <wav-rspecifier> <feats-wspecifier>其中参数rspecifier用于读取.wav文件,wspecifier用于写入得到的MFCC特征。典型应用中,特征将被写入到一个大的”arc原创 2017-11-05 11:21:45 · 3802 阅读 · 0 评论 -
Kaldi声学模型训练
支持标准的基于ML训练的模型 线性变换,如LDA,HLDA,MLLT/STC基于fMLLR,MLLR的说话人自适应支持混合系统支持SGMMs 基于fMLLR的说话人识别模型代码,可以容易的修改扩展声学模型训练过程1.获得语料集的音频集和对应的文字集可以提供更精确的对齐,发音(句子)级别的起止时间,但这不是必须的。2.将获得的文字集格式化kaldi需要各种格式类型的,训练过程中将会用到每原创 2017-11-04 14:08:55 · 10812 阅读 · 0 评论 -
EM算法
前一篇文章提到了基于统计模型的VAD决策方法,在看《WebRTC之VAD算法,http://blog.csdn.net/shichaog/article/details/52399354》时,其计算概率使用的高斯参数是给定的,那么问题来了; 1.webrtc中给定的参数是如何得到的? 2.这些参数能否适用你想要使用的场景? 3.这些场景和你的场景匹配度如何? 4.如何根据你手中数据提升web原创 2017-11-01 18:52:09 · 2404 阅读 · 0 评论 -
VAD综述
VAD广泛应用于语音编码(网络/无线/有线传输),说话认识和语音识别(ASR,基于机器学习的方法,也是经过VAD标注后的语音数据用于训练的,准确标注真实场景的带噪语音比较重要)。VAD的准确对前端算法也是比较关键的,这里所说的是语音/非语音(非语音/静音)检测,一个VAD系统通常包括两个部分,特征提取和语音/非语音判决;常用的特征提取可以分为五类:基于能量频域倒谱谐波 长时信息 基于能量原创 2017-10-17 09:51:53 · 18525 阅读 · 1 评论 -
语音识别-信号处理篇
连接前端和后端的语音识别(ASR)的关键是给到后端(根据特征判定词/句)系统的特征类型和特征质量,对于传统的语音识别系统常采用MFCC(mel-frequency ceptral coefficients),这个特征对于高斯白噪声和混响具有鲁棒性,对于有色和相干干扰,常采用一阶和二阶微分减小其对MFCC系数的影响,该方法计算量相对较小;对于深度学习,通常采用Fbank做为特征而非MFCC,MFCC做原创 2017-10-08 09:21:11 · 9142 阅读 · 1 评论 -
基本信号处理
如何根据滤波器系数得到幅频和相频相应使用MATLABb=1;a=[...];fvtool(b,a)球坐标和直角坐标转换公式 转换公式: 球坐标系(r,θ,φ)与直角坐标系(x,y,z)的转换关系: x=rsinθcosφ y=rsinθsinφ z=rcosθ 反之,直角坐标系(x,y,z)与球坐标系(r,θ,φ)的转换关系为 r=x2+y2+z2−−−−−−原创 2017-09-25 21:00:36 · 1088 阅读 · 0 评论 -
模拟域频率与数字域频率关系
数字频率于模拟频率互相转化的公式如下: ω=2πffs\omega=\frac{2\pi f}{f_s} 通常所说的频率,在没有特别指明的情况下,指的是模拟频率,其单位为赫兹(HzHz),或者为1/秒(1/s1/s),数学符号用ff来表示。以赫兹表示的模拟频率表示的是每秒时间内信号变化的周期数。如果用单位圆表示的话,如图1所示,旋转一圈表示信号变化一个周期,则模拟频率则指的是每秒时间内信号旋转的原创 2017-09-25 16:02:00 · 11115 阅读 · 0 评论 -
code profiling
本文基于c/c++。perf可以使用perf list列出所有支持的event。perf工具支持硬件和软件事件,硬件事件由硬件计数器测量。 常关心的硬件事件如下:cpu-cycles OR cyclesinstructionscache-referencescache-missesbranch-instructions OR branchesbranch-missesbus-cycle原创 2017-09-23 22:08:58 · 2163 阅读 · 0 评论 -
tensorflow android 唤醒词识别
工程源码在代码我已托管到github上了。https://github.com/shichaog/tensorflow-android-speech-kws这是基于tensorflow 官网的一个例子。Android tensorflow API private static final String LABEL_FILENAME = "file:///android_asset/conv_act原创 2017-08-27 22:11:39 · 1358 阅读 · 2 评论 -
子带技术
语音信号是宽带信号,根据奈奎斯特采样定理,采样率为16kHz的语音信号的有效带宽是8KHz,不论是对于降噪,aec,vad,波束形成亦或是logfbank特征提取,我们都期望更精细的处理以提高准确性,因为有时噪声就是带限信号,而回声消除要能处理的时间比较长,就需要滤波器抽头数比较多,这样积累的数据长度和计算量就比较大,同理波束形成技术也是空时域滤波技术,也可以划分成子带进行更为精细的处理。 首先划原创 2017-08-18 18:42:48 · 6385 阅读 · 1 评论 -
笔记
1.tensorflow源码完整下载方法git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git参数--recurse-submodules可以递归下载子模块。2.报错no lapack/blas resources found ubuntu解决方法:sudo apt-get install libbla原创 2017-08-02 11:06:18 · 955 阅读 · 0 评论 -
语音增强-自适应回声消除
自适应回声消除技术被广泛应用于通信,VoIP和智能机器人设备中。其主要作用是消除设备自身speaker发出的声音,包括语音,音乐等。回声是指自身发出的声音经过多次反射(天花板,墙)并多次传入拾音设备。如果反射声波比直达声波到拾音设备的时间比较段,这种情况被称为混响(频谱失真)而非回声;为了增加人耳听觉正确率,ASR系统识别的正确率,是需要一些回声的(实际上是比直达波晚到不超过30ms的反射波),这样原创 2017-07-28 09:44:12 · 4864 阅读 · 0 评论 -
语音增强技术
在人机交互的场景中,麦克风采集到的人声不可避免的混杂外界噪声,可以通过信号处理的方法在处理前将其去除,以获得“纯净”的语音信号。这一过程称为降噪或者语音增强;从麦克风数量上分为单麦克降噪,多麦克降噪,算法层次上,主要分为滤波法(时域,频域,空域),谱分辨法,基于模型的方法。 噪声将改变采集到的人声特性,噪声/干扰分为四类:加性噪声,人声间互相干扰,混响,回声。这些噪声在信号处理领域分别被称为:降噪原创 2020-04-21 18:26:21 · 8230 阅读 · 17 评论 -
如何理解FFT
时域信号分为周期/非周期,连续和离散,这样有四中样式的傅里叶变换。 变换类型 时域信号特性 频谱特性 连续时域FT 连续,非周期 非周期,连续 离散时域傅里叶变换DTFT 离散非周期 周期,连续 傅里叶级数FS 连续,周期 非周期,离散 离散傅里叶变换DFT 离散,周期 周期,离散如上可以看到,在一个域的离散信号,在另一个域将变成周期的,类翻译 2017-07-22 10:03:41 · 7934 阅读 · 3 评论 -
麦克风阵列波束形成
波束形成beamforming 体现的是声源信号的空域选择性,许多传统波束形成方法具有线性处理结构;波束形成需要考虑三个方面: 1.麦克风阵列个数;2.性能; 3.鲁棒性 在麦克风较少时,波束形成的空域选择性差,当麦克风数量较多时,其波束3dB带宽较为窄,如果估计的目标声源方向有稍有偏差,带来的影响也更大,鲁棒性不好。通常鲁棒性和性能是对矛盾体,需要均衡来看。 通常波束方向图需要随环境的语音/原创 2017-07-22 10:00:20 · 16974 阅读 · 1 评论 -
MNIST例子构建tensorflow Android应用
和谷歌给的例子差异,是这里给出了如何生成所需要的pb文件:https://github.com/MindorksOpenSource/AndroidTensorFlowMNISTExample生成PB模型文件python mnist.py mnist.pyfrom __future__ import print_functionimport shutilimport os.pathimpor原创 2017-06-25 11:58:19 · 714 阅读 · 0 评论 -
语言模型
电话有效语音范围125Hz∼\sim3800Hz。使用HMM做为语音识别系统的前提是连续语音特征可以分成准静态序列。这些状态序列之间是不相关的,系统通常采用25ms的帧长,10ms的滑动长度,提取特征MFCC/PLP做分析特征。 上面的假设的HMM状态的独立性在语音上实际上并不成立,这是由于观察到的每一帧语音都或多或少依赖前面的语音(发音器官的生物物理特性)。所以希望将发音轨迹(或者说帧于帧之间的原创 2017-06-25 11:52:59 · 2315 阅读 · 0 评论 -
kaldi 在线中文识别系统搭建
原始数据下载http://www.openslr.org/18/ 总共三个tgz文件: data_thchs30.tgz [6.4G] ( speech data and transcripts ) test-noise.tgz [1.9G] ( standard 0db noisy test data ) resource.tgz [24M] ( supplementary原创 2017-06-23 20:14:39 · 24757 阅读 · 9 评论 -
tensorflow 移植到android平台
本文基于 https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample下载和安装jdk,ndk和sdk下载JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 我选择的是jd原创 2017-06-21 21:09:52 · 5089 阅读 · 1 评论 -
高斯混合模型
可能遇到的工具问题gsc@X250:~/kaldi/egs/timit/s5$ ./run.sh ============================================================================ Data & Lexicon & Language Preparation原创 2017-06-19 09:35:07 · 2756 阅读 · 0 评论 -
kaldi yesno example
主要分为六个部分数据描述如果kaldi/egs/yesno/s5目录下没有waves_yesno.tar.gz文件,则要下载该文件. http://www.openslr.org/resources/1/waves_yesno.tar.gz 解压后,waves_yesno文件夹下的文件如下.0_0_0_0_1_1_1_1.wav 0_0_1_1_0_1_1_0.wav ...1_1_1_原创 2017-06-15 19:01:30 · 7062 阅读 · 1 评论 -
tensorflow Optimizer算法
tensorflow优化器种类如下,其中Optimizer是基类 tf.train.Optimizer tf.train.GradientDescentOptimizer tf.train.AdadeltaOptimizer tf.train.AdagradOptimizer tf.train.AdagradDAOptimizer tf.t原创 2017-06-13 22:06:47 · 14453 阅读 · 0 评论 -
seq2seq
seq2seq是通用编码器-解码器框架(encoder-decoder framework),可以用在机器翻译,文本摘要,会话建模,图像描述。源码https://github.com/google/seq2seq tensorflow 中的实现代码如下: tensorflow/tensorflow/python/ops/seq2seq.py基本模型基于论文https://arxiv.org/pd原创 2017-06-12 10:02:00 · 3393 阅读 · 3 评论