蓝牙协议中的SBC编码

一、从信息的传输说起

上图是一个典型的蓝牙耳机应用场景。手机上的音频信息经过编码以后通过蓝牙协议被蓝牙耳机接收,经过解码以后,蓝牙耳机成功获取手机上的音频信息,然后再转化为振动被人耳识别。 这是一个典型的数字通信系统。一个数字通信系统由若干部分组成,SBC编码属于哪一部分,在整个数字通信系统中起到什么作用呢?我们先看一下数字通信系统的一般模型。

信源即需要传输的信息。 信源编码即对信源的编码,目的是为了减少冗余,起到数据压缩的作用,常见的信源编码有Huffman编码、H.264编码等。 信道编码的目的是对抗信道中的噪音和衰减,原理是加入冗余,常见的方法包括LDPC码、卷积码等。 信道即信息传输的通道,典型的有光纤、电磁空间等,信息在信道中进行传输时,会受到干扰。 信道译码、信源译码分别是信道编码、信源编码的逆过程。 信宿即消息传递的对象。

蓝牙耳机信号传输过程

对于典型的蓝牙耳机应用场景来说,信源就是PCM数据,信道编解码的方法由蓝牙协议来指定,信道即耳机和手机之间的电磁空间。 信源编解码即对音频数据编解码的过程,SBC编解码其中的一种编解码方法。 蓝牙协议规定所有的蓝牙设备都必须支持SBC编解码,并提供了其他一些可选的编解码方法,如AAC。由此可知,SBC和AAC、MP3类似,都是对音频数据进行编码的方法,目的都是数据压缩

二、SBC的原理

SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码。其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数(采样深度)来表示数据。 例如,在音频编码中,由于人耳对不同频率的敏感度不同,可以在对人耳敏感的子带使用较细的量化(较大的采样深度),对人耳不敏感的子带使用较粗糙的量化(较小的采样深度),从而在不降低主观听觉效果的情况下达到较好的压缩效果。 又例如,离散余弦变换(DCT)时一种处理数字信号的方法,广泛应用有语音和图像压缩。声音经过离散余弦变换(DCT)以后,其系数更多的集中在较低序号的部分。对变换后的高序号部分的编码就很简单,可以用很小的采样深度对其进行编码。

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

三、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)。

参考链接

  1. de Bont F, Groenewegen M, Oomen W. A high-quality audio coding system at 128 kb/s[C]//Audio Engineering Society Convention 98. Audio Engineering Society, 1995. MLA
  2. 奥本海姆, 谢弗, 巴克, 等. 离散时间信号处理: Discrete-time signal processing[M]. 西安交通大学出版社, 2001.
  3. A2DP - Advanced Audio Distribution Profile - Bluetooth:https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=66605
  4. 顾学迈, 石硕, 贾敏. 信息与编码理论 : Information and coding theory[M]. 哈尔滨工业大学出版社, 2014.

原文发布于微信公众号 - QQ音乐技术团队(gh_287053a877e6)

原文发表时间:2017-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【干货】基于协同过滤的推荐系统实战(附完整代码)

【导读】本文使用Python实现简单的推荐系统,分别实践了基于用户和基于商品的推荐系统,代码使用sklearn工具包实现。除了代码实现外,还分别从理论上介绍了两...

6.6K50
来自专栏阮一峰的网络日志

巧用Photoshop进行科学研究

Photoshop CS3 Extended是一个强大的软件。你可以用它,让你的报名照变得漂亮一些,然后上传到社交网站上;你也可以将一个名人的脑袋,移植到一张裸...

22220
来自专栏数据处理

碰运气的约会-几何概率

26050
来自专栏人工智能头条

假期充电 | 10大机器学习开源项目推荐(Github平均star为1385)

16420
来自专栏算法+

音频自动增益 与 静音检测 算法 附完整C代码

静音检测 在WebRTC中 是采用计算GMM (Gaussian Mixture Model,高斯混合模型)进行特征提取的。

1.4K100
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/7/22

链接:https://cn.udacity.com/course/self-driving-car-fundamentals-featuring-apollo-...

8010
来自专栏程序生活

斯坦福tensorflow教程(一) tensorflow概述Tensorflow简介为什么选择tensorflow基于Tensorflow的框架资源Tensorflow基础数据流图 Data Flo

30250
来自专栏媒矿工厂

JPEG-XS:用于IP视频的母片图像(mezzanine image)编解码器

本帖参考T. Richter等人发表在SMPTE Motion Imaging Journal的文章JPEG-XS—A High-Quality Mezzani...

49130
来自专栏AI研习社

代码+实战:TensorFlow Estimator of Deep CTR —— DeepFM/NFM/AFM/FNN/PNN

深度学习在 ctr 预估领域的应用越来越多,新的模型不断冒出。从 ctr 预估问题看看 f(x) 设计—DNN 篇(https://zhuanlan.zhihu...

2.6K90
来自专栏媒矿工厂

下一代视频编码的新选项?xvc 2.0

专注开发视频编解码器的软件公司Divideon(总部位于斯德哥尔摩,瑞典)于2018年7月3日正式发布了xvc codec的第二个版本xvc 2.0。xvc是一...

43630

扫码关注云+社区

领取腾讯云代金券