藍牙協議中的SBC編解碼原理和仿真


一、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 下載信息:

    2 編譯和運行:

./configure --prefix=/usr --disable-static --disable-tester &&
make

    3 使用方法:

      編碼:

sbcenc test9a.au > test9.sbc

     解碼:

sbcdec -f test9b.au test9.sbc

  親測有效。

 

參考文檔:

https://www.cnblogs.com/huahuahu/p/lan-ya-xie-yi-zhong-deSBC-bian-ma.html

http://www.linuxfromscratch.org/blfs/view/svn/multimedia/sbc.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM