你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

无线与云连接技术专题之二:利用Opus在STM32WB上实现BLE全双工语音流

[复制链接]
STMCU-管管 发布时间:2022-4-14 09:20
无线与云连接技术专题之二:利用Opus在STM32WB上实现BLE全双工语音流

一简介
在无线蓝牙领域,既能满足超低功耗,又能进行全双工语音通讯,一直是市场上的需求,比如:无线门铃,短距离对讲机等应用。针对BLE语音相关的应用场景,ST推出了FP-AUD-BVLINKWB1这个软件包供客户评估。

本文将对这个软件包展开介绍,该软件包主要包含以下特性:
·使用Opus v1.3编码和解码,通过BLE实现全双工立体音频流。
·使用自定义BlueVoiceOPUS协议,通过API即可使用Opus功能。
·源码包含数字音频捕获和处理。
·可以通过USB进行音频流的回放。
·可使用麦克风扩展板X-NUCLEO-CCA02M2 + Nucleo开发板P-NUCLEO-WB55的组合或者探索板STM32WB5MM-DK。
·兼容STBLESensor App。
·免费开源。

感兴趣的话欢迎下载该软件包进行评估

二软件介绍
软件架构
11.png
▲图1.软件架构图

·Hardware Abstraction:硬件抽象层,使用了STM32的HAL库提供底层的硬件驱动。
·BSP层:在HAL层之上,提供了板级支持包,包含了SPI,ADC,LED和User Button等驱动。
·Middleware层:中间件层,主要包含了以下内容:
□ STM32 WPAN:提供BLE,Thread,Zigbee等协议相关的接口API,本应用只使用了BLE协议。
□ USB Device:提供各种不同USB device类的实现,本应用中只使用了USB Audio类。
□ PDM Lib:提供了数字麦克风PDM信号到PCM信号转换的软件实现。
□ OPUS:开源第三方的OPUS库,版本v1.3。

Opus简介
Opus是完全开源免费的高通用性音频编解码协议,由Internet Engineering Task Force (IETF)标准化。

Opus可以处理广泛的音频应用,包括IP语音、视频会议、游戏内聊天,甚至远程现场音乐表演。它可以从低比特率窄带语音缩放到非常高质量的立体声音乐,并且具备以下特点:
·比特率范围:6kb /s到510 kb/s
·采样率范围:8khz(窄带)到48kHz(全带)
·帧大小:2.5 ms到60 ms
·比特率,采样率,帧大小动态可调节
·支持固定比特率(CBR)和可变比特率(VBR)
·支持语音和音乐
·支持单声道和立体声
·最多支持255个通道
·良好的鲁棒性和丢包隐藏能力
·支持浮点和定点

BlueVoiceOPUS协议
BlueVoiceOPUS是自定义的协议,Central和Peripheral是GAP层的角色,在点对点通讯中,主动发起连接请求的设备为Central。在GATT协议中,Server接受请求和命令,将数据保存在属性中。Client实施服务发现流程,并向Server请求数据。

如果是单向的非对称语音系统,那么具备麦克风的设备可以定义为Server,客户端可以主动或被动接收Server的语音数据流。
12.png
▲图2.GATT角色分配
如图2,FP-AUD-BVLINKWB1提供了双向的系统,双方设备都具备语音的能力,所以双方都实现了GATT Server以及Client的角色。并且,Server的语音数据基于notification性质,将以异步的方式主动发送给Client。

✦ BlueVoiceOPUS服务
ATT协议用于在设备中进行数据交换,ATT的最小实体称为属性。GATT服务由各种服务组成,其中服务由服务申明属性作为起始,每一个服务又包含若干特性,特性由任意属性或属性描述符组成。

表1是典型的BLE服务的属性表,其中包含了1个服务申明以及3个特性。Audio特性用来通知对方设备音频数据。Ctrl特性通知对方设备控制数据,比如播放,暂停等。Music特性用来通知对方音乐数据,该特性只在ST BLE Sensor APP中实现,取代Audio特性,用来传输压缩后的48KHz立体音乐。
13.png
▲表1.BlueVoiceOPUS服务属性表
✦ BLUEVoiceOPUS实现
在Middleware层,和BlueVoiceOPUS协议相关的文件包括:
bvopus_service_stm:该文件管理所有和BLE相关的功能,包括添加服务和添加特性,以及数据的接收和发送。其中包含了一个简单的数据封包和解析协议。

opus_interface_stm:该文件实现了Opus编码器和BlueVoiceOPUS服务的接口。提供简单的API用于Opus初始化,配置,数据压缩和解压等。

应用层介绍
在软件包中包含了三个主要的工程:
·BVLCentral:作为主设备主动发起连接,并提供BlueVoiceOPUS服务。
·BVLPeripheral:作为从设备广播,并提供BlueVoiceOPUS服务。
·BVLPeripheral_FullBand:作为从设备广播,提供BlueVoiceOPUS服务, 可以通过BLE接收立体声音乐,但目前只能和ST BLE Sensor相连。
·BVLCentral和BVLPeripheral分别烧录到WB55的开发板中,分别作为主机和从机,通过开启或停止音频通知,可以达到三种不同类型的通讯:单工,半双工和全双工。
·当设备在输出音频流时,应用层负责语音的获取,数据压缩和封包,然后通过BlueVoiceOPUS协议发送出去。

·当设备在接收音频流时,应用层通过从BlueVoiceOPUS协议中接收BLE数据包,然后解包和解码OPUS语音数据。

通过P-NUCLEO-WB55上的SW1控制打开或关闭语音流通道。
通过LED显示设备的状态。
·广播/发现状态:绿色LED闪烁
·连接状态:蓝色LED缓慢闪烁
·语音流状态:蓝色LED正常闪烁
·接收状态:蓝色LED稳定点亮(不闪烁)
·全双工状态:蓝色LED快速闪烁(双方设备)

BVLCentral可以由APP(ST BLE Sensor)代替,完成设备和手机端的全双工语音通讯。
14.png
▲图3.应用流程图
整个应用流程如图3所示,整个流程介绍如下:
·从设备广播,主设备发起连接,直到连接建立成功。
·双方互相完成服务和特性发现流程。
·从设备通过按钮,请求打开特性通知,主设备打开通知,从设备发送语音流,此时状态为语音流状态。
·相反地,主设备通过按钮,请求打开特性通知,从设备打开通知,主设备发送语音流,此时状态变为全双工状态。
·可以通过按钮,开关语音流,改变语音流状态。

三系统部署指导

下面将从不同方面分别介绍Demo的部署流程。
两块STM32WB开发板之间的全双工音频流
15.png
▲图4.NUCLEO+CCA02M2的组合
如上图4 ,可以使用P-NUCLEO-WB55开发板与一块麦克风扩展板X-NUCLEO-CCA02M2进行组合。然后分别烧录BVLCentral工程和BVLPeripheral工程。当双方设备建立连接以后,通过Nucleo上的SW1按钮,就可以建立起半双工或全双工的语音流了。麦克风扩展板可以对语音信号以8kHz或16kHz进行采集,并通过BlueVoiceOPUS协议传输,当对方设备接收到语音数据后,也通过usb传输到PC,使用刻录软件(如audacity)进行刻录保存,然后使用Audacity或其他语音软件播放。
16.png
▲图5.STM325MM-DK探索板

如上图5,也可以使用STM32WB5MM-DK进行同样的操作,该开发板使用了STM32WB5MM的模组,并且板载了一块OLED显示屏供开发。

当然也可以使用图4和图5的组合,只要一块烧录的是主机程序,另一块烧录的是从机程序即可。

STM32WB开发板和手机之间的全双工音频流
除了上面的配置方法外,ST还提供了ST BLE Sensor手机APP供测试。
17.png
▲图6.手机和开发板之间的音频流

如图6,手机可以作为主设备,扫描然后连接STM32WB55开发板,建立全双工的音频流的BLE链路。语音信号可以从开发板采集,发送到手机侧进行播放。也可以从手机侧采集,发送到开发板后,再通过USB进行播放。

STM32WB开发板和手机之间的立体声音乐播放
上面介绍的都是8kHz/16kHz的语音流,该软件包还提供了全带(Full-Band)的48kHz立体声音乐流方案。
18.png
▲图7.48kHz立体声音乐流方案

如图7,手机扫描设备后,发起并建立连接,完成GATT服务发现流程,然后通过按钮打开特性的通知属性,建立全带音乐流。APP使用OPUS对手机内音乐进行压缩和封包,然后通过BLE发送给开发板。开发板通过USB将数据导出到PC上,最后使用Audacity或其他语音软件进行播放。

收藏 评论7 发布时间:2022-4-14 09:20

举报

7个回答
lospring 回答时间:2022-6-16 14:46:43
内容很详细啊,马上下载试试
STMWoodData 回答时间:2022-6-16 14:46:51
学习学习
STMWoodData 回答时间:2022-6-16 14:47:18
需要板子实验实验,哈哈哈哈
态度决定一切 回答时间:2022-6-16 14:50:26
这个技术主要的应用场景是哪些呢?
ironman 回答时间:2022-6-16 14:50:39
图文注释,相当直观了!
态度决定一切 回答时间:2022-6-16 14:51:20
STMWoodData 发表于 2022-6-16 14:47
需要板子实验实验,哈哈哈哈

同意! 我还差块扩展板就可以实验了
ghost110 回答时间:2022-6-16 15:16:33
很详细啊  ,感谢分享

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版