一、SBC的原理
SBC是subband codec的縮寫,中文叫做次頻帶編碼,也叫子帶編碼。其基本原理是把信號的頻率分為若干子帶,然后對每個子帶進行編碼,並根據每個子帶的重要性及特點分配不同的位數(采樣深度)來表示數據。
例如,在音頻編碼中,由於人耳對不同頻率的敏感度不同,可以在對人耳敏感的子帶使用較細的量化(較大的采樣深度),對人耳不敏感的子帶使用較粗糙的量化(較小的采樣深度),從而在不降低主觀聽覺效果的情況下達到較好的壓縮效果。
又例如,離散余弦變換(DCT)時一種處理數字信號的方法,廣泛應用有語音和圖像壓縮。聲音經過離散余弦變換(DCT)以后,其系數更多的集中在較低序號的部分。對變換后的高序號部分的編碼就很簡單,可以用很小的采樣深度對其進行編碼。

上圖是變換前的信號,下圖是DCT變化以后的序號,變換后適合子帶編碼。
二、SBC編碼過程

SBC編碼的輸入是PCM數據,即采樣后的時間序列,輸出是二進制流。
時間序列經過分析過程,轉化為頻域信號,然后對頻域信號分段編碼。為每一個子頻段指定一個scalfactor及采樣深度,對這個子頻段的數據進行自適應PCM編碼(Adaptive Pulse Code Modulation)。然后把各個子頻段編碼后的數據打包,作為一幀數據,以二進制流的方式輸出。
- Analysis Filter
其目的是為了把時間序列變換到頻域,使用的方法是多相濾波器組。子頻段的個數可以是4個或8個,對應不同的多相濾波器組。 - Scale Factors計算
每一個子頻段的幅值的范圍是不同的,取每一個子頻段幅值的最大值作為這個子頻段的scale factor。比如子頻段1的幅值分布在(0, 128)區間,子頻段2的幅值分布在(0, 32)區間,那么自定子頻段1的scale factor為128, 子頻段2的scale factor為32。 - Bit Allocation
每一個子頻段有若干幅值需要編碼,每個幅值需要用若干比特數來表示。同一個子頻段中每個幅值的比特數相同,不同子頻段幅值分配的比特數不同。為每個子頻段分配幅值比特數的過程叫做bit allocation。 - APCM
根據每個子頻段的scale factor及每個幅值需要的比特數,對每一個子頻段進行編碼的過程。得到每個子頻段的量化結果,即Quantized Subband。 - BItStream packing
把每個子頻段編碼后的結果組合起來,加上校驗碼、幀頭信息等的過程。
三、SBC解碼過程

SBC解碼過程是編碼過程的逆過程,其輸入是二進制流,輸出是PCM數據。
首先對二進制流進行解包,得到一幀一幀的數據。每一幀中都包含子頻段數(4或8)、每個子頻段的scale factor、每個子頻段幅值需要的比特數,根據這些信息及每個子頻段編碼之后的數據,重建(Reconstruction)子頻段的編碼前的數據。然后經過逆向的多相濾波器組,得到原始的PCM數據。將所有子頻段的PCM數據合並,得到解碼后的PCM數據。
四、關於SBC編碼的一些性質
- SBC是有損編碼
由於無線傳輸的帶寬有限,SBC在對每個子頻段進行編碼時,進行了有損處理,以達到數據壓縮的目的。即經過SBC編解碼以后,PCM數據發生了變化。因此藍牙設備的音質不是很好。 - SBC支持的采樣率
包括44.1kHz、48kHz、32kHz、16kHz。 - SBC支持的聲道
支持單聲道(MONO CHANNEL)、雙聲道(DUAL CHANNEL)、立體聲(stereo)、聯合立體聲(Joint Stereo)。
五、編解碼仿真
1 下載信息:
-
Download (HTTP): https://www.kernel.org/pub/linux/bluetooth/sbc-1.4.tar.xz
-
Download MD5 sum: 800fb0908899baa48dc216d8e156cc05
-
Download size: 248 KB
-
Estimated disk space required: 2.9 MB
-
Estimated build time: Less than 0.1 SBU
2 編譯和運行:
./configure --prefix=/usr --disable-static --disable-tester && make
3 使用方法:
編碼:
sbcenc test9a.au > test9.sbc
解碼:
sbcdec -f test9b.au test9.sbc
親測有效。
參考文檔:
1 https://www.cnblogs.com/huahuahu/p/lan-ya-xie-yi-zhong-deSBC-bian-ma.html
2 http://www.linuxfromscratch.org/blfs/view/svn/multimedia/sbc.html