SBC学习

参考A2DP_v1.3.1.pdf的附录B

SBC is an audio coding system specially designed for Bluetooth AV applications to obtain high quality audio at medium bit rates, and having a low computational complexity. SBC uses 4 or 8 subbands, an adaptive bit allocation algorithm, and simple adaptive block PCM quantizers. The SBC audio coding system is based on an earlier system, which was presented on [11]. Reference executables of both the encoder and the decoder of SBC codec are available in [19] for Win32 platform. For further information, refer to Section 9.4.3 in [9]. Note that source code of SBC neither encoder or decoder is available as part of the specification.

使用4或8个子带
自适应比特分配算法
简单的自适应块PCM量化器
Win32平台上的编码器和解码器参考实现
[19] Conformance Test Bitstreams and Reference Implementation of SBC, http://www.bluetooth.org

术语
frame - 可独立解码的basic unit
bit_count - 比特计数器
bitneed - 分配比特的过程中记录剩余比特的计数器

Syntax

Syntax                                      No. of bits     Mnemonic

audio_frame()
{
    frame_header()
    scale_factors()
    audio_samples()
    padding()
}
Table 12.11: Syntax of audio_frame

frame_header()
{
    syncword                                8               BsMsbf  0x9C
    sampling_frequency                      2               UiMsbf  00 - 16000
                                                                    01 - 32000
                                                                    10 - 44100
                                                                    11 - 48000
    blocks                                  2               UiMsbf  00 - 4
                                                                    01 - 8
                                                                    10 - 12
                                                                    11 - 16
    channel_mode                            2               UiMsbf  00 - MONO
                                                                    01 - DUAL_CHANNEL
                                                                    10 - STEREO
                                                                    11 - JOINT_STEREO
    allocation_method                       1               UiMsbf  0  - LOUDNESS
                                                                    1  - SNR
    subbands                                1               UiMsbf  0  - 4
                                                                    1  - 8
    bitpool                                 8               UiMsbf
    crc_check                               8               UiMsbf
    If (channel_mode==JOINT_STEREO)
    {
        for (sb=0;sb<nrof_subbands-1;sb++)
        {
            join[sb]                        1               UiMsbf
        }
        RFA                                 1               UiMsbf
    }
}
Table 12.12: Syntax of frame_header

scale_factors()
{
    for (ch=0;ch<nrof_channels;ch++)
    {
        for (sb=0;sb<nrof_subbands;sb++)
        {
            scale_factor[ch][sb]            4               UiMsbf
        }
    }
}
Table 12.13: Syntax of scale_factors

audio_samples()
{
    for (blk=0;blk<nrof_blocks;blk++)
    {
        for (ch=0;ch<nrof_channels;ch++)
        {
            for (sb=0;sb<nrof_subbands;sb++)
            {
                if (bits[ch][sb]!=0)
                {
                    audio_sample[blk][ch][sb] 1..16         UiMsbf
                }
            }
        }
    }
}
Table 12.14: Syntax of audio_samples

可以看到压缩后的音频数据区里,先按块b0、b1排列,然后是通道c0、c1,然后是子带sb0、sb1、sb2、sb3,最后是子带内的样点压缩比特

+-------------------------------+-------------------------------+
|b0                             |b1                             |
+---------------+---------------+---------------+---------------+
|c0             |c1             |c0             |c1             |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|sb0|sb1|sb2|sb3|sb0|sb1|sb2|sb3|sb0|sb1|sb2|sb3|sb0|sb1|sb2|sb3|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

泰凌葳电子的SDK默认的SBC参数

#define SBC SYNCWORD    0x9C
#define MSBC SYNCWORD   0xAD

#define SBC_MODE_MONO           0x00
#define SBC_MODE_DUAL_CHANNEL   0x01
#define SBC_MODE_STEREO         0x02
#define SBC_MODE_JOINT_STEREO   0x03

#define QUALITY_LOWEST          1               //you may notice the quality reduction
#define OUALITY MEDIUM          2               //pretty good
#define OUALITY GREAT           3               //as good as it will get without an FPU

#define SBC SUBBANDS            8
#define SBC BLOCKS              10
#define SBC BITPOOL             12
#define SBC CHANNELS            1
#define SBC_MODE                SBC_MODE_MONO
#define SBC_SNR                 0               // Loudness
#define SBC_SAMPLE_RATE         16000           //116000//44100//46545
#define SBC_SUBBANDS            8
+-------------------------------+-------------------------------+
|b0                             |b1                             |
+-------------------------------+-------------------------------+
|c0                             |c0                             |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|sb0|sb1|sb2|sb3|sb4|sb5|sb6|sb7|sb0|sb1|sb2|sb3|sb4|sb5|sb6|sb7|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

以下转自SBC帧格式_bitpool-CSDN博客

一、SBC参数说明

1.1、Sampling Frequency

采样率,1s中可以采集多少个点

1.2、Channel Mode

声道模式,包括单声道,双声道,立体音,联合立体音

1.3、Block Length

每个块的大小

1.4、allocation_method

分配bit的方法

1.5、subbands

子带数量

1.6、bitpool

编码流位分配池的大小

1.7、crc_check

crc校验位

1.8、scale_factors

比例因子,占4位,channel*subbands*4

1.9、audio_samples

表示channel中的block的对于子带的音频样本

1.10、padding

补充位

二、帧长度计算

2.1、基础介绍

nrof_channels:声道数
nrof_subbands:子带数
nrof_blocks:块数
bitpool:一个块所能使用的最大bit数
一个SBC帧可能包含多个块,一个块中包含多个子带

2.2、单声道与双声道

固定开销header:4字节
尺度(比例)因子:4*nrof_channels*nrof_subbands(bit)
audio_samples:nrof_channels * nrof_blocks * bitpool
Frame_length = 4 + (4*nrof_channels*nrof_subbands)/8 + (nrof_channels * nrof_blocks * bitpool)/8

2.3、立体声与联合立体声

固定开销header:4字节 + nrof_subbands
尺度(比例)因子:4*nrof_channels*nrof_subbands(bit)
audio_samples:
		nrof_blocks * bitpool
Frame_length = 4 + nrof_subbands/8 + (4*nrof_channels*nrof_subbands)/8 + ( nrof_blocks * bitpool)/8
nrof_blocks * bitpool:多少个采样点*每个采样点所能使用的最大位数

三、bit rate计算

bit rate指的是1s内传输的bit数
A2DP spec中给出的计算方式为:
	bit_rate = Frame_length * fs / (nrof_subbands *nrof_blocks)* 8
	Frame_length /(nrof_subbands *nrof_blocks)*8就是每个子带的bit rate,再乘以采样率就是每秒的bit rate

四、帧格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值