SBC 算法简介与PLC的优化简介
1. SBC算法简介
- SBC是sub band code的缩写,也可称为子带编码
- 在A2DP协议中,SBC算法是默认支持的
- 蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法
2. 算法基本框图
- SBC系统使用一个余弦调制的滤波器组,用来解析和同步。滤波器组可设定成4或8个子带
- 子带信号的量化采用比特分配器和自适应脉冲编码器组调制
- 可用的比特位数和编码器的块数都是可配置的
- 编码后的数据由比特流打包器打包,以有线或无线方式传输
- 解码是编码的逆过程
3. 算法所用参数
- sampling_frequency:采样频率。常用的是16KHz,32KHz,44.1KHz和48KHz
- channel mode:通道模式。可以是单声道,双声道,立体声和联合立体声
- block length:块长度。可以是4,8,12,16;各个子带audio 对自身进行n个的子带采样,这些n个采样形成了一个block。使用这些block 用来计算各个子带最大的louness,加上尺度因子(scale factors),最终subband的audio信号归一化为-1和1之间的值,归一化的值最终会被选择性的量化(不是所有的值都会被采用),这些block最终会形成one frame数据,block越多,算法需要的开销就越大,dalay就越长。
- subbands:子带数量。可以是4或8,子带就是将音乐按想要的不同的频率过滤后形成的子带,经过多项正交滤波器过滤形成了需要的不同的子带
- allocation method:分配模式。可以是SNR或loudness,SNR规定每一个subband需要分配多少bit,而Loudness则在SNR的基础上规定了,在哪些subband上多分配(低频带多,保证主要的音频元素),在哪些subband少分配(高频带少是因为高频一般是对音质有影响,加上高频会改善音质)。在mono的时候将会run一次,在Stereo的时候等会run两次。
- bitpool:比特池。bitpool规定了bit的数量,bitpool一般是恒定的,所以bit数量也是恒定的。并且各个subband会根据bitpool按一定的比例得出各自subband的bit数量,子带中的每一个bit并不是都需要的。最终根据尺度因子和子带的采样量化形成一帧数据。
- bitrate的计算公式如下:bitrate=(8*framelength*fs)/subands*block
4. SBC算法实现
sbc的整个过程就是将原始输入信号(pcm),通过带通滤波,将其分割为若干个子频带(subband),将各个自带搬移到零频率附近,并对各个子频带进行采样和编码。最后合路输出。
5.PLC的简介
PLC(Time and packet loss concealment)的引进是用来解决在SBC的编码在互联网的应用中由于丢包产生的低延迟问题。它的引入能够平衡在编码模式和pakcet loss rate,并能够优化编码模式。使得SBC的传输质量得到明显的提高和增强。
PLC详细请参考如下链接:https://pdfs.semanticscholar.org/1f19/561d03bc88b67728375566c95bbf77e730d5.pdf