imx6ul蓝牙语音识别项目之6:语音格式说明以及整合与实际效果演示

前面我们准备好了所有的软件硬件,现在是时候开始正在的业务逻辑功能的实现了。 语音数据的格式 语音遥控器走的是BLE, 对于Voice Over BLE有多种方案,不同的厂家和方案商都不同的实现。下面我们使用TI的来说明,其他的也是类似的。 这里面主要是说明了各种格式,以及传递协议。 我们需要接受和decoder语音,那么就需要搞明白这些东西。 具体而言,语音的Profile如下: 交互过程如下: 注意第一包语音数据有头部: 语音数据从Gatt Notification中获取过来,我们先说一下这个压缩后的语音格式ADPCM。 具体可以参考: 简单而言,使用的是差分压缩: 下面是ADPCM的压缩与解压图: 解压后我们得到的是PCM audio data, 格式为PCM

Continue reading »

imx6ul蓝牙语音识别项目之5:BLE基础与imx6ul上的BLE外设的使用

前面我们准备好了下面这些软件: BlueZ 5.49及其运行需要的组建 百度语音识别及其运行需要的依赖库 Controller的驱动 并编译好了测试代码。 那么接下来,我们就需要和语音遥控器连接了,但是在此之前需要对BLE有所了解。 BLE VS Wifi VS ZigBee BLE属于Personal network, 工作距离近, 一般在10m内。 BLE协议架构 Core Specification 与

Continue reading »

imx6ul蓝牙语音识别项目之4:构建ARM Linux语音识别环境

语音识别的选择 前面我们准备好了BlueZ stack, 接下来就需要准备语音识别库了。对于语音识别,国内主要的提供商有: 科大讯飞 图灵机器人 思必驰信息科技有限公司 北京捷通华声科技股份有限公司 百度语音 北京云知声信息技术有限公司 哦啦语音 但是,我们是在ARM Cortex-A7单核上面跑,平台为ARM Linux,而且我们不准备跑python,而是使用C/C++, python脚本写代码会很快,但是效率较低,在这里可能不那么合适。 同时,考虑到我们需要从BlueZ那边获取音频,且音频数据量不小,为了有更好的体验,所以用C/C++会较好。 国内提到语音识别,那么大家会很可能马上想打的是科大讯飞,但是科大讯飞最新的Linux SDK库,里面有各prebuilt shared library,这个shared

Continue reading »

imx6ul蓝牙语音识别项目之3:用户态蓝牙配置

stack的划分 在前面的文章中,我们已经配置好了内核态对蓝牙的支持, 包括驱动以及内核态的stack。 Linux蓝牙的stack为BlueZ, 参考前面的文章的图片,可以知道,内核态和用户态使用的是MGMT接口来通讯。 底层主要负责和Controller数据的传输,而数据的传输接口一般为USB,SDIO以及串口。 具体而言,功能如下: 其中个人认为比较复杂的是SMP,内核态中对: 控制 数据 这两类信息通过socket接口传递到了用户态。MGMT作为控制接口,定义了大量的控制命令。同时将Controller的数据使用HCI方式传递给用户态的BlueZ daemon, 即下面图中说到的bluetoothd bluetoothd使用D-Bus保留控制和数据接口,用于应用程序与stack的交互。 还有一些工具可以用来完成对stack中信息的获取。 更新stack 现在stack的版本已经到了5.49, 这个版本开始支持mesh了。其中最为重要的是5.47版本,这个版本修正和正式使用D-Bus接口来完成绝大部分操作的接口的暴露。  同时Gatt的支持也变得比较完善,而Yocto中的版本一般都在5.43左右,属于比较老的版本。 因此我们需要做的事情是升级Yocto中的BlueZ版本。

Continue reading »

imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持

蓝牙架构 在Linux中蓝牙的stack分层如下: 从总体上看分为两层, 一个在内核态,一个在用户态,内核态。 在内核态中的部分暴露了一个特殊的Socket给用户态,然后用户态使用命令+参数的格式传递给内核态。而如果硬件有反馈信息,一般是事件,那么会有callback消息上来。 硬件说明 对于蓝牙,一般都是模组,例如有些是BT Wifi模组,即BT-Wifi为一体的模组。 这种模组一般是通过UART,SDIO,或者USB接口与SoC的某类总线连接。 而模组本身其实也带有固件,甚至里面自己跑着操作系统,这个时候可能就需要下载固件。这个固件是由内核发现设备的时候从用户态获取,然后通过总线现在到模组中。 内核态的配置 对于现在的比较新的内核一般都有蓝牙的stack支持,以及驱动。 如同前面所说,蓝牙自己在内核态创建了一种新的socket来和上面的用户态通信。我们可以看到内核态中的muenuconfig中,蓝牙位于Networking support中: 选中了Bluetooth subsystem support后就有驱动等支持。 对于通用,常用的蓝牙dongle都有对应的驱动: 可以看到支持的范围很广: USB

Continue reading »

imx6ul语音识别项目之硬件准备

硬件 在一些时间的延误后,终于收到了顺丰过来的板子,本以为需要到年后了。听说板子的延误是因为发现了一个小问题。 收到板子后打开看到的是盒子包装,看起来“高大上”的感觉: 打开,里面有一张V3 软件的BSP, 网线, OTG USB 线,以及电源线: 核心的板子看起来不错,至少做工和基本可见的布线很漂亮: 但是板子的尺寸比我想象的小。 软件 在将关盘拷贝到电脑后,发现结构和以前IoT和Industry里面是类似的: . ├── 01-Document ├── 02-Images ├── 03-Tools

Continue reading »