ASR插座研发进度及功能概述

一段时间没有更博客了,目前智能插座(LD3320A+NRF24L01版本)主控板和插座端的调试已经完成,主控板有几根飞线,修改后的主控板PCB已安排生产,今明两天可以到货。

测试结果:一对一/一对二/一对四 功能正常,

语音识别距离:最远可达5米,超过2米后识别命令词时要求的分贝较高,必须大声说话才能识别;

语音识别准确率:经过不断的调整,增加垃圾词识别机制,目前的准确率较高,可进一步优化,该条指标不太好量化,因为准确率要根据个人普通话的标准程度,外界环境噪音等一系列因素而确定,目前的状态能满足一般家用需求;

中控到插座的无线传输距离:无遮挡情况下可控制的距离较远,可达10米以上;有墙等建筑物遮挡的情况下,距离会有所缩短,有遮挡的情况下可实现6米左右的遥控;比普通路由器的传输距离稍微近一点;针对传输距离,目前正在研发LD3320A+SX127X方案,该方案虽然成本高,但是,却是能满足许多在没有WIFI网络覆盖下的应用需求;


使用说明:

一级命令:

小虎贝贝: 中控识别到该命令之后,状态灯开始每500ms闪烁一次;同时,中控识别到该命令后的30秒之内必须有系统能识别的关键词输入(一级命令词+二级命令词),否则,系统退出响应命令状态。


二级命令:

全部打开/全部关闭:中控识别到命令后,状态灯开始每200ms闪烁一次,会向所有插座发送打开/关闭命令,若插座开/关成功,中控状态灯会持续亮灯2秒;

打开第一路/打开第二路/打开第三路/打开第四路 关闭第一路/关闭第二路/关闭第三路/关闭第四路:中控识别到命令后,状态灯开始每200ms闪烁一次,会向第X号插座发送打开/关闭命令,若插座开关成功,中控状态灯会持续亮灯2秒;

查询第一路/查询第二路/查询第三路/查询第四路:中控识别到命令后,状态灯开始每200ms闪烁一次,同时,指示灯亮灯2秒后熄灭,若查询到X路是打开状态,指示灯会在熄灭之后继续亮1秒,提示当前查询到的开关状态为打开状态,若查询到X路是关闭状态,则指示灯一直处于熄灭状态;

五分钟后开/五分钟后关/一小时后开/一小时后关:中控识别到命令后,状态灯开始每200ms闪烁一次,同时,系统推出识别状态后,状态灯每隔3秒闪烁一次,提示当前还有延时任务未执行完毕。


按键:

短按:系统进入一级命令识别状态。


LED指示灯:

红色-系统上电指示

绿色-语音识别状态灯

黄色-查询指示灯





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AC695X是一款高性能的音频处理SOC芯片,其提供了丰富的接口和SDK支持,可以方便地实现ASR离线识别功能。下面是具体实现步骤: 1. 准备模型:需要下载ASR模型文件,并将其放置在AC695X芯片的存储介质中,如SD卡、Flash等。 2. 配置DMA:使用AC695X SDK提供的DMA API,配置DMA通道以实现音频数据的传输。需要设置DMA通道的数据源、目的地址、数据长度等参数。 3. 配置I2S:使用AC695X SDK提供的I2S API,配置I2S接口以实现音频数据的采集。需要设置I2S接口的采样率、采样精度、数据格式等参数。 4. 配置ASR:使用AC695X SDK提供的ASR API,配置ASR模型文件路径、关键词、命令等参数。需要注意,ASR模型文件路径需要与实际存储位置相匹配。 5. 编写识别代码:使用AC695X SDK提供的ASR API,编写识别代码。具体实现可以参考以下示例代码: ```c #include "hal_asr.h" #include "hal_dma.h" #include "hal_i2s.h" #define ASR_MODEL_PATH "/sd/asr_model.bin" #define ASR_KEYWORD "你好小松" #define ASR_CMD "CMD1" #define I2S_SAMPLERATE 16000 #define I2S_SAMPLEWIDTH 16 #define I2S_CHANNELNUM 1 #define I2S_DATAFORMAT HAL_I2S_DATAFORMAT_I2S #define DMA_CHANNEL 0 #define DMA_BUF_SIZE 4096 static uint8_t dma_buf[DMA_BUF_SIZE]; void asr_init(void) { // 配置ASR模型文件路径、关键词、命令等参数 hal_asr_config_t asr_cfg = { .model_path = ASR_MODEL_PATH, .keywords = ASR_KEYWORD, .cmd = ASR_CMD, }; hal_asr_init(&asr_cfg); } void i2s_init(void) { // 配置I2S接口采样率、采样精度、数据格式等参数 hal_i2s_config_t i2s_cfg = { .sample_rate = I2S_SAMPLERATE, .sample_width = I2S_SAMPLEWIDTH, .channel_num = I2S_CHANNELNUM, .data_format = I2S_DATAFORMAT, }; hal_i2s_init(&i2s_cfg); } void dma_init(void) { // 配置DMA通道数据源、目的地址、数据长度等参数 hal_dma_config_t dma_cfg = { .src = (uint32_t)hal_i2s_get_rx_buf(), .dst = (uint32_t)dma_buf, .size = DMA_BUF_SIZE, .src_burst_size = HAL_DMA_BURST_SIZE_1, .dst_burst_size = HAL_DMA_BURST_SIZE_1, .src_width = HAL_DMA_WIDTH_HALFWORD, .dst_width = HAL_DMA_WIDTH_BYTE, .src_inc = HAL_DMA_ADDR_INC, .dst_inc = HAL_DMA_ADDR_FIXED, .callback = NULL, }; hal_dma_init(DMA_CHANNEL, &dma_cfg); } int main(void) { asr_init(); i2s_init(); dma_init(); while(1) { // 启动I2S采集 hal_i2s_start_rx(); // 启动DMA传输 hal_dma_start(DMA_CHANNEL); // 等待DMA传输完成 while(!hal_dma_is_done(DMA_CHANNEL)); // 停止I2S采集 hal_i2s_stop_rx(); // ASR识别 hal_asr_feed(dma_buf, DMA_BUF_SIZE); hal_asr_result_t result; if(hal_asr_get_result(&result) == HAL_OK) { printf("ASR result: %s\n", result.asr_result); } } return 0; } ``` 在以上代码中,我们使用hal_asr_init函数配置ASR模型文件路径、关键词、命令等参数,然后使用hal_i2s_init函数配置I2S接口采样率、采样精度、数据格式等参数,最后使用hal_dma_init函数配置DMA通道数据源、目的地址、数据长度等参数。在主函数中,我们使用hal_i2s_start_rx函数启动I2S采集,使用hal_dma_start函数启动DMA传输,等待DMA传输完成后使用hal_asr_feed函数将数据喂到ASR模型中,最后使用hal_asr_get_result函数获取ASR识别结果并输出。 总之,使用AC695X SDK实现ASR离线识别功能的关键是要掌握ASR模型文件的使用、DMA和I2S接口的配置以及ASR API的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iowin888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值