语音识别知识介绍

来源:百度文库 编辑:神马文学网 时间:2024/07/03 09:15:55
第一节 语音识别知识介绍
文章来源:凌阳科技大学计划
作者:凌阳科技大学计划 发布时间:2005-4-22 14:54:32

    在前面我们已经介绍过语音辨识的一些相关的内容,在这里我们给出SPCE061的特定语者辨识SD(Speaker Dependent)的一个例子以供有兴趣者参考。SD即语音样板由单个人训练,也只能识别训练某人的语音命令,而他人的命令识别率较低或几乎不能识别。
    图1.1是语音辨识的一个整体框图:

    同样语音辨识也将其一些功能作成模块,并通过API调用来实现这些功能,在这里我们为大家介绍一些常用的API函数,如果有兴趣者可以登陆我们的网站去获得更多的相关内容
初始化:
【API格式】C: int BSR_DeleteSDGroup(0);
ASM:F_BSR_DeleteSDGroup(0)
【功能说明】SRAM初始化。
【参数】该参数是辨识的一个标识符,0代表选择SRAM,并初始化。
【返回值】当SRAM擦除成功返回0,否则,返回-1。
训练部分:
1) 【API格式】C:int BSR_Train (int CommandID, int TraindMode);
ASM:F_BSR_Train
【功能说明】训练函数。
【参数】
CommandID:命令序号,范围从0x100到0xFFF,并且对于每组训练语句都是唯一的。
TraindMode:训练次数,要求使用者在应用之前训练一或两遍:
BSR_TRAIN_ONCE:要求训练一次。
BSR_TRAIN_TWICE要求训练两次。
【返回值】训练成功,返回0;没有声音返回-1;训练需要更多的语音数据来训练,返回-2;当环境太吵时,返回-3;当数据库满,返回-4;当两次输入命令不通,返回-5;当序号超出范围,返回-6。
【备注】
① 在调用训练程序之前,确保识别器正确的初始化。
② 训练次数是2时,则两次一定会有差异,所以一定要保证两次训练结果接近
③ 为了增强可靠性,最好训练两次,否则辨识的命令就会倾向于噪音
④ 调用函数后,等待2秒开始训练,每条命令只有1 .3秒,也就是说,当训练命令超出1.3秒时,只有前1.3秒命令有效。
辨识部分:
1)【API格式】C: void BSR_InitRecognizer(int AudioSource)

ASM:F_BSR_InitRecognizer
【功能说明】辨识器初始化。
【参数】定义语音输入来源。通过MIC语音输入还是LINE_IN电压模拟量输入。
【返回值】无。
2)【API格式】C:int BSR_GetResult();
ASM:F_ BSR_GetResult
【返回值】=R1
【功能说明】辨识中获取数据。
【参数】无。
【返回值】
当无命令识别出来时,返回0;
识别器停止未初始化或识别未激活返回-1;
当识别不合格时返回-2;
当识别出来时返回命令的序号。
【备注】该函数用于启动辨识,BSR_GetResult();
3)【API格式】C: void BSR_StopRecognizer(void);
ASM:F_ BSR_StopRecognizer
【功能说明】停止辨识。
【参数】无。
【返回值】无。
【备注】该函数是用于停止识别,当调用此函数时,FIQ_TMA中断将关闭。
中断部分:
【API格式】ASM:_BSR_InitRecognizer
【功能说明】在中断中调用,并通过中断将语音信号松DAC通道播放。
【参数】无。
【返回值】无。
【备注】
① 该函数在中断FIQ_TMA中调用
② 当主程序调用BSR_InitRecognizer时,辨识器便打开8K采样率的FIQ_TMA中断并开始将采样的语音数据填入辨识器的数据队列中。
③ 应用程序需要设置一下程序段在FIQ_TMA中:
.PUBLIC _FIQ
.EXTERNAL _BSR_FIQ_Routine //定义全局变量
.TEXT
_FIQ:
push R1,R4 to [SP] //寄存器入栈保护
R1 = [P_INT_Ctrl]
call _BSR_FIQ_Routine //调用子程序
R1 = 0x2000 //清中断标志位
[P_INT_Clear] = R1
pop R1,R4 from [SP]; //寄存器组出栈
reti;
END
    其中实时监控是用来观察辨识是否正常工作,如果辨识正常则会产生一16ms连续稳定方波如图1.2否则如果CPU超载则会产生不稳定波形如错误!未找到引用源。,此时需要删除命令,或是优化程序否则会丢失语音数据产生辨识出现错误的信息