离线语音风扇设计应用案例_.智能风扇用例建模(以“语音控制”场景为例)-程序员宅基地

技术标签: 人工智能  语音识别  

1 概述

随着人们生活水平的提高,对产品的功能要求也越来越高,追求舒适的体验感,特别是对操控性的要求越来越高。目前风扇产品的控制方式有以下几类:

  • 按键控制:传统控制方式,每次要走到风扇边才行,操作麻烦;
  • 遥控控制:采用红外遥控或者蓝牙遥控,方便远距离控制,但遥控器容易丢,放置也麻烦。且遥控器上按键较少,当风扇功能多的时候无法用单次按键控制全部的功能,组合按键不符合人们使用习惯;
  • 手机APP控制:每次控制需要打开手机APP,需要联网,同时风扇需配网,操作繁琐;
  • 智能音箱控制:通过如天猫精灵等智能音箱直接控制,相对方便,但音箱需联网状态下才可使用,识别时有隐私安全问题,网络延时大时控制的实时性不好。

为了解决以上痛点,可以采用纯离线语音识别进行控制,在成本增加不大的情况下,为产品带来更多的亮点和竞争力。启英泰伦针对该产品领域,已开发了整套离线语音风扇方案,下面对该方案进行介绍。


2 方案优势

启英泰伦离线语音风扇相对传统风扇方案,可让用户通过语音控制风扇设备,替换传统遥控器或按钮控制的方式,该方案有以下优势:

  • 可以直接使用语音控制风扇,且无需联网,自然方便,识别率可达95%以上;
  • 语音控制响应快,一般在0.2~0.8s内完成;
  • 可远场识别,安静情况下可达10米;
  • 方案功耗低,工作功耗仅为0.2W左右;
  • 可靠性好,芯片方案已通过双85测试,满足格力、美的等家电巨头要求;
  • 整套产品技术已成熟,具有完整的软件、硬件、结构设计方案,节省开发周期,降低开发难度;
  • 配合我司语音AI平台开发,可灵活定制唤醒词和命令词,不需要再专门收集语料训练。


3 应用描述

风扇产品按照使用电源类型可分为交流电风扇、直流电风扇和交直流电风扇三类,其类型可以分为台扇、吊扇、落地扇、无叶风扇等。启英泰伦离线语音风扇方案适用于各类风扇,其中尤其在落地扇上面的应用较多。

语音风扇产品的使用场景为普通家居环境,在安静和中低噪音下可以达到良好的识别率。其中安静环境的环境底噪在35dB ~ 45dB之间,属于中低噪音环境;开启风扇后环境噪音可达45dB ~ 65dB之间。该噪音环境下可以直接选用我司单麦克风语音模块,如CI-B0XGS01S或CI-B0XGS01S-H模块,以达到比较好的性价比。

特别注意,不同的风扇运行过程中,因为扇叶大小和叶片数量,风量大小差异,运行产生的风噪大小也有不小的差异,为了达到最好的语音识别效果,在设计风扇整机结构时,因注意控制噪音小于65dB。


4 产品设计流程

一个基于我司芯片的标准语音产品设计流程如下图所示:

该流程主要针对我司新用户开发产品使用,包含了前期购买样品Demo进行验证,硬件选型,语音对话逻辑、软硬件方案和结构设计,设计完成后的测试,以及生产测试准备和后续批量采购等步骤。如果是已经熟悉我司方案的老用户,可以直接从中间步骤开始,不用再重复进行Demo测试等工作。

下面针对新用户的开发,对上述流程中的各个步骤逐一描述。

4.1 DEMO测试

针对新用户,可以先从我司授权的经销商或直接从我司官网 ☞样品购买 处购买对应的模块或开发板套件,进行识别效果测试,相关的软硬件技术文档可以从本文档中心处获取。用户测试满意后,可以进行硬件选型。

4.2 选型指南

用户硬件选型可以直接参考 ☞硬件选型 ,如果用户想快速产品化,推荐直接使用我司已设计好的标准模块;如果现有标准模块无法满足产品的结构需求,也可以选用合适的芯片进行硬件板的设计。

4.3 方案设计

选择好合适的芯片或模块后,可根据产品的功能进行下述设计:

如用户为首次进行语音方案开发,建议到 ☞启英泰伦语音AI平台 上获取基于相关芯片的语音产品方案设计Checklist文档,进行逐一检查以确保设计效果。如有技术支持需求请联系我司技术支持人员。

4.4 测试验收

产品方案设计完成形成样品后,建议对该样品进行相关的识别测试,相关测试方法和标准可参考 ☞识别效果测试。同时,还建议根据产品质量的要求进行各类硬件测试,如双85测试、静电测试等。为了保证最终的识别效果,还建议进行硬件底噪的测试及产品装机后的整机功能测试。

4.5 生产测试

样机测试完成后,会转入后续产线批量生产阶段。我司为产品的批量生产做了完善的解决方案,用户可以参考 ☞生产测试 获取更多信息。用户如需要生产测试的相关技术支持,请联系我司技术人员。

4.6 下单采购

用户如果要采购我司产品样品,请点击 ☞样品购买 ,也可以点击 ☞样品和批量采购 获取更多信息。


5 风扇设计方案介绍

5.1 主控方案

5.1.1 方案特点

我司的CI110X芯片内置多个IO,可直接取代传统电控风扇中的单片机控制方案,实现单芯片完成语音控制和主控控制,整体成本较低,但需要做语音和主控的开发,前期开发周期长。

为了方便用户使用,我司已提前做了相应的开发,可以提供完整的语音风扇主控方案。

5.1.2 方案框图

整个方案如上图所示,CI110X芯片作为主控,可以通过麦克风采集外部语音进行识别,通过功放驱动喇叭播音。如为省成本,还可以将功放和喇叭换为蜂鸣器。CI110X芯片还可以接受外部按键及红外信号,兼容传统控制方式。

CI110X芯片可支持数码管显示,以及控制外部的驱动电路,实现电机的控制,可以很好的用一个单芯片实现风扇的全部控制功能。

5.1.3 硬件设计参考

​风扇电控板的一个硬件参考线路图及IO使用情况见下图,用户可以使用CI110X芯片按照相同的IO使用方式设计硬件电路,可以方便的搭建整套风扇方案。

5.1.4 主控方案SDK包说明

我司为用户基于上述硬件设计,提供了完整的SDK包,用户可以到 ☞启英泰伦语音AI平台 上获取相关SDK开发包。

本SDK包有以下功能点:

  • 控制方式:支持蓝牙、红外、按键、语音;
  • 风扇模式:支持正常风、自然风、睡眠风、智能风;
  • 摇头方式:支持左右摇头、上下摇头、3D摇头;
  • 定时功能:支持定时关机功能,可按整数定时1 ~ 15小时。

本SDK包中使用到了硬件timer,使用方式如下:

  1. 硬件TIMER0:转速电机控制(不归零码NRZ编码,使用一个IO脚);
  2. 硬件TIMER1:红外接收控制;
  3. 硬件TIMER2:蓝牙接收控制(注意,蓝牙接收的数据和红外接收模块基本相同);
  4. 硬件TIMER3:蜂鸣器控制和摇头电机控制。

为了方便代码的移植,每个外设驱动和风扇应用代码都是单独的文件夹,目录说明如下:

目录地址 目录说明 功能描述
..\components\ir..\components\ir_remote_driver\ 红外驱动目录(有些蓝牙也是单线通讯方式,与红外的驱动基本一致) 红外接收功能,接收后的数据会队列通知到deal_userdef_msg,红外的长度可以根据宏定义配置。
#宏定义 #define IR_MAX_DATA_COUNT 120最大红外个数
..\components\motor_driver\ 电机驱动目录 当前支持5104的不归零码协议,后续如有其它驱动,CI可以支持
..\components\ci_key\ 使用了2个Touch IC芯片(如品腾PT8041),控制7个按键 触摸不同的按键,对应不同的adc数值,故使用两个ADIO 做按键驱动,根据客户的实际产品,请自行调整
..\components\digital_tube\ 数码管驱动目录 IO 与LED 进行复用。目前支持的是两个数码管+8个LED
..\components\temperature_sensor\ 温度传感器驱动目录 使用AD+热敏电阻实现,产品可以根据温度进行智能调节风量
..\components\buzzer\ 蜂鸣器驱动目录 采用定时器默认4Khz进行声音提示,可以更改 #define BUZZER_HZ 进行配置,单位HZ
..\sample\internal\sample_1102\src\user_msg_deal.c 风扇应用层代码 根据红外,按键,语音识别的消息进行电机的应用控制

针对SDK中一些重要的变量和函数进行说明:

风扇状态变量:

typedef struct
{
    unsigned short user_code : 4 ;//用户码固定位 b'1010*
    unsigned short positive : 2 ;//正转b'00 反转b'11*
    unsigned short sync_motor: 2 ;//同步电机1 停止b'00 同步电机停止b'10*
    unsigned short speed_bit: 8 ;//电机工作范围25~255 0表示电机停止*
    unsigned char mode; //0:正常风 1:自然风 2:睡眠风 3:智能风*
    short time; //0~15H*
    unsigned char led; //1开,0关*
    unsigned char head; //0关闭 1:左右 2:上下 3:3D*
    unsigned char gear; //0关闭 1~24*
}motor_status_struct_data;

风扇初始化函数

路径: ..\sample\internal\sample_1102\src\user_msg_deal.c

/*\* @breif 风扇初始化函数**/
void fan_init(void)
{
//风扇状态初始化
  motor_status.user_code = 0xa;
  motor_status.sync_motor = 0x0;
  motor_status.speed_bit = 0x0;
  motor_status.positive = 0x00;
  motor_status.mode = 0;
  motor_status.head = 0;
  motor_status.led = 1;
  motor_status.gear = 0;
  motor_status.time = 0;
  /*风扇软件初始化*/
  extern void  user_fan_soft_init(void);
  user_fan_soft_init();

  //电机初始化
  agreement_5104_app_init();
  //红外初始化
  extern void ir_test_recive(void);
  ir_test_recive();
  //蓝牙初始化
  extern void bt_test_recive(void);
  bt_test_recive();
  //按键初始化
  extern void ci_key_init(void);
  ci_key_init();
  //数码管初始化
  extern int digital_tube_init(void);
  digital_tube_init();
  //蜂鸣器初始化
  buzzer_init();

  //同步电机2初始化
  sync_motor2_hw_init();

  //温度传感器初始化
  temp_sensor_init();
}

风扇应用任务处理

语音入口和标准SDK一致无改动,蓝牙、语音、按键、红外通过队列sys_msg_queue发送消息到UserTaskManageProcess任务。相关控制处理入口入下图所示例:

uint32_t deal_userdef_msg(sys_msg_t *msg)
{
    uint32_t ret = 1;
    switch(msg->msg_type)
    {
    /* 按键消息 */
        case SYS_MSG_TYPE_KEY:
        {
            sys_msg_key_data_t *key_rev_data;
            key_rev_data = &msg->msg_data.key_data;
            userapp_deal_key_msg(key_rev_data);
            break;
        }
        /* 红外消息 */
        case SYS_MSG_TYPE_IR:
        {
            sys_msg_ir_data_t *ir_rev_data;
            ir_rev_data = &msg->msg_data.ir_data;
            userapp_deal_ir_msg(ir_rev_data);
            break;
        }
        /* 蓝牙消息*/
        case SYS_MSG_TYPE_BT:
        {
            sys_msg_bt_data_t *bt_rev_data;
            bt_rev_data = &msg->msg_data.bt_data;
            userapp_deal_bt_msg(bt_rev_data);
            break;
        }
        #if MSG_COM_USE_UART_EN
        /* CI串口协议消息 */
        case SYS_MSG_TYPE_COM:
        {
            sys_msg_com_data_t *com_rev_data;
            com_rev_data = &msg->msg_data.com_data;
            userapp_deal_com_msg(com_rev_data);
            break;
        }
        #endif
        /* CI IIC 协议消息 */
        #if MSG_USE_I2C_EN
        case SYS_MSG_TYPE_I2C:
        {
            sys_msg_i2c_data_t *i2c_rev_data;
            i2c_rev_data = &msg->msg_data.i2c_data;
            userapp_deal_i2c_msg(i2c_rev_data);
            break;
        }
        #endif
        default:
        break;
    }
    return ret;
}

5.2 配合主控板的串口通讯方案

5.2.1 方案特点

如用户不愿意替换原先使用的电控板,也可以用我司的芯片设计语音控制板,和原电控板通过串口进行通讯,也可以实现语音风扇的产品设计。该方式开发相对简单,可以快速对接完成产品,但成本略高,适用于需快速出产品的的方案或者第一次接触语音识别的方案。

该方案的设计框图如下,语音模块与电控模块需要4根线的串口连接,语音模块进行语音识别及根据风扇的状态进行信息播放,控制由电控模块完成。

5.2.2 硬件设计参考

用户可以使用我司芯片设计需要要求的语音模块,但为快速开发,推荐直接使用我司的以下标准模块:

  • CI-B02GS03T:适合空间比较高,纵深长的结构,串口接口电平为3.3V;
  • CI-B02GS01S:适合空间比较矮的结构,串口接口电平为3.3V;
  • CI-B02GS01J:适合有空间放置固定语音模块的结构,原来的风扇硬件改动较小,串口接口电平为5V。

用户直接使用我司标准语音模块时,有以下注意事项:

  • 将语音模块板的串口跟电控串口对接,注意电控的供电需要大于1A;
  • 注意串口的电平要匹配,CI-B02GS01J支持5V电平,其他的模块支持3.3V,如果电控板使用5V电平,CI-B02GS01J可以对接直接串口,其它模块需要增加电平转换电路,如下图所示:

5.2.3 串口通讯方式

语音模块与电控模块通过串口进行信息交互,主要有两种方式,一种为语音模块主动播放,同时将信息发电控模块;另一种为语音模块被动播放,其分别描述如下:

语音模块主动播放模式

主动播放方式主要执行以下动作:

  1. 识别到词条,主动播放反馈声音;
  2. 将此条信息串口告知电控模块;
  3. 电控模块执行动作。

该方式的优点在于控制方式简单,由语音模块单线输出信息给电控模块。但缺点在于无法根据风扇的情况及按键情况进行语音反馈。

语音模块被动播放模式

被动播放方式主要执行以下动作:

  1. 语音模块识别到词条;
  2. 将词条信息串口告知电控模块;
  3. 电控模块执行相关动作;
  4. 告知语音模块需要播放的内容;
  5. 语音模块根据电控模块反馈进行播放。

该方式的优点在于语音模块根据电控模块的状态进行播放对应内容,可以进行最合适的反馈,体验感好;同时如果电控模块通过按键或者遥控进行控制,语音模块也可以进行状态播放。缺点在于会多一次串口通信的过程。

5.2.4 SDK包说明和模块串口通讯协议

我司为用户提供了串口通讯方案完整的SDK包,用户可以到 ☞启英泰伦语音AI平台 上获取相关SDK开发包。

模块的串口通讯建议使用我司标准协议,具体格式请参考 ☞串口协议 。

以下是语音模块发给电控模块的一个命令词及协议参考:

命令词 帧头 长度 类型 命令 序号 语音ID 保留 分数 累加和 帧尾
小艾小艾 A5 FC 07 00 A0 91 XX 00 00 00 00 00 00 XX XXXX FB
开风扇 A5 FC 07 00 A0 91 XX 42 19 74 02 00 00 XX XXXX FB
打开风扇 A5 FC 07 00 A0 91 XX 41 19 74 02 00 00 XX XXXX FB
关风扇 A5 FC 07 00 A0 91 XX 82 19 74 02 00 00 XX XXXX FB
关闭风扇 A5 FC 07 00 A0 91 XX 81 19 74 02 00 00 XX XXXX FB
开摇头 A5 FC 07 00 A0 91 XX 86 22 74 02 00 00 XX XXXX FB
打开摇头 A5 FC 07 00 A0 91 XX 85 22 74 02 00 00 XX XXXX FB
风扇摇头 A5 FC 07 00 A0 91 XX 81 22 74 02 00 00 XX XXXX FB
关摇头 A5 FC 07 00 A0 91 XX C5 22 74 02 00 00 XX XXXX FB
关闭摇头 A5 FC 07 00 A0 91 XX C4 22 74 02 00 00 XX XXXX FB
停止摇头 A5 FC 07 00 A0 91 XX C1 22 74 02 00 00 XX XXXX FB
风大点 A5 FC 07 00 A0 91 XX E1 38 BC 02 00 00 XX XXXX FB
风大一点 A5 FC 07 00 A0 91 XX 72 1A 98 01 00 00 XX XXXX FB
风大一些 A5 FC 07 00 A0 91 XX 73 1A 98 01 00 00 XX XXXX FB
风再大点 A5 FC 07 00 A0 91 XX 74 1A 98 01 00 00 XX XXXX FB
风小一点 A5 FC 07 00 A0 91 XX 75 1A 98 01 00 00 XX XXXX FB
风小一些 A5 FC 07 00 A0 91 XX 76 1A 98 01 00 00 XX XXXX FB
风小点 A5 FC 07 00 A0 91 XX 5F 39 BC 02 00 00 XX XXXX FB
风再小点 A5 FC 07 00 A0 91 XX 77 1A 98 01 00 00 XX XXXX FB
最大风 A5 FC 07 00 A0 91 XX C7 39 BC 02 00 00 XX XXXX FB
最小风 A5 FC 07 00 A0 91 XX 48 3A BC 02 00 00 XX XXXX FB
定时关机 A5 FC 07 00 A0 91 XX 01 0F 95 01 00 00 XX XXXX FB
关闭定时 A5 FC 07 00 A0 91 XX 44 0E 95 01 00 00 XX XXXX FB
睡眠风 A5 FC 07 00 A0 91 XX 82 27 74 02 00 00 XX XXXX FB
自然风 A5 FC 07 00 A0 91 XX 03 28 74 02 00 00 XX XXXX FB
正常风 A5 FC 07 00 A0 91 XX C1 CB 94 01 00 00 XX XXXX FB
声音大点 A5 FC 07 00 A0 91 XX 47 19 94 01 00 00 XX XXXX FB
声音小点 A5 FC 07 00 A0 91 XX 87 19 94 01 00 00 XX XXXX FB
定时一小时 A5 FC 07 00 A0 91 XX 02 37 95 01 00 00 XX XXXX FB
定时两小时 A5 FC 07 00 A0 91 XX 82 37 95 01 00 00 XX XXXX FB
定时二小时 A5 FC 07 00 A0 91 XX 83 37 95 01 00 00 XX XXXX FB
定时三小时 A5 FC 07 00 A0 91 XX 01 38 95 01 00 00 XX XXXX FB
定时四小时 A5 FC 07 00 A0 91 XX 81 38 95 01 00 00 XX XXXX FB
定时五小时 A5 FC 07 00 A0 91 XX 01 39 95 01 00 00 XX XXXX FB
定时六小时 A5 FC 07 00 A0 91 XX 81 39 95 01 00 00 XX XXXX FB
开一档 A5 FC 07 00 A0 91 XX 41 3F 94 01 00 00 XX XXXX FB
开二档 A5 FC 07 00 A0 91 XX C1 3E 94 01 00 00 XX XXXX FB
开三档 A5 FC 07 00 A0 91 XX 01 3F 94 01 00 00 XX XXXX FB
开四档 A5 FC 07 00 A0 91 XX 41 3F 94 01 00 00 XX XXXX FB
开五档 A5 FC 07 00 A0 91 XX 81 3F 94 01 00 00 XX XXXX FB
开六档 A5 FC 07 00 A0 91 XX C1 3F 94 01 00 00 XX XXXX FB
开七档 A5 FC 07 00 A0 91 XX 01 40 94 01 00 00 XX XXXX FB
开八档 A5 FC 07 00 A0 91 XX 41 40 94 01 00 00 XX XXXX FB
开九档 A5 FC 07 00 A0 91 XX 81 40 94 01 00 00 XX XXXX FB
退出唤醒 A5 FC 02 00 A3 9A XX 00 B2 XXXX FB

以下是一个电控模块发给语音模块的通讯协议参考:

对应播报音 帧头 长度 类型 命令 序号 控制 播放类型 播放序号 保留 累加和 帧尾
小艾小艾 A5 FC 07 00 A1 92 XX 80 92 01 00 00 00 0 XXXX FB
开风扇 A5 FC 07 00 A1 92 XX 80 92 02 00 00 00 0 XXXX FB
打开风扇 A5 FC 07 00 A1 92 XX 80 92 03 00 00 00 0 XXXX FB
关风扇 A5 FC 07 00 A1 92 XX 80 92 04 00 00 00 0 XXXX FB
关闭风扇 A5 FC 07 00 A1 92 XX 80 92 05 00 00 00 0 XXXX FB
开摇头 A5 FC 07 00 A1 92 XX 80 92 06 00 00 00 0 XXXX FB
打开摇头 A5 FC 07 00 A1 92 XX 80 92 07 00 00 00 0 XXXX FB
风扇摇头 A5 FC 07 00 A1 92 XX 80 92 08 00 00 00 0 XXXX FB
关摇头 A5 FC 07 00 A1 92 XX 80 92 09 00 00 00 0 XXXX FB
关闭摇头 A5 FC 07 00 A1 92 XX 80 92 0A 00 00 00 0 XXXX FB
停止摇头 A5 FC 07 00 A1 92 XX 80 92 0B 00 00 00 0 XXXX FB
风大点 A5 FC 07 00 A1 92 XX 80 92 0C 00 00 00 0 XXXX FB
风大一点 A5 FC 07 00 A1 92 XX 80 92 0D 00 00 00 0 XXXX FB
风大一些 A5 FC 07 00 A1 92 XX 80 92 0E 00 00 00 0 XXXX FB
风再大点 A5 FC 07 00 A1 92 XX 80 92 0F 00 00 00 0 XXXX FB
风小一点 A5 FC 07 00 A1 92 XX 80 92 10 00 00 00 0 XXXX FB
风小一些 A5 FC 07 00 A1 92 XX 80 92 11 00 00 00 0 XXXX FB
风小点 A5 FC 07 00 A1 92 XX 80 92 12 00 00 00 0 XXXX FB
风再小点 A5 FC 07 00 A1 92 XX 80 92 13 00 00 00 0 XXXX FB
最大风 A5 FC 07 00 A1 92 XX 80 92 14 00 00 00 0 XXXX FB
最小风 A5 FC 07 00 A1 92 XX 80 92 15 00 00 00 0 XXXX FB
定时关机 A5 FC 07 00 A1 92 XX 80 92 16 00 00 00 0 XXXX FB
关闭定时 A5 FC 07 00 A1 92 XX 80 92 17 00 00 00 0 XXXX FB
睡眠风 A5 FC 07 00 A1 92 XX 80 92 18 00 00 00 0 XXXX FB
自然风 A5 FC 07 00 A1 92 XX 80 92 19 00 00 00 0 XXXX FB
正常风 A5 FC 07 00 A1 92 XX 80 92 1A 00 00 00 0 XXXX FB
声音大点 A5 FC 07 00 A1 92 XX 80 92 1B 00 00 00 0 XXXX FB
声音小点 A5 FC 07 00 A1 92 XX 80 92 1C 00 00 00 0 XXXX FB
定时一小时 A5 FC 07 00 A1 92 XX 80 92 1D 00 00 00 0 XXXX FB
定时两小时 A5 FC 07 00 A1 92 XX 80 92 1E 00 00 00 0 XXXX FB
定时二小时 A5 FC 07 00 A1 92 XX 80 92 1F 00 00 00 0 XXXX FB
定时三小时 A5 FC 07 00 A1 92 XX 80 92 20 00 00 00 0 XXXX FB
定时四小时 A5 FC 07 00 A1 92 XX 80 92 21 00 00 00 0 XXXX FB
定时五小时 A5 FC 07 00 A1 92 XX 80 92 22 00 00 00 0 XXXX FB
定时六小时 A5 FC 07 00 A1 92 XX 80 92 23 00 00 00 0 XXXX FB
开一档 A5 FC 07 00 A1 92 XX 80 92 24 00 00 00 0 XXXX FB
开二档 A5 FC 07 00 A1 92 XX 80 92 25 00 00 00 0 XXXX FB
开三档 A5 FC 07 00 A1 92 XX 80 92 26 00 00 00 0 XXXX FB
开四档 A5 FC 07 00 A1 92 XX 80 92 27 00 00 00 0 XXXX FB
开五档 A5 FC 07 00 A1 92 XX 80 92 28 00 00 00 0 XXXX FB
开六档 A5 FC 07 00 A1 92 XX 80 92 29 00 00 00 0 XXXX FB
开七档 A5 FC 07 00 A1 92 XX 80 92 2A 00 00 00 0 XXXX FB
开八档 A5 FC 07 00 A1 92 XX 80 92 2B 00 00 00 0 XXXX FB
开九档 A5 FC 07 00 A1 92 XX 80 92 2C 00 00 00 0 XXXX FB

注意:

  1. ASR语言模型中文建议选择SE146,其他语种请使用对应语种的模型。风扇产品自带运行噪音,如果风扇本身噪音大于60db,建议打开降噪功能。
  2. 串口设置:
    • 波特率:9600
    • 停止位:1
    • 数据位:8
    • 奇偶校验:无
  3. 代码中通过判断 “命令+语音ID”获取是什么指令和功能。
  4. 发送的串口信息建议要检查完整性,可以用以下的checksum参考代码来实现。
#define VMUP_MSG_DATA_MAX_SIZE (20)//可根据实际数据大小调整

#pragma pack(1)
typedef struct
{
    uint16_t header;
    uint16_t data_length;
    uint8_t msg_type;
    uint8_t msg_cmd;
    uint8_t msg_seq;
    uint8_t msg_data[VMUP_MSG_DATA_MAX_SIZE];
    /*uint16_t chksum; send add auto*/
    /*uint8_t tail; send add auto*/
}sys_msg_com_data_t;
#pragma pack()

unsigned short Uart_Checksum(sys_msg_com_data_t * msg)
{
    unsigned char i;
    unsigned short t16_lenth;
    unsigned short t16_check = 0;
    uint8_t* rxbuf = uint8_t*&msg->msg_type

    t16_lenth = msg->data_length + 3;//cmd_type,cmd,sequence 加上data数据的长度 
    if(t16_lenth > VMUP_MSG_DATA_MAX_SIZE + 3)//data length error
    {
        return 0xffff;
    } 
    for(i=4;i<t16_lenth;i++)
    {
        t16_check +=  rxbuf[i];
    }
    return t16_check;
}

6 产品结构相关注意事项

6.1 麦克风结构设计

风扇产品在设计结构时,针对麦克风应当注意以下事项:

  • 麦克风布局尽量远离风扇的风面及电机;
  • 麦克风放在风扇的正面/顶部/底部/的位置避免遮挡,保证拾音最大范围;
  • 分贝仪测试最大风速下,麦克风处的稳态噪声需小于60dB;
  • 麦克风连线较长可选择带屏蔽的线;
  • 麦克风线扎捆远离电机或电控线。

下图以落地风扇为例,讲述麦克风结构开孔及位置的建议方式,固定麦克风的结构件也需要考虑麦克风线方便引出导线和避免干扰。

6.2 喇叭结构设计

风扇产品在设计结构时,针对喇叭应当注意以下事项:

  • 考虑到音质,喇叭功率不能太小,建议选用1W以上喇叭,带音腔的喇叭效果会更好一点,同时注意硬件板上的功放驱动能力要匹配喇叭型号;
  • 喇叭放置位置以美观及结构布局方便为主,但注意尽量避免和麦克风放在同一位置;
  • 不带音腔喇叭可以在结构上做一个音腔密封后能增大音量输出。

下图是一个喇叭规格及开孔的建议。

6.3 其它注意事项

  • 建议选择-32dB±3dB,信噪比大于70dB以上,性价比高的全向模拟麦克风;
  • 若风扇旋转震动比较大,选择较厚的麦克风胶套减缓震动,可减小对识别效果的影响;
  • 某些显控板在底盘上的落地风扇,或类似易接触水或积累灰尘的风扇,需要选择防水防尘的麦克风;
  • 特别注意禁止直接点热溶胶用于固定麦克风头;
  • 将麦克风完全插入固定孔内部,避免歪斜,拾音孔中心孔对准麦克风的中心;
  • 风扇内部接线多容易扯松,插头配插座带卡扣会更牢固;
  • 选择符合环保RoHS要求的RTV硅胶,推荐常用的硅胶有703/704/737等,或其它有机材料、单组分室温固化硅胶等;
  • 多数硅橡胶灌胶厚度小于3mm以内实温完全固化时间为8 ~ 12小时,灌胶厚度 > 3mm以上完全固化时间更长,可分层多次浇灌,确保完全固化稳定密封;
  • 生产工艺可把固定麦克风工序提前,另外特别注意麦克风接线在重力拉扯下,未完全固化前容易导致麦克风扯歪,也需注意将麦克风插线固定好。


7 相关参考资料列表

编号 参考资料描述 获取方式
1 标准离线SDK
CI110X_SDK_ASR_Offline
请到 ☞启英泰伦语音AI平台 上获取
2 风扇SDK Demo:
主控方案SDK
串口通讯方案SDK
请到 ☞启英泰伦语音AI平台 上获取
3 测试固件 到 ☞启英泰伦语音AI平台 上获取
4 我司芯片和模块的选型指南 请点击 ☞硬件选型指南 查看
5 我司芯片硬件设计方法参考 请点击 ☞硬件设计参考 查看
6 麦克风和喇叭器件选型 请点击 ☞外围器件兼容列表 查看
7 产品结构设计 请点击 ☞产品结构设计 查看
8 软件开发方法和标准SDK说明 请点击 ☞软件开发 查看各部分内容
9 产品识别性能测试方法 请点击 ☞识别效果测试 查看
10 生产测试的方法 请点击 ☞生产测试 查看

用户如遇到使用问题,请到启英泰伦语音AI平台上提交技术工单,或直接联系我司技术人员获取协助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CI0412/article/details/122730928

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法