本设计实现了基于anPH1A开发板的语音识别SOC设计,这里提供了相关的硬件工程及软件工程源码文件,可以在自己的FPGA上进行移植及开发。
团队成员简介
吕宇轩:队长,东南大学集成电路学院2022级研究生
刘 睿:队员,东南大学集成电路学院2022级研究生
邵 毅:队员,东南大学集成电路学院2023级研究生
案例环境说明
软件:
TD 5.6.2
Keil MDK-Arm 5.38.0
硬件:
an_PH1A Board
FL 1010 FMC 模块
MP34DT01 PDM 麦克风模块
系统整体效果
系统架构
总体架构
本设计旨在开发一个灵活可配置的语音识别SOC系统,该系统采用软硬件协同的设计方法,在FPGA中搭载了Cortex-M3处理器,驱动挂载在APB总线上的PDM2PCM模块采集PDM麦克风信号,将之转换为PCM信号存入RAM中。随后Cortex-M3处理器提取RAM中的PCM数据并进行处理,完成语音识别。
硬件架构
该系统搭载了Cortex-M3软核,采用了AHB-APB总线架构。高速设备挂载在AHB总线上,外部设备挂载在APB上。PDM2PCM模块负责采集并处理外部麦克风信号,UART负责进行人机交互。
软件架构
训练阶段中,PCM数字信号经由MFCC特征提取后作为模板存入模板库。识别阶段将提取的特征采用DTW算法与模板特征进行比对,输出识别结果。
使用步骤:
1. 硬件连线
该设计的adc文件如下:
set_pin_assignment { CLK } { LOCATION = N18; }
set_pin_assignment { RESETn } { LOCATION = K4; }
set_pin_assignment { RXD } { LOCATION = M16; }
set_pin_assignment { TCK } { LOCATION = F15; }
set_pin_assignment { TMS } { LOCATION = A13; }
set_pin_assignment { TXD } { LOCATION = R22; }
set_pin_assignment { VCC } { LOCATION = B20; }
set_pin_assignment { GND } { LOCATION = D21; }
set_pin_assignment { SEL_MIC } { LOCATION = B17; }
set_pin_assignment { CLK_MIC } { LOCATION = C19; }
set_pin_assignment { PDM_DATA } { LOCATION = G15; }
根据adc文件将PDM麦克风模块与FMC子板进行连接,并通过Jlink/ST-Link以SWD的连接方式与FMC子板进行连接。
连线完成后,将TD工程中的Bit流文件下载至an_PH1A开发板
2. 软件配置及下载
使用提供的Keil MDK-Arm工程,进行相应的配置
如图所示,修改相应的指令存储与缓存的地址映射配置
连线正确情况下,可在Debug中可以检测到相应的内核。
进行软件程序下载,在Keil中编译完成后,选择“Download”,进行程序下载。
( 注意:若下载不成功,则需要根据指令和数据存储器的地址分配情况,编写Flash算法 )
3. 功能展示
程序复位
系统采用中文和简单英文进行人机交互,复位后可显示使用说明。
模板加载
首先输入AA指令,以十六进制进行发送,进行默认模板加载
默认模板识别
模板加载后,发送CC指令进入语音识别功能。再发送C1指令进行语音识别
识别完成后,输出识别结果序号+识别内容。
模板录入
发送BB指令进入模板录入功能,可在线录入4个模板。
之后依次输入B1-B4进行4个模板的在线录入,需录入4个模板,才可进行语音识别。
如图,表示一个模板的录入完成。
在线模板识别
在线录入语音完成后,发送CC指令进入语音识别功能,发送C1指令进行语音识别
1. 识别时若未录入语音,系统提示 “未检测到有效语音”;
2. 若识别语音与模板不匹配,系统提示“没有匹配的模板”。