Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Prije čitanja ovog članka, preporučuje se da pročitate prethodni članak: Audio putem Bluetootha: maksimum detalja o profilima, kodecima i uređajima

Neki korisnici bežičnih slušalica navode lošu kvalitetu zvuka i nedostatak visokih frekvencija kada koriste standardni SBC Bluetooth kodek, koji podržavaju svi audio uređaji. Uobičajena preporuka za poboljšanje zvuka je kupnja uređaja i slušalica koje podržavaju aptX i LDAC kodeke. Ovi kodeci zahtijevaju naknade za licenciranje, pa su uređaji koji ih podržavaju skuplji.

Ispostavilo se da je niska kvaliteta SBC-a posljedica umjetnih ograničenja Bluetooth skupova i postavki slušalica, a to se ograničenje može zaobići na svim postojećim uređajima promjenama softvera na pametnom telefonu ili računalu.

Kodek SBC

SBC kodek ima mnogo različitih parametara koji se dogovaraju tijekom faze postavljanja veze. Među njima:

  • Broj i tip kanala: Joint Stereo, Stereo, Dual Channel, Mono;
  • Broj frekvencijskih pojaseva: 4 ili 8;
  • Broj blokova u paketu: 4, 8, 12, 16;
  • Algoritam za distribuciju bitova tijekom kvantizacije: Loudness, SNR;
  • Maksimalna i minimalna vrijednost skupa bitova koji se koriste tijekom kvantizacije (bitpool): obično od 2 do 53.

Uređaj za dekodiranje mora podržavati bilo koju kombinaciju ovih parametara. Koder možda neće implementirati sve.
Postojeći Bluetooth nizovi obično se slažu sa sljedećim profilom: Zajednički stereo, 8 pojaseva, 16 blokova, glasnoća, bitpool 2..53. Ovaj profil kodira zvuk od 44.1 kHz pri bitrateu od 328 kbps.
Parametar bitpool izravno utječe na bitrate unutar jednog profila: što je veći, to je veći bitrate, a time i kvaliteta.
Međutim, parametar bitpool nije vezan uz određeni profil; Na bitrate uvelike utječu i drugi parametri: vrsta kanala, broj frekvencijskih pojaseva, broj blokova. Bitrate možete povećati neizravno, dogovorom o nestandardnim profilima, bez mijenjanja bitpoola.

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Formula za izračunavanje SBC brzine prijenosa

Na primjer, Dual Channel način kodira kanale zasebno, koristeći cijeli skup bitova za svaki kanal. Prisiljavajući uređaj da koristi Dual Channel umjesto Joint Stereo, dobivamo gotovo dvostruku bitrate s istom maksimalnom vrijednošću bitpoola: 617 kbps.
Po mom mišljenju, korištenje bitpool vrijednosti koja nije vezana za profil u fazi pregovora je greška u A2DP standardu, što je dovelo do umjetnog ograničenja SBC kvalitete. Imalo bi više smisla dogovoriti bitrate nego bitpool.

Ove fiksne vrijednosti Bitpool i Bitrate dolaze iz tablice s preporučenim vrijednostima za korištenje za visokokvalitetni zvuk. Ali preporuka nije razlog da se ograničite na te vrijednosti.

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Specifikacija A2DP v1.2, koja je bila aktivna od 2007. do 2015., zahtijeva da svi uređaji za dekodiranje ispravno rade s brzinama prijenosa do 512 kbps:

Dekoder SNK mora podržavati sve moguće bitpool vrijednosti koje ne rezultiraju prekoračenjem maksimalne brzine prijenosa. Ovaj profil ograničava dostupnu maksimalnu brzinu prijenosa na 320 kb/s za mono i 512 kb/s za dvokanalne načine rada.

U novoj verziji specifikacije nema ograničenja u bitrateu. Procjenjuje se da moderne slušalice izdane nakon 2015. koje podržavaju EDR mogu podržati brzine prijenosa do ≈730 kbps.

Iz nekog razloga, Linux (PulseAudio), Android, Blackberry i macOS Bluetooth skupovi koje sam testirao imaju umjetna ograničenja maksimalne vrijednosti parametra bitpool, što izravno utječe na maksimalnu brzinu prijenosa. Ali to nije najveći problem; gotovo sve slušalice također ograničavaju maksimalnu vrijednost bitpoola na 53.
Kao što sam već vidio, većina uređaja radi savršeno na modificiranom Bluetooth stacku s bitrateom od 551 kbps, bez prekida i pucketanja. Ali takva bitrate nikada neće biti dosljedna u normalnim uvjetima, na regularnim Bluetooth skupovima.

Izmjena Bluetooth stoga

Svaki Bluetooth stack koji je kompatibilan s A2DP standardom ima podršku za Dual Channel mod, ali ga nije moguće aktivirati iz sučelja.

Dodajmo prekidač sučelju! Napravio sam zakrpe za Android 8.1 i Android 9 koje dodaju potpunu podršku za dvostruki kanal u hrpu, dodaju način rada izborniku za prebacivanje načina rada u razvojnim alatima i tretiraju SBC-ove s omogućenim dvostrukim kanalima kao da su dodatni kodek poput aptX-a , AAC ili LDAC (Android ovo naziva HD Audio) dodavanjem kvačice u postavke Bluetooth uređaja. Ovako to izgleda:

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Zakrpa za Android 9
Zakrpa za Android 8.1

Kada je potvrdni okvir aktiviran, Bluetooth audio počinje se prenositi brzinom prijenosa 551 kbps, ako slušalice podržavaju brzinu veze od 3 Mbit/s, ili 452 kbps, ako slušalice podržavaju samo 2 Mbit/s.

Ova je zakrpa uključena u sljedeće alternativne firmware-ove:

  • LineageOS
  • Resurrection Remix
  • crDroid

Odakle 551 i 452 kbit/s?

Bluetooth tehnologija dijeljenja zraka dizajnirana je za učinkovit prijenos velikih paketa fiksne veličine. Prijenos podataka odvija se u utorima, najveći broj utora poslanih u jednom prijenosu je 5. Postoje i načini prijenosa koji koriste 1 ili 3 utora, ali ne 2 ili 4. U 5 utora možete prenijeti do 679 bajtova brzinom veze od 2 Mbit/s i do 1021 bajta pri brzini od 3 Mbit/s, a na 3 - 367 odnosno 552 bajta.

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Ako želimo prenijeti manje podataka od 679 ili 1021 bajta, ali više od 367 ili 552 bajta, prijenos će i dalje trajati 5 slotova, a podaci će se prenijeti u istom vremenu, što smanjuje učinkovitost prijenosa.

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

SBC u Dual Channel modu, na 44100 Hz audio s Bitpool 38 parametara, 16 blokova po okviru, 8 frekvencijskih raspona, kodira zvuk u okvire od 164 bajta, s bitrateom od 452 kbps.
Zvuk mora biti enkapsuliran u L2CAP i AVDTP protokolima prijenosa, koji uzimaju 16 bajtova od audio sadržaja.

Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Dakle, jedan Bluetooth prijenos s 5 utora može primiti 4 audio okvira:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

U paket koji se šalje uklapamo 11.7 ms audio podataka koji će biti poslani za 3.75 ms, au paketu nam ostaje 6 neiskorištenih bajtova.
Ako malo podignete bitpool, više neće biti moguće spakirati 4 audio okvira u jedan paket. Morat ćete poslati 3 okvira odjednom, što smanjuje učinkovitost prijenosa, smanjuje količinu zvuka koji se prenosi po okviru i brže će dovesti do zastajkivanja zvuka u lošim radio uvjetima.

Na isti način odabrana je brzina prijenosa od 551 kbit/s za EDR 3 Mbit/s: s Bitpoolom 47, 16 blokova po okviru, 8 frekvencijskih raspona, veličina okvira je 200 bajtova, s brzinom prijenosa od 551 kbit/s. Jedan paket sadrži 5 sličica ili 14.6 ms glazbe.

Algoritam za izračun svih SBC parametara je prilično složen, lako se možete zbuniti ako brojite ručno, pa sam napravio interaktivni kalkulator kao pomoć zainteresiranima: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Zašto je sve ovo potrebno?

Suprotno uvriježenom mišljenju o kvaliteti zvuka kodeka aptX, na nekim datotekama on može proizvesti rezultate lošije od SBC-a sa standardnom brzinom prijenosa od 328 kbps.

SBC dinamički dodjeljuje bitove kvantizacije frekvencijskim pojasima na bazi od niskog do visokog. Ako je sva brzina prijenosa bila korištena za niske i srednje frekvencije, visoke frekvencije će biti "odsječene" (umjesto toga bit će tišina).
aptX kvantizira frekvencijske pojaseve s istim brojem bitova cijelo vrijeme, zbog čega ima konstantan bitrate: 352 kbps za 44.1 kHz, 384 kbps za 48 kHz, i ne može "bit-shift" na one frekvencije koje ih najviše trebaju . Za razliku od SBC-a, aptX neće "rezati" frekvencije, već će im dodati kvantizacijski šum, smanjujući dinamički raspon zvuka, a ponekad i uvodeći karakteristično pucketanje. SBC “jede detalje” - odbacuje najtiša područja.
U prosjeku, u usporedbi sa SBC 328k, aptX unosi manje izobličenja u glazbu sa širokim frekvencijskim rasponom, ali u glazbi s uskim frekvencijskim rasponom i širokim dinamičkim rasponom, SBC 328k ponekad pobjeđuje.

Razmotrimo poseban slučaj. Spektrogram snimke sviranja klavira:
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Glavna energija leži u frekvencijama od 0 do 4 kHz, a nastavlja se do 10 kHz.
Spektrogram datoteke komprimirane u aptX izgleda ovako:
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

A ovako izgleda SBC 328k.
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Vidljivo je da je SBC 328k povremeno potpuno isključio raspon iznad 16 kHz, a sav raspoloživi bitrate potrošio na raspone ispod ove vrijednosti. Međutim, aptX je uveo više izobličenja u frekvencijski spektar koji može čuti ljudsko uho, kao što se može vidjeti u oduzetom izvornom spektrogramu od aptX spektrograma (što je svjetlije, to je više izobličenja):
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Dok je SBC 328k manje kvario signal u rasponu od 0 do 10 kHz, a ostatak je odrezao:
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Brzina prijenosa od 485k SBC-a bila je dovoljna za očuvanje cijelog frekvencijskog raspona, bez onemogućavanja pojaseva.
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

SBC 485k je značajno ispred aptX-a na ovoj stazi u rasponu od 0-15 kHz, i s manjom, ali još uvijek primjetnom razlikom - u 15-22 kHz (što tamnije, to manje izobličenja):
Modificiramo Bluetooth skup kako bismo poboljšali zvuk na slušalicama bez AAC, aptX i LDAC kodeka

Arhiva izvornog zvuka, SBC i aptX.

Prebacivanjem na SBC visoke brzine prijenosa, dobit ćete zvuk koji često pobjeđuje aptX na svim slušalicama. Na slušalicama koje podržavaju 3 Mbps EDR povezivost, bitrate od 551 kbps proizvodi zvuk usporediv s aptX HD.

Možete li još više?

Zakrpa za Android također uključuje opciju za daljnje povećanje brzine prijenosa za 2 Mbps EDR uređaje. Brzinu prijenosa možete povećati s 452 kbit/s na 595 kbit/s, po cijenu smanjenja stabilnosti prijenosa u teškim radijskim uvjetima.
Dovoljno je postaviti varijablu persist.bluetooth.sbc_hd_higher_bitrate na 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Zakrpa ekstremne brzine prijenosa do sada je usvojena samo u LineageOS 15.1, ali ne i u 16.0.

Kompatibilnost uređaja

SBC Dual Channel podržavaju gotovo sve slušalice, zvučnici i glavne jedinice u automobilu. To nije ni čudo - standard zahtijeva svoju podršku u svim uređajima za dekodiranje. Postoji mali broj uređaja na kojima ovaj način rada uzrokuje probleme, ali to su izolirani slučajevi.
Više detalja o kompatibilnim uređajima možete pronaći na 4pda ili XDA-developers.

Usporedba zvučnih razlika

Napravio sam web uslugu koja kodira zvuk u SBC (kao i aptX i aptX HD) u stvarnom vremenu, izravno u pregledniku. Pomoću njega možete usporediti zvuk različitih SBC profila i drugih kodeka, bez stvarnog prijenosa zvuka putem Bluetootha, na bilo kojim žičanim slušalicama, zvučnicima i vašoj omiljenoj glazbi, a također možete promijeniti parametre kodiranja izravno tijekom reprodukcije zvuka.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaktirajte programere za Android

Pisao sam mnogim programerima Bluetooth skupova u Googleu tražeći od njih da razmotre uključivanje zakrpa u glavnu Android granu - AOSP, ali nisam dobio niti jedan odgovor. Moji zakrpe unutra Sustav zakrpa Gerrit za Android također je ostao bez komentara bilo koga uključenog.
Bio bih sretan kad bih mogao dobiti pomoć u stupanju u kontakt s programerima u Googleu i prenošenju SBC HD-a na Android. Zakrpa u gerritu je već zastarjela (ovo je jedna od ranih revizija), a ja ću je ažurirati ako programeri budu zainteresirani za moje promjene (nije mi lako ažurirati je, nemam uređaje kompatibilne s Androidom Q ).

Zaključak

Korisnici pametnih telefona s LineageOS, Resurrection Remix i crDroid firmwareom mogu uživati ​​u poboljšanoj kvaliteti zvuka već sada, samo aktiviraju opciju u postavkama Bluetooth uređaja. Korisnici Linuxa također mogu dobiti povećanu brzinu prijenosa SBC instalacijom zakrpa od Pali Rohara, koji između ostalog dodaje podršku za aptX, aptX HD i FastStream kodeke.

Izvor: www.habr.com

Dodajte komentar