语音识别机器人制作(4)
编辑:robotain 来源:网络 2009-12-06
6 所用语音算法介绍
6.1 语音识别算法简介
6.1.1 语音识别概述:
根据对说话人的依赖程度,分为:
z 特定人语音识别(SD):只能辨认特定使用者的语音,训练->使用
z 非特定人语音识别(SI):可辨认任何人的语音,无须训练
根据对说话方式的要求,分为:
z 孤立词识别:每次只能识别单个词汇
z 连续语音识别:用者以正常语速说话,即可识别其中的语句
6.1.2 语音识别原理
语音识别原理参看下图:
6.1.3 SPCE061A 实现语音识别的步骤
SPCE061A 实现语音识别的步骤,分为训练部分与识别部分,以及在训练、识别过程中中断的情况,参考下图:
6.1.4 语音识别API 介绍
BSR_InitRecognizer(int AudioSource);
初始化识别器
BSR_Train(int WordID,int TrainMode);
语音训练
BSR_DeleteSDGroup(int SDGroupNo);
清除内存
BSR_PauseRecognizer()
暂停识别,但不释放中断等资源
BSR_ResumeRecognizer()
恢复被暂停的识别
BSR_GetRecognizerScore()
获得识别结果的可信度,返回值从-4096 到4096,数值越大表示输入语音与特征模型的匹配度越高。
BSR_EnableCPUIndicator()
开启CPU 状态监测功能。开启该功能后,IOA0 和IOA1 将发出每16ms 电平变化一次的方波。
BSR_DisableCPUIndicator()
关闭CPU 状态监测功能。
BSR_ExportSDWord(int CommandID)
使用函数库时,会自动创建一个100 Word 的数组BSR_SDModel[100],可以把某条训练命令的特征模
型数据导出到这个数组中。
BSR_ImportSDWord(int CommandID)
可以把BSR_SDModel 数组中的数据导入为某条语音命的特征模型。
unsigned int BSR_SDModel[];
配合BSR_ExportSDWord(int CommandID)与BSR_ImportSDWord(int CommandID)函数使用,此数组的作用相当于一个暂时的存储区。
6.2 凌阳音频概述
语音处理大致可以分为A/D 采样输入、编码处理、存储、解码处理以及D/A 等;
SPCE061 解决方案:
将A/D、编码算法、解码算法、存储及D/A 作成相应的模块,对于每个模块都有其应用程序接口API,用户只需了解每个模块所要实现的功能及其参数的内容,然后调用该API 函数即可实现语音处理功能。
6.2.1 凌阳音频压缩算法的编码标准
表 6-1 是不同音频质量等级的编码技术标准(频响):
凌阳音频压缩算法处理的语音信号的范围是200Hz-3.4KHz 的电话话音。
6.2.2 压缩分类
压缩分无损压缩和有损压缩。
无损压缩一般指:磁盘文件,压缩比低:2:1~4:1。
而有损压缩则是指:音/视频文件,压缩比可高达100:1。
凌阳音频压缩算法根据不同的压缩比分为以下几种(具体可参见语音压缩工具一节内容):
SACM-A2000:压缩比为8:1,8:1.25,8:1.5
SACM-S480: 压缩比为80:3,80:4.5
SACM-S240: 压缩比为80:1.5
按音质排序:A2000>S480>S240
6.2.3 凌阳常用的音频形式和压缩算法
1) 波形编码:sub-band 即SACM-A2000
特点:高质量、高码率,适于高保真语音/音乐。
2) 参数编码:声码器(vocoder)模型表达,抽取参数与激励信号进行编码。如:SACM-S240。
特点:压缩比大,计算量大,音质不高,廉价!
3) 混合编码:CELP 即SACM-S480
特点:综合参数和波形编码之优点。 本方案采用该编码方式。
除此之外,还具有FM 音乐合成方式即SACM-MS01。
6.2.4 凌阳语音的播放、录制、合成和辨识
凌阳的SPCE061A 是16 位单片机,具有DSP 功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。凌阳压缩 算法中SACM_A2000、SACM_S480、SACM_S240 主要是用来放音,可用于语音提示,而DVR 则用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识,所以对于特别爱好者可以到我们的网站去了解相关内容,这 里只给出它的API 函数介绍及程序代码的范例,仅供参考。
6.2.5 常用的应用程序接口API 的功能介绍及应用
表 6-2 所列出的是凌阳音频的几种算法。
语音和音乐与我们的生活有着非常密切的关系,而单片机对语音的控制如录放音、合成及辨识也广泛应用在现实生活中。我们知道对于语音处理大致可以分为 A/D、编码处理、存储、解码处理以及D/A 等。然而,通过麦克风输入所生成的WAVE 文件,其占用的存储空间很大,对于单片机来说想要存储大量的信息显然是不可能的,而凌阳的SPCE061A 提出了解决的方法,即SACM-LIB,该库将A/D、编码、解码、存储及D/A 作成相应的模块,对于每个模块都有其应用程序接口API,所以您只需了解每个模块所要实现的功能及其参数的内容,然后调用该API 函数即可实现该功能,例如在程序中插入语音提示,或连续播放一段语音或音乐,也可以根据自己需要的空间或使用范围选择适合自己的算法。以下就SACM- S480 算法具体介绍其API 函数的格式、功能、参数、返回值、备注。(其它算法可以见附录)该压缩算法压缩比较大80:3, 存储容量大,音质介于A2000 和S240 之间,适用于语音播放, 如“文曲星”词库等,所以我们这个方案就采用了该算法。(只介绍程序中用到的函数,其他API 函数参考凌阳科技大学计划网站)
其相关API 函数如下所示:
1)【API 格式】C:int SACM_S480_Initial(int Init_Index)
ASM:R1=[ Init_Index]
Call F_ SACM_ S480_Initial
【功能说明】 SACM_S480 语音播放之前的初始化。
【参数】 Init_Index=0 表示手动方式;Init_Index=1 则表示自动方式。
【返回值】 0:代表语音模块初始化失败
1:代表初始化成功。
【备注】 该函数用于对定时器、中断和DAC 等的初始化。
2) 【API 格式】 C:void SACM_S480_ServiceLoop(void)
ASM:Call F_ SACM_S480_ServiceLoop
【功能说明】 从资源中获取SACM_S480 语音资料,并将其填入解码队列中。
【参数】 无。
【返回值】 无。
【备注】 播放语音文件中数据,当出现FF FF FFH 数据时便停止播放。
3) 【API 格式】C:int SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set);
ASM:R1=[ Speech _Index]
R2=[ Channel]
R3=[ Ramp_Set]
Call SACM_S480_Play
【功能说明】 播放资源中SACM_S480 语音。
【参数】 Speech _Index 表示语音索引号。
Channel:
1.通过DAC1 通道播放;
2.通过DAC2 通道播放;
3.通过DAC1 和DAC2 双通道播放。
Ramp_Set:
0.禁止音量增/减调节;
1.仅允许音量增调节;
2.仅允许音量减调节;
3.允许音量增/减调节。
【返回值】 无。
【备注】
① SACM_S480 的数据率有4.8Kbps/7.2Kbps 三种,可在同一模块的几种算法中自动选择一种。
②Speech_Index 是定义在resource.inc 文件中资源表(T_SACM_S480_SpeechTable)的偏移地址。
③中断服务子程序中F_FIQ_Service_ SACM_S480 必须放在TMA_FIQ 中断向量上(参见SPCE 的中
断系统)。
④函数允许TimerA 以所选的的数据采样率(计数溢出)中断。
4)【API 格式】ASM:Call F_FIQ_Service_ SACM_S480
【功能说明】用作SACM_S480 语音背景程序的中断服务子程序。通过前台子程序(自动方式的
SACM_S480_ServiceLoop 及手动方式的SACM_S480_Decode)对语音资料进行解码,然后将其送入DAC
通道播放。
【参数】 无。
【返回值】 无。
【备注】SACM_S480 语音背景子程序只有汇编指令形式,且应将此子程序安置在TMA_FIQ 中断源上。
Tags:
顶一下
(3)
100%
踩一下
本文网址: