关于 SBC 编解码

  SBC 编解码器 是由蓝牙技术开发组织 SIG 开发的,用于A2DP(高级音频分发配置文件)音频配置文件。蓝牙协议规定所有的蓝牙设备都必须支持SBC编解码,并提供了其他一些可选的编解码方法,如AAC。由此可知,SBC和AAC、MP3类似,都是对音频数据进行编码的方法,目的都是数据压缩

   

 上图是一个典型的蓝牙耳机应用场景。手机上的音频经过编码(数字信号)以后通过蓝牙协议被蓝牙耳机接收,经过解码以后,蓝牙耳机成功接收手机上的音频数据,然后再转化为振动被人耳识别(模拟信号)

编解码的来源:

   为什么需要用到编解码呢?是为了解决在有限的带宽内传输更有用的信号。    蓝牙或其他的传输手段,其传输带宽(传输数据的速率)是有限的,要在有限的带宽里传输更有用的信号,就需要对信号源进行压缩处理。1976年子带编码技术首次被美国贝尔实验室的R. E. Crochiere等人应用于语音编码。

   信源即需要传输的信息。

   信源编码即对信源的编码,目的是为了减少冗余,起到数据压缩的作用,常见的信源编码有Huffman编码、H.264编码等。

   信道编码的目的是对抗信道中的噪音和衰减,原理是加入冗余,常见的方法包括LDPC码、卷积码等。

    信道即信息传输的通道,典型的有光纤、电磁空间等,信息在信道中进行传输时,会受到干扰。

    信道译码、信源译码分别是信道编码、信源编码的逆过程。

    信宿即消息传递的对象。

SBC 编解码的原理

SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码。其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数(采样深度)来表示数据。 例如,在音频编码中,由于人耳对不同频率的敏感度不同,可以在对人耳敏感的子带使用较细的量化(较大的采样深度),对人耳不敏感的子带使用较粗糙的量化(较小的采样深度),从而在不降低主观听觉效果的情况下达到较好的压缩效果。 又例如,离散余弦变换(DCT)是一种处理数字信号的方法,广泛应用有语音和图像压缩。(“DCT全称为Discrete Cosine Transform,即离散余弦变换。DCT变换属于傅里叶变换的一种,常用于对信号和图像(包括图片和视频)进行有损数据压缩。 DCT将图像分成由不同频率组成的小块,然后进行量化。在量化过程中,舍弃高频分量,剩下的低频分量被保存下来用于后面的图像重建。)

上图是变换前的时间序列,下图是DCT变化以后的数据。若对变化后的数据分段,在高频段可以用较小的采样深度,从而达到数据压缩的目的。

对每个子带分别编码的好处是:

(1)可以利用人耳(或人眼)对不同频率信号的感知灵敏度不同的特性,在人的听觉(或视觉)不敏感的频段采用较粗糙的量化,从而达到数据压缩的目的。例如,在声音低频子带中,为了保护音调和共振峰的结构,就要求用较小的量化阶、较多的量化级数,即分配较多的比特数来表示样本值。而话音中的摩擦音和类似噪声的声音,通常出现在高频子带中,对它分配较少的比特数。

(2)各个子带的量化噪声都束缚在本子带内,这就可以避免能量较小的频带内的信号被其他频带中量化噪声所掩盖。

(3)通过频带分裂,各个子带的取样频率可以成倍下降。例如,若分成频谱面积相同的N个子带,则每个子带的取样频率可以降为原始信号取样频率的1/N,因而可以减少硬件实现的难度,并便于并行处理。

SBC编码过程

SBC编码的输入是PCM数据,即采样后的时间序列,输出是二进制流。 时间序列经过分析过程,转化为频域信号,然后对频域信号分段编码。为每一个子频段指定一个scalfactor及采样深度,对这个子频段的数据进行自适应PCM编码(Adaptive Pulse Code Modulation)。然后把各个子频段编码后的数据打包,作为一帧数据,以二进制流的方式输出。

  1. Analysis Filter 其目的是为了把时间序列变换到频域,使用的方法是多相滤波器组。子频段的个数可以是4个或8个,对应不同的多相滤波器组。
  2. Scale Factors计算 每一个子频段的幅值的范围是不同的,取每一个子频段幅值的最大值作为这个子频段的scale factor。比如子频段1的幅值分布在(0, 128)区间,子频段2的幅值分布在(0, 32)区间,那么指定子频段1的scale factor为128, 子频段2的scale factor为32。
  3. Bit Allocation 每一个子频段有若干幅值需要编码,每个幅值需要用若干比特数来表示。同一个子频段中每个幅值的比特数相同,不同子频段幅值分配的比特数不同。为每个子频段分配幅值比特数的过程叫做bit allocation。
  4. APCM 根据每个子频段的scale factor及每个幅值需要的比特数,对每一个子频段进行编码的过程。得到每个子频段的量化结果,即Quantized Subband。
  5. BItStream packing 把每个子频段编码后的结果组合起来,加上校验码、帧头信息等的过程。

SBC解码过程

SBC解码过程是编码过程的逆过程,其输入是二进制流,输出是PCM数据。 首先对二进制流进行解包,得到一帧一帧的数据。每一帧中都包含子频段数(4或8)、每个子频段的scale factor、每个子频段幅值需要的比特数,根据这些信息及每个子频段编码之后的数据,重建(Reconstruction)子频段的编码前的数据。然后经过逆向的多相滤波器组,得到原始的PCM数据。将所有子频段的PCM数据合并,得到解码后的PCM数据。

SBC编码的一些性质

  1. SBC是有损编码 由于无线传输的带宽有限,SBC在对每个子频段进行编码时,进行了有损处理,以达到数据压缩的目的。即经过SBC编解码以后,源PCM数据发生了变化,这也是蓝牙耳机音质不是很好的一个原因。
  2. SBC支持的采样率 包括44.1kHz、48kHz、32kHz、16kHz。
  3. SBC支持的声道 支持单声道(MONO CHANNEL)、双声道(DUAL CHANNEL)、立体声(stereo)、联合立体声(Joint Stereo)。

SBC 编解码参数   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值