SBC是subband codec的縮寫,中文叫作次頻帶編碼,也叫子帶編碼。其基本原理是把信號的頻率分爲若干子帶,而後對每一個子帶進行編碼,並根據每一個子帶的重要性及特色分配不一樣的位數(採樣深度)來表示數據。
例如,在音頻編碼中,因爲人耳對不一樣頻率的敏感度不一樣,能夠在對人耳敏感的子帶使用較細的量化(較大的採樣深度),對人耳不敏感的子帶使用較粗糙的量化(較小的採樣深度),從而在不下降主觀聽覺效果的狀況下達到較好的壓縮效果。
又例如,離散餘弦變換(DCT)時一種處理數字信號的方法,普遍應用有語音和圖像壓縮。聲音通過離散餘弦變換(DCT)之後,其係數更多的集中在較低序號的部分。對變換後的高序號部分的編碼就很簡單,能夠用很小的採樣深度對其進行編碼。html

上圖是變換前的信號,下圖是DCT變化之後的序號,變換後適合子帶編碼。
linux

SBC編碼的輸入是PCM數據,即採樣後的時間序列,輸出是二進制流。
時間序列通過分析過程,轉化爲頻域信號,而後對頻域信號分段編碼。爲每個子頻段指定一個scalfactor及採樣深度,對這個子頻段的數據進行自適應PCM編碼(Adaptive Pulse Code Modulation)。而後把各個子頻段編碼後的數據打包,做爲一幀數據,以二進制流的方式輸出。svn

SBC解碼過程是編碼過程的逆過程,其輸入是二進制流,輸出是PCM數據。
首先對二進制流進行解包,獲得一幀一幀的數據。每一幀中都包含子頻段數(4或8)、每一個子頻段的scale factor、每一個子頻段幅值須要的比特數,根據這些信息及每一個子頻段編碼以後的數據,重建(Reconstruction)子頻段的編碼前的數據。而後通過逆向的多相濾波器組,獲得原始的PCM數據。將全部子頻段的PCM數據合併,獲得解碼後的PCM數據。ui
1 下載信息:編碼
Download (HTTP): https://www.kernel.org/pub/linux/bluetooth/sbc-1.4.tar.xzspa
Download MD5 sum: 800fb0908899baa48dc216d8e156cc05code
Download size: 248 KBhtm
Estimated disk space required: 2.9 MBblog
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