来源:2011-10-05 18:36:00 热度:

语音识别机器人制作(4)

语音识别机器人制作(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%

踩一下

本文网址:

欢迎关注微信公众号:人工智能报;合作及投稿请联系:editor@cnaiplus.com

AI中国号...

关注微信公众号,了解最新精彩内容
热门标签...
    SQL Error: select a.*,b.* from www_92game_net_enewstags a LEFT JOIN www_92game_net_enewstagsdata b ON a.tagid=b.tagid WHERE isgood=1 group by b.tagid order by a.num desc limit 12