分类目录归档:嵌入式系统

C/C++ key-value string parsing with strsep

#include <stdio.h>
#include <string.h>

void parse_key_value(char* str) {
    while (char* value = strsep(&str, "&")) {
        char* key = strsep(&value, "=");
        if (key != NULL && value != NULL) {
            printf("key %s value %s\r\n", key, value);
        }
    }
}

int main() {
    char stra[] = "&asd23&sd=900&c=0&";
    printf("%s\r\n", stra);
    parse_key_value(stra);
    
    char strb[] = "asd=23";
    printf("%s\r\n", strb);
    parse_key_value(strb);
    
    return 0;
}
output:
&asd23&sd=900&c=0&
key sd value 900
key c value 0
asd=23
key asd value 23

Keil-MDK编译完成后自动烧写下载

大多数人使用Keil调试程序都是先点编译工程(Build),然后等编译成功后再点下载(Download)或者调试(Debug)。Keil本身可以选择编译完成后自动开启调试,但是如果不想开启调试而是直接下载固件并运行就不行了,Keil并未直接提供该选项,还是要去点一下下载(Download)。这样对于我们这些“效率控“来说简直难以忍受!

继续阅读

基于STM32的孤立词语音识别

这是我毕业设计的论文,当年花了几个月来做,最终算是做出来个基本的功能样机。本来最开始时想做一个图像识别进而实现体感操控,后来考虑到当年用的比较顺手的MCU中功能最强的就是STM32,处理速度和内存容量都难以实现图像识别。于是就换成语音识别,图像识别留作以后再来吧。

OK,废话不多说,上论文:

摘要:语音识别是机器通过识别和理解过程把人类的语音信号转变为相应文本或命令的技术,其根本目的是研究出一种具有听觉功能的机器。本设计研究孤立词语音识别系统及其在STM32嵌入式平台上的实现。识别流程是:预滤波、ADC、分帧、端点检测、预加重、加窗、特征提取、特征匹配。端点检测(VAD)采用短时幅度和短时过零率相结合。检测出有效语音后,根据人耳听觉感知特性,计算每帧语音的Mel频率倒谱系数(MFCC)。然后采用动态时间弯折(DTW)算法与特征模板相匹配,最终输出识别结果。先用Matlab对上述算法进行仿真,经多次试验得出算法中所需各系数的最优值。然后将算法移植到STM32嵌入式平台,移植过程中根据嵌入式平台存储空间相对较小、计算能力也相对较弱的实际情况,对算法进行优化。最终设计并制作出基于STM32的孤立词语音识别系统。

关键词:STM32  孤立词语音识别  VAD  MFCC  DTW
继续阅读