基于DTW自学习的非特定人语音识别

    最近需要在CortexM4是做一套非特定人孤立词识别算法,研究了一下语音识别算法,目前较为广泛的是DTW、HMM和ANN,由于MCU算力有限,算法较为简单的DTW显然是不二之选。

    DTW(Dynamic TimeWarping)算法是一种模式匹配经典算法,它使用动态规划(DP)的方法成功解决了语音信号特征参数序列时间对准的问题,算法较为简单,有效,对处理器性能要求不高,在孤立词语音识别中获得了广泛应用。

       DTW算法对于特定人孤立词识别准确度较高,但是对于非特定人,其特征参数于模型库有时候会存在较大区别,从而导致识别率不高的现象。

       为解决该问题,本文尝试采用自学习方式更新模板库,从而提高设备的识别率。

步骤如下:

1、获取当前语音的特征参数后,与预置的标准特征对比。预置两种匹配度:最低匹配及高度匹配。

2、如果标准特征匹配通过,先输出匹配成功,去执行相应动作以提高响应速度。如果不通过,则开始用户特征匹配。

3、如果是高度匹配标准特征,则程序返回,否则开始用户特征匹配。

4、如果用户特征是高度匹配,则程序返回,否则开始临时特征匹配。

5、如果临时特征库不存在,则保存当前特征为临时特征。

6、如果临时特征为高度匹配,则临时特征匹配变量++。否则把当前输入保存为临时特征。

7、如果临时特征匹配变量大于预设值,意味着是同一用户语音输入,把临时特征保存为用户特征。

通过上述操作,可以自动更新经常使用该设备用户的语音特征,提高设备识别率。

 

模板定义:

特征模板

说明

模板1

 

同一孤立词训练挑选的3个不通模组

模板2

模板3

用户模板1

两个用户模组,默认为空

用户模板2

临时模板

用于保存最后一次特征参数

 

#define FEATURE_LIB_NUM   3
#define USER_LIB_NUM      2
typedef struct Dtw_Feature_Struct
{
    Mfcc_Data FeatureLib[FEATURE_LIB_NUM]; 
    Mfcc_Data UserLib[USER_LIB_NUM];
    Mfcc_Data TempLib;
    uint8_t UserLibNum;
    uint8_t UserLibValidCnt;
}DtwFratureLib;

 程序流程:

 

    

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值