音频编解码之SBC

SBC算法简介

  • SBC是sub band code的缩写,也可称为子带编码
  • 在A2DP协议中,SBC算法是默认支持的
  • 蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法

算法基本框图

  • SBC系统使用一个余弦调制的滤波器组,用来解析和同步。滤波器组可设定成4或8个子带
  • 子带信号的量化采用比特分配器和自适应脉冲编码器组调制
  • 可用的比特位数和编码器的块数都是可配置的
  • 编码后的数据由比特流打包器打包,以有线或无线方式传输
  • 解码是编码的逆过程

算法所用参数

  • sampling_frequency:采样频率。常用的是16KHz,32KHz,44.1KHz和48KHz
  • channel mode:通道模式。可以是单声道,双声道,立体声和联合立体声
  • block length:块长度。可以是4,8,12,16
  • subbands:子带数量。可以是4或8
  • allocation method:分配方式。可以是SNR或loudness
  • bitpool:比特池。范围是2-250。此值越大,编码产生的数据越长

SBC算法实现

SBC编码算法实现

PCM格式的左右声道进入多相解析器,输出尺度因子和子带采样数据
每个尺度因子分别对应一个子带
量化后的子带采样数据需要进行打包,打包方式可以是分段或不分段

多相解析器的代码实现较为复杂,流程图如下:

SBC解码算法实现

解码过程是编码过程的逆
多相综合器的代码实现较为复杂,流程图如下:

SBC解码算法在某蓝牙主设备上的应用

帧格式

参数选择

  • sampling frequency:16
  • channel mode:单声道
  • number of subbands:8
  • number of channels:1
  • number of blocks:15
  • allocation method:SNR
  • bitpool:26

总结

  • 在本例中,压缩前的数据有80*2=160Byte,压缩后的数据有20Byte,压缩比接近8:1,压缩比是可调的,其与编码参数有关
  • 压缩后的帧数据长度可以由编码参数计算出来
  • 如果在传输过程中丢失了个别帧,解压后回放时会出现一小段音频的整体丢失,对整体的解压没有影响

参考:
[[1]][SBC音频编解码算法在无线音频传输上的简单应用]
https://blog.csdn.net/wzz4420381/article/details/48676921