目录
全国嵌入式芯片与系统设计比赛
题目:基于嵌入式的歌曲识别
开发板:沁恒CH32V307
github:q986035044/SongRecgnition: 全国嵌入式比赛开源文件 (github.com)
前言
歌曲识别实际上是语音识别的一种。语音识别技术起始于上世纪 50 年代, 经过几十年的发展和不断完善,中小词汇量非特定人语音识别系统识别精度己经 达到 98%以上。这些技术己经能够满足通常应用的要求。
在应用研究方面,从实际需求出发,如用于 KTV 的歌曲检索系统,用于歌 曲旋律识别的音乐认证系统等,不断扩宽歌曲研究和应用的领域。而且也可以拓 展到如今的智能家居和车载智能交互系统上,帮助人们快速识别、检索所需要的 歌曲。
一、主要技术算法
- 话音激活检测(VAD):其目的是检测当前语音信号中是否包含话音信号存在, 即对输入信号进行判断,将话音信号与各种背景噪声信号区分出来,分别对两种 信号采用不同的处理方法。
- DTW 算法:即分配两个 N×M 的矩阵,分别为积累距离矩阵 D 和帧匹配距 离矩阵 d,其中帧匹配距离矩阵 d(i,j)的值为测试模板的第 i 帧与参考模板的 第 j 帧间的距离。D(N,M)即为最佳匹配路径所对应的匹配距离。
- 梅尔频率倒谱:梅尔频率倒谱的频带划分是在梅尔刻度上等距划分的,它比 用于正常的对数倒频谱中的线性间隔的频带更能近似人类的听觉系统。这样的非 线性表示,可以在多个领域中使声音信号有更好的表示。
二、硬件部分
1.ES8388
使用CH32V307自带ES8388模块进行录入声音。
2.LCD
使用CH32V307自带LCD屏幕显示当前交互界面,可以显示识别成功的歌曲。
3.FLASH
使用FLASH存储每首歌曲的模板,进行歌曲识别时读取FLASH的模板进行比较。
4.按键
使用板载按键提供交互功能的实现,五向按键向下为模板训练,SW1按键为歌曲识别。
三、软件部分
-
VAD 语音激活检测:录入一段连续语音时,会进行 VAD 语音激活检测来 检测语音静音片段。当有效语音较短时,VAD 即可检测到静音片段,提取 出一段连续语音中的有效部分。当一段语音全为静音时,经 VAD 检测则 认为该段语音为无效语音。
void active_segment_detect( uint16_t *data , uint16_t d_len, vr_act_seg *act_seg, vr_dtg_para *dtg_para);
-
MFCC 参数计算: Mel 频率倒谱系数( Mel Frequency Cepstrum Coefficient,MFCC)的缩写。Mel 频率是基于人耳听觉特性提出来的,它与 Hz 频率成非线性对应关系。Mel 频率倒谱系数(MFCC)则是利用它们之间 的这种关系,计算得到的 Hz 频谱特征。经过 VAD 提取的有效语音进行 MFCC 参数计算,并存入 flash。
void calc_mfcc_chara_para(vr_act_seg *act_seg, vr_chara_para *chara_para, vr_dtg_para *dtg_para);
-
DTW 匹配计算:Dynamic Time Warping,动态时间归整。语音识别中,最 为简单有效的方法是采用 DTW 算法,该算法基于动态规划(DP)的思想, 解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典 的一种算法。在歌曲识别过程中,每录入一段语音进行 MFCC 参数计算, 并遍历 flash 中的模板,进行 DTW 计算匹配,当匹配成功即在 LCD 屏幕 显示结果。
uint32_t calc_chara_para_match_dis(vr_chara_para *chara_para_src, vr_chara_para *chara_para_mdl);
四、实现过程
训练模板
播放歌曲进行模板训练,当录入歌曲有效部分时,串口打印输出成功信息,串口打印输出 xxxx practice success,song3_part_III 为第三首歌的第 三个模板信息。当所有模板训练完成,串口打印输出 practice end。
识别歌曲
此歌曲存在模板之内,当播放该歌曲时,即可匹配识别成功并且将歌名显示 在 lcd 屏幕上。
总结
主要是利用了连续进行孤立词的录入和识别的技巧,简易实现了歌曲识别。
最后感谢沁恒提供了CH32V307开发板作为比赛使用,陶工和其他工作人员都很耐心帮解决问题。