背景:
LE audio還沒有大規(guī)模應用,但是在一些場景中需要進行大容量快速傳輸,例如遙控器語音傳輸用于語音指令識別,需要直接利用le傳輸pcm音頻流。在此既是要求對延遲比較寬松,另外是考慮le功耗較低本質既是傳輸事件交互機制,所以持續(xù)的傳輸必然導致功耗的提升。
本文在此探討一些對傳輸速率的影響因素:
透傳pcm沒有經(jīng)過壓縮的數(shù)據(jù)對速率要求較大,影響傳輸速率的主要因素:
1、連接間隔
cp.interval_min
cp.interval_max
明顯,如果這個連接間隔時間越短,那么傳輸?shù)乃俣染驮龃蟆_B接上傳完數(shù)據(jù)后,藍牙基帶即進入休眠狀態(tài),保證低功耗。其是1.25毫秒一個單位。
按照le規(guī)范,鏈接間隔最低設置7.25ms。
2、從設備延遲或者從設備時延
cp.slave_latency
允許Slave(從設備)在沒有數(shù)據(jù)要發(fā)的情況下,跳過一定數(shù)目的連接事件,在這些連接事件中不必回復Master(主設備)的包,這樣就能更加省電(范圍可以是0~499)。
Slave Latency = OFF時,master發(fā)包,slave必須回復,如果不回復,Master就會認為slave那邊接收不正常。
減少或者設置為0,那么每次連接事件中都需要回復Master的包,當然功耗會上升,但數(shù)據(jù)發(fā)送速度也會提高。
3、數(shù)據(jù)包大小
主要受到mtu設置影響,目前l(fā)e最大可設512.另外還會和主機端相關,看主機端支持的最大mtu是多少,協(xié)商機制會取兩者較小者。
4、使用2M PHY
目前BLE支持3種LE PHY,分別是LE 1M PHY,LE 2M PHY,LE CODED PHY,其中LE 2M PHY用于高速率,,而理論距離是LE 1M PHY的一半,而LE CODED PHY用于長距離模式,LE 1M PHY兼顧了距離和速率,可以根據(jù)自己實際需要進行選擇,如果對傳輸距離有要求,需要謹慎選擇。
LE PHY 可以通過調用api接口發(fā)起更新,一般在peripheral端,收到ble_evt_connected事件的時候進行請求更新。如下所示,即可配置為只支持2M 的PHY:
#if (dg_configBLE_2MBIT_PHY == 1)
? ? ? ? /* Switch to 2Mbit PHY during SUOTA */
? ? ? ? ble_gap_phy_set(evt->conn_idx, BLE_GAP_PHY_PREF_2M, BLE_GAP_PHY_PREF_2M);
#endif /* (dg_configBLE_2MBIT_PHY == 1) */
5、發(fā)送選擇
要獲取最大數(shù)據(jù)吞吐能力,可以將寫操作屬性設置為不需要ACK,即Write withoutACK,此時IFS以及接受和發(fā)送的時間都將極大優(yōu)化,
在此使用notify不需要答復的方式進行通訊。
6、壓縮傳輸數(shù)據(jù)
ADPCM編碼
這是一種將pcm編碼壓縮的算法,主要原理是取位深差異。
音頻信號雖然是比較連續(xù)性的,有些差值比較小,有些差值比較大,如果差值比較大有可能用4bit表示不了,如果增大表示差值的位數(shù)(例如8bit\16bit)是可以解決這個問題,但就導致數(shù)據(jù)量變大,沒起到壓縮的目的,而且這種差值比較大的只是少數(shù),大部分還是差值比較小的。
為了解決這個問題,前輩們就想出了ADPCM,定義一個因子,用差值除以因子的值來表示兩點之差,如果兩點之間差值比較大,則因子也比較大。通過因子引入,可以使得DPCM編碼自動適應差值比較大的數(shù)據(jù)。
ADPCM算法并沒用固定標準,最經(jīng)典的就是IMA ADP。
四、
傳輸過程不僅需要考慮傳輸帶來的速率要求,另外也需要考慮處理過程延時,DMA讀取經(jīng)過采樣的pcm給到buf是比較快的,這里為了避免buf重新覆蓋采用了兩個buf交替?zhèn)鬏敗?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-408119.html
如果這里需要加壓縮算法還需要考慮加深buff。文章來源地址http://www.zghlxwxcb.cn/news/detail-408119.html
到了這里,關于BLE快速大容量傳輸(語音實例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!