1、研究特点以孤立字语音识别为主,通常把孤立字作为一个整体来建立模块。80年代,语音识别研究重点之一是链接词语音识别,开发了各种连接词语音识别和关键词识别算法,如多级动态规划语音识别算法2。目前在语音识别研究领域非常活跃的课题为稳健语音识别、说话人自适应技术、大词汇量关键词识别算法、语音说识别的可信度评测算法。基于类的语言模型和自适应语言模型,一级深层次的自然语音的理解。3国内外语音识别根据说话人可以分为:特定人,任意人。本系统特性为特定人的简单语音识别。语音识别未来面临的主要问题:自然语言的识别和理解、语音信息量大、语音的模糊性、语音特性的变动、环境噪声和干扰降低了识别率。4单片机是超大规模集成
2、电路技术的产物,包括中央处理器CPU、存储器、定时/计数器、中断系统、I/O和DAC(ADC)电路。早起单片机都是8位或者4位的,随着技术的发展高端的32位单片机诞生,主频超过300MHz,处理速度提高很多倍。单片机由于集成度高,系统结构简单,模块化,可靠性高,处理速度快,目前在生活中的各个领域随处可见,广泛应用于仪器仪表、航空航天、医用设备等。单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。随着超大规模集成电路技术的发展,单片机的应用更加广泛和深入。第二章 研究的主要内容及预期目标第一节 研究的理论基础理论基础:(1)模/数电子技术(2)电路分析原理(3)单片机原理(4
3、)数字信号处理(DSP)(5)语音识别技术研究的主要内容:(1)语音识别技术(2)D/A 、A/D技术(3)数字信号处理(DSP)技术(4)接口电路及键盘电路设计(5)系统的各子程序模块设计(6)系统的稳定性和抗干扰性系统的预期目标和可行性:(1)系统的预期目标(2)1SPLC501上面显示时间、日期、星期(3)时间的可调性和闹铃选择 (4)备忘录提示(5)语音识别控制报时功能(6)系统的可行性(7)系统的稳定性本系统采用高度集成的单片机SPCE061A,处理速度快,SPCE061A 的实时时钟32768Hz经过PLL倍频电路产生系统时钟频率再经过分频得到CPU 时钟频率。时基信号来于3276
4、8HZ为系统提供中断信号。电源的的前后两组电容用来去耦滤波。5为了获得标准 3.3V 电压,在板子上加入 SPY0029A 三端稳压器,两个二极管,是为防止误将电源接反造成不必要损失保证了系统的稳定性。第三章 系统的硬件设计第一节 ISPCE061单片机系统电路图3.1 .1系统硬件结构图系统的硬件电路包括:单片机系统(DAC(ADC、语音识别、定时/计数等)、时钟芯片单元、音频输入输出单元、显示单元、接口电路单元、电源电路单元、键盘中断单元。IOA的高八位接到液晶模组的八个数据端,同时也连接了液晶模组的电源,即直接用一根10pin的排线连接61 板“+”、IOA815、“-”与SPLC501
5、A液晶显示模组的“+”、DB07、“-”,主要用来向液晶模组传送命令和数据;IOB6 接EP,IOB5 接R/W,IOB4 接AO,用来控制液晶的显示和工作方式。3.1SPCE061单片机系统电路图3.1.2 SPCE061系统电路 图3.1.2附 系统的存储单元分段SPCE061A包括:FLASH (闪存)、SRAM (静 态内存)、通用I/O 端口、定时器/计数器、中断控制、CPU 时钟锁相环(PLL)、ADC (模拟数字转换器)、DAC (数字模拟转换器)输出、UART (同步串行输入输出接口)、SIO (串行输入输出接口)、低电压监测/低电压复位模块、Watchdog。声音模/数转换器
6、输入通道内置麦克风放大器,并具有自动增益控制(AGC)功能。内置在线仿真电路接口ICE (在线实时仿真/除错器)。SPCE061A 的系统时钟由时钟发生器(32768Hz 晶振)、锁相环(PLL)和时间基准信号(RTC)组成。32768Hz 的实时时钟经过PLL 倍频电路产生系统时钟频率(Fosc),Fosc 再经过分频得到 CPU 时钟频率(CPUCLK)。锁相环 PLL (Phase Lock Loop)振荡器电路的作用是将系统提供的实时时钟的基频(32768Hz)进行倍频。时间基准信号,简称时基信号,来自于32768Hz 实时时钟,通过频率选择组合而成。时基信号发生器为定时/计数器提供各
7、种频率选择信号并为中断系统提供中断源信号。此外,时基信号发生器还可以通过分频产生时基信号,为中断系统提供各种实时中断源信号。第二节 晶振电路图3.2晶振电路32768Hz 的实时时钟经过PLL 倍频电路产生系统时钟频率(Fosc),Fosc 再经过分频得到 CPU 时钟频率(CPUCLK)。第三节 麦克风输入电路图3.3 麦克风输入电路 此电路主要人通过MIC把语音信号输入到系统中,单片机通过dsp算法、AD转换存储在flash中,然后通过API函数模式匹配进行语音控制识别及时报时等。第四节 音频输出电路图3.4 音频输出电路当触发MIC_In通道输入后,产生一个开始信号(b15(RDY) =
8、 0)。然后,逐次逼近式ADC 首先设置最高位,然后清除SAR的其它位(10 0000 0000B) 。这时,DAC0 输出电压(1/2 AVdd)与输入电压Vin进行比较。如果Vin VDAC ,保持原先设置为1的位(最高有效位)仍为 1;否则,该位会被清为 0。这个过程重复 10 次,直到这些位都被比较过。转换结果将会保存在SAR 内。A/D转换完成之后,P_ADC_Ctrl (读) ($7015H)的第15 位RDY被置为”1”。第五节 电源电路图3.5 电源电路采用 3 节 5 号电池进行供电,由 J10 接入,其中的前后两组电容用来去耦滤波,使其供给芯片更加平滑。为了获得标准 3.3
9、V 电压,在板子上加入SPY0029A 三端稳压器。两个二极管,是为防止误将电源接反造成不必要损失而设置的,在操作过程中千万不要将电源接反,因为反向电压超过一定的值,二极管将会被损坏,达不到保护的目的。后面的零电阻及其电源分不同的几路是为了减少电磁干扰设置的。第六节 SPLC501液晶显示系统电路图3.6 液晶显示系统电路SPLC501 为液晶显示控制驱动器,集行、列驱动器和控制器于一体,广泛应用于小规模液晶显示模块。SPLC501 单芯片液晶驱动,可以直接与其他微控制器接口总线相连。微控制器可以将显示数据通过 8位数据总线或者串行接口写到 SPLC501 的显存中。 SPLC501 的特点:
10、 1.内置8580位显示RAM。RAM 中的一位数据控制液晶屏上的一个象素点的亮、暗状态。“1”亮“0”暗。2.具有65 行驱动输出和 132 列驱动输出。3.可以直接与80 系列和68 系列微处理器相连。4.内置晶振电路,也可以外接晶振。5.工作温度范围为40 摄氏度和85 摄氏度之间。SPLC501 液晶显示模组采用GPG12063YS3 LCD 模块,此模块内嵌SPLC501芯片, 采用先进的COG技术,将芯片嵌在LCD玻璃上。第七节 电路板、pc连接电路(下载区)图3.7 下载连接电路图ICE 基本运行方式是通过控制clock 及通过ICE 伪指令方式,来控制CPU 的运行及缓存器资料
11、和内存资料的存取,因此必须通过控制缓存器值的设定来控制目前CPU 的动作。板上的74HC244 主要是在我们用下载线进行程序下载时起作用,主要起缓存的作用和完成对 SDA 是用来作为数据回送还是数据下载进行选择。3.8晶振、指示灯、复位、电源电路等略。第四章 系统的软件设计系统的软件设计就是个子程序系统设计,包括:初始主程序、功能程序、语音函数库程序、中断程序图4.1 程序结构图第一节 中断程序系统4.1.1 语音识别中断 语音识别技术主要是音频压缩技术的问题,本系统采用的是特定人的语音识别SD(Speaker Dependent):是指语音样板由单个人训练,也只能识别训练人的语音命令,而他人
12、的命令识别率较低或几乎不能识别。8接口是API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数。图4.2识别简图API 函数:int BSR_DeleteSDGroup(0) int BSR_Train (int CommandID, int TraindMode) void BSR_InitRecognizer(int AudioSource) int BSR_GetResult(Void) void BSR_StopRecognizer(void) void BSR_FIQ_Routine 初始化: 【API 格式】C: int
13、BSR_DeleteSDGroup(0) ; ASM :F_BSR_DeleteSDGroup(0) 【功能说明】SRAM 初始化。 【参 数】该参数是辨识的一个标识符,0 代表选择 SRAM,并初始化。 【返回 值】当 SRAM 擦除成功返回 0,否则,返回1。训练部分: 1) 【API 格式】C:int BSR_Train (int CommandID, int TraindMode);F_BSR_Train 【功能说明】训练函数。 【参 数】 CommandID:命令序号,范围从0x100 到 0x105,并且对于每组训练语句都是 唯一的。 TraindMode:训练次数,要求使用者在应
14、用之前训练一或两遍: BSR_TRAIN_ONCE:要求训练一次。 BSR_TRAIN_TWICE 要求训练两次。 【返回 值】训练成功,返回 0;没有声音返回1;训练需要更多的语音数据来 训练,返回2 ;当环境太吵时,返回3;当数据库满,返回4 ;当两次输入命令不 通,返回5;当序号超出范围,返回6。 【备 注】 在调用训练程序之前,确保识别器正确的初始化。 训练次数是 2 时,则两次一定会有差异,所以一定要保证两次训练结果接近 。 为了增强可靠性,最好训练两次,否则辨识的命令就会倾向于噪音 。 调用函数后,等待 2秒开始训练,每条命令只有 1.3 秒,也就是说,当训练 命令超出 1.3 秒
15、时,只有前 1.3 秒命令有效。辨识部分: 1)【API 格式】C: void BSR_InitRecognizer(int AudioSource) F_BSR_InitRecognizer 【功能说明】辨识器初始化。 【参 数】 定义语音输入来源。通过 MIC 语音输入还是 LINE_IN 电压模拟量输入。 【返回 值】无。 2 )int BSR_GetResult();F_ BSR_GetResult 【返回值】=R1 【功能说明】辨识中获取数据。 【参 数】 无。 【返回 值】 当无命令识别出来时,返回0; 识别器停止未初始化或识别未激活返回1; 当识别不合格时返回2 ; 当识别出来时
16、返回命令的序号。 【备 注】 该函数用于启动辨识,BSR_GetResult() ; 3 ) void BSR_StopRecognizer(void) ;F_ BSR_StopRecognizer 【功能说明】停止辨识。 【参 数】无。 【返回 值】 无。 【备 注】该函数是用于停止识别,当调用此函数时,FIQ_TMA 中断将关闭。中断部分: 【API 格式】 ASM :_BSR_InitRecognizer 【功能说明】 在中断中调用,并通过中断将语音信号送DAC 通道播放。 该函数在中断 FIQ_TMA 中调用 。 当主程序调用 BSR_InitRecognizer 时,辨识器便打开 8
17、K 采样率的 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 其中实时监控是用来观察辨识是否正常工作,如果辨识正常则会产生
18、一 16ms 连续稳定方波,否则如果 CPU 超载则会产生不稳定波形,此时需要删除命令,或是优化程序否则会丢失语音数据产生辨识出现错误的信息。图4.3 识别过程函数功能识别识别过程:触发识别训练 请输入第一条命令请输入第二条命令请再说一遍 (以上提示音每说完一遍出现此命令) 没有听到任何声音 (当没有检测到声音时出现此命令) 两次输入名称不相同 (当两次输入的名称不同时出现此命令) 两次输入命令不相同 (当两次输入的命令有差异时出现此命令) 准备就绪,请开始辨识 (以上三条语句全部训练成功时,进入.)图4.3 识别功能实现流程图4.1.2键盘扫描中断KEY2+KEY3图4.4 键盘选择说明语音
19、播报及闹铃程序段:/文件名称:bobao.c/功能描述:日期和时间的语音播报#include SPCE061A.hs480.h#define C_T00 0#define C_T01 1#define C_T02 2#define C_T03 3#define C_T04 4#define C_T05 5#define C_T06 6#define C_T07 7#define C_T08 8#define C_T09 9#define C_T10 10#define C_DIAN 11#define C_MIN 12#define C_YEAR 13#define C_MONTH 14#de
20、fine C_DAY 15#define C_BELL 16extern unsigned int year;extern unsigned int gmonth;extern unsigned int gday;extern unsigned int hour;extern unsigned int min;/语法格式:PlayRespond(unsigned int Result)/实现功能:对对传入的实参序号的语音资源进行播报void PlayRespond(unsigned int Result) SACM_S480_Initial(1); *P_INT_Ctrl_New = *P_I
21、NT_Ctrl_New | 0x0004; /使初始化后不影响2KZ中断 SACM_S480_Play(Result,3,3); while(SACM_S480_Status()&0x0001) != 0) SACM_S480_ServiceLoop(); *P_Watchdog_Clear=0x0001; SACM_S480_Stop();PlaySpeakYear(int YearTemp)播报年void PlaySpeakYear(int YearTemp) PlayRespond(YearTemp/1000); PlayRespond(YearTemp%1000)/100); Play
22、Respond(YearTemp%100)/10); PlayRespond(YearTemp%10); PlayRespond(C_YEAR);PlaySpeakMonth(int MonthTemp)播报月void PlaySpeakMonth(int MonthTemp) if(MonthTemp 1) PlayRespond(DayTemp/10+C_T00); /十位1报 0) /报十,十位为1不报1 if(DayTemp%10)!= 0) PlayRespond(DayTemp%10+C_T00); PlayRespond(C_DAY);PlaySpeakHour(int DayTemp)播报时void PlaySpeakHour(int DayTemp) if(DayTemp10) PlayRespond(DayTemp); else if(DayTemp=10) else
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1