打印
[STM32F1]

基于STM32F1的孤立词语语音识别

[复制链接]
436|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jk0112|  楼主 | 2020-9-2 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
语音识别作为人工智能下很火爆的一门学科,是当下研究的一个重要领域。大多数的语音识别是基于市面上已有的语音识别模块,成本较高,本系统是孤立词语语音识别,考虑到成本以及可实现性,笔者选择了STM32F1系列MCU的最小系统,通过TFT彩屏实现人机交互,搭建音频采集模块,从而完成语音识别系统的硬件部分。软件设计采用A/D采样、预加重、加窗、端点检测、MFCC 特征提取、特征匹配几个步骤,技术相对成熟,识别率较高。 一段短时语音信号长度大约为2s 以内,我们以8khz 的 ADC 采用频率去采样得到的最大点数为16000,因为STM32F1为12位 ADC,所以每个点的数据相当于两个字节,总的算来需要16000*2=32000字节,对于拥有64KB RAM 的STM32F103ZET6来说在内存上是可以实现的。ST 官方固件库提供的 16 位、1024 点 FFT 用时 2.138 ms,20ms 为一帧,算下来总共有100帧,也就是100次1024点的 FFT 计算,总用时就是213.8ms,加上其他地方的指令、算法运算时间,识别一个指令应该在0.5s 以内。至于每帧20ms,按照8khz 的采样频率只能得到160个点,采用1024点 FFT 则需要在尾部补864个零,因为由公式(delta f)=fs/N 补零可以提高频率分辨率。且考虑到 ADC 采样次数比较多,所以采集到的数据采用DMA 的方式传输到设定的数组,这样可以节省指令执行时间。从工程的初始化开始,先是设定单片机运行频率(72MHZ),延时函数初始化(SysTick),ADC、DMA、按键函数部分以及需要用到的引脚的初始化,main()中的主要为一个按键函数来实现何时进行模板训练,何时进行语音识别。工程的主要部分为端点检测、MFCC 语音特征提取、以及特征提算DTW 的代码实现。想着重提出来说的是 DTW 算法,算法基于动态规划(DP)的思想,用于于长度不等的序列如何匹配。直接的理解,是 warping 一个序列后可以与另一个序列重合。这个时候两个序列中所有对应点的距离之和是最小为零。所以从直观上理解,warping 的正确性一般指每一个相对应的特征点的对齐,我想这也是动态时间规整算法的核心。这个解释应该很宏观,理解了物理意义,这个算法也变的简单起来。

基于STM32F1的孤立词语语音识别_胡凡.pdf

1.42 MB

使用特权

评论回复
沙发
可爱的烧饼| | 2020-9-3 09:21 | 只看该作者
stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

248

主题

544

帖子

2

粉丝