Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Pred prečítaním tohto článku vám odporúčame prečítať si predchádzajúci článok: Zvuk cez Bluetooth: maximálne podrobnosti o profiloch, kodekoch a zariadeniach

Niektorí používatelia bezdrôtových slúchadiel hlásia nízku kvalitu zvuku a nedostatok vysokých frekvencií pri použití štandardného kodeku Bluetooth SBC, ktorý podporujú všetky zvukové zariadenia. Bežným odporúčaním na zlepšenie zvuku je nákup zariadení a slúchadiel, ktoré podporujú kodeky aptX a LDAC. Tieto kodeky vyžadujú licenčné poplatky, takže zariadenia, ktoré ich podporujú, sú drahšie.

Ukazuje sa, že nízka kvalita SBC je spôsobená umelými obmedzeniami Bluetooth stackov a nastavení slúchadiel a toto obmedzenie je možné obísť na akýchkoľvek existujúcich zariadeniach prostredníctvom softvérových zmien v smartfóne alebo počítači.

Kodek SBC

Kodek SBC má mnoho rôznych parametrov, ktoré sa dohodnú počas fázy nastavenia pripojenia. Medzi nimi:

  • Počet a typ kanálov: Joint Stereo, Stereo, Dual Channel, Mono;
  • Počet frekvenčných pásiem: 4 alebo 8;
  • Počet kociek v balení: 4, 8, 12, 16;
  • Algoritmus na distribúciu bitov počas kvantovania: Loudness, SNR;
  • Maximálna a minimálna hodnota súboru bitov použitých počas kvantovania (bitpool): zvyčajne od 2 do 53.

Dekódovacie zariadenie musí podporovať akúkoľvek kombináciu týchto parametrov. Kódovač nemusí implementovať všetko.
Existujúce zásobníky Bluetooth sa zvyčajne zhodujú na nasledujúcom profile: Joint Stereo, 8 pásiem, 16 blokov, Loudness, bitpool 2..53. Tento profil kóduje zvuk 44.1 kHz pri bitovej rýchlosti 328 kbps.
Parameter bitového fondu priamo ovplyvňuje bitovú rýchlosť v rámci jedného profilu: čím vyššia je, tým vyššia je bitová rýchlosť, a teda aj kvalita.
Parameter bitového fondu však nie je viazaný na konkrétny profil; Bitovú rýchlosť do značnej miery ovplyvňujú aj ďalšie parametre: typ kanálov, počet frekvenčných pásiem, počet blokov. Bitový tok môžete zvýšiť nepriamo, odsúhlasením neštandardných profilov, bez zmeny bitového fondu.

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Vzorec na výpočet bitovej rýchlosti SBC

Napríklad režim Dual Channel kóduje kanály oddelene, pričom pre každý kanál využíva celý bitový fond. Tým, že zariadenie prinúti používať Dual Channel namiesto Joint Stereo, získame takmer dvojnásobnú bitovú rýchlosť s rovnakou maximálnou hodnotou bitpoolu: 617 kbps.
Podľa môjho názoru je použitie hodnoty bitpoolu, ktorá nie je viazaná na profil v štádiu vyjednávania, chybou v štandarde A2DP, čo viedlo k umelému obmedzeniu kvality SBC. Zmysluplnejšie by bolo rokovať o bitovej rýchlosti ako o bitpoole.

Tieto pevné hodnoty Bitpool a Bitrate pochádzajú z tabuľky s odporúčanými hodnotami na použitie pre vysokokvalitný zvuk. Odporúčanie však nie je dôvodom na obmedzenie týchto hodnôt.

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Špecifikácia A2DP v1.2, ktorá bola aktívna v rokoch 2007 až 2015, vyžaduje, aby všetky dekódovacie zariadenia správne fungovali s bitovou rýchlosťou až 512 kbps:

Dekodér SNK musí podporovať všetky možné hodnoty bitovej oblasti, ktoré neprekračujú maximálnu bitovú rýchlosť. Tento profil obmedzuje dostupnú maximálnu bitovú rýchlosť na 320 kb/s pre mono a 512 kb/s pre dvojkanálové režimy.

V novej verzii špecifikácie nie je obmedzenie bitovej rýchlosti. Odhaduje sa, že moderné slúchadlá vydané po roku 2015, ktoré podporujú EDR, môžu podporovať prenosové rýchlosti až ≈730 kbps.

Z nejakého dôvodu majú mnou testované zásobníky Bluetooth (PulseAudio), Android, Blackberry a macOS umelé limity na maximálnu hodnotu parametra bitpool, ktorý priamo ovplyvňuje maximálnu bitovú rýchlosť. To však nie je najväčší problém; takmer všetky slúchadlá tiež obmedzujú maximálnu hodnotu bitpoolu na 53.
Ako som už videl, väčšina zariadení funguje perfektne na upravenom Bluetooth stacku s bitrate 551 kbps, bez prerušenia a praskania. Takáto bitová rýchlosť však nikdy nebude konzistentná za normálnych podmienok na bežných zásobníkoch Bluetooth.

Úprava zásobníka Bluetooth

Každý Bluetooth stack, ktorý je kompatibilný so štandardom A2DP, má podporu pre režim Dual Channel, ale nie je možné ho aktivovať z rozhrania.

Pridajme prepínač do rozhrania! Urobil som záplaty pre Android 8.1 a Android 9, ktoré pridávajú plnú podporu duálneho kanála do zásobníka, pridávajú režim do ponuky prepínania režimu v nástrojoch pre vývojárov a zaobchádzajú s SBC s podporou duálneho kanála, ako keby to bol ďalší kodek ako aptX. , AAC alebo LDAC (Android to nazýva HD Audio) pridaním začiarknutia do nastavení zariadenia Bluetooth. Takto to vyzerá:

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Oprava pre Android 9
Oprava pre Android 8.1

Keď je začiarkavacie políčko aktivované, zvuk Bluetooth sa začne prenášať bitovou rýchlosťou 551 kbps, ak slúchadlá podporujú rýchlosť pripojenia 3 Mbit/s, príp 452 kbps, ak slúchadlá podporujú iba 2 Mbit/s.

Táto oprava je zahrnutá v nasledujúcich alternatívnych firmvéroch:

  • LineageOS
  • Remix vzkriesenia
  • crDroid

Kde sa vzalo 551 a 452 kbit/s?

Technológia zdieľania vzduchu Bluetooth je navrhnutá tak, aby efektívne prenášala veľké pakety pevnej veľkosti. Prenos dát prebieha v slotoch, najväčší počet slotov odoslaných pri jednom prenose je 5. Existujú aj prenosové režimy, ktoré využívajú 1 alebo 3 sloty, ale nie 2 alebo 4. V 5 slotoch môžete preniesť až 679 bajtov rýchlosťou pripojenia 2 Mbit/sa až 1021 bajtov pri rýchlosti 3 Mbit/s, resp. 3 – 367 a 552 bajtov.

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Ak chceme preniesť menej dát ako 679 alebo 1021 bajtov, ale viac ako 367 alebo 552 bajtov, prenos aj tak zaberie 5 slotov a dáta sa prenesú za rovnaký čas, čo znižuje efektivitu prenosu.

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

SBC v režime Dual Channel, pri 44100 Hz zvuku s parametrami Bitpool 38, 16 blokov na snímku, 8 frekvenčných rozsahov, kóduje zvuk do 164 bajtových snímok s bitovou rýchlosťou 452 kbps.
Zvuk musí byť zapuzdrený v prenosových protokoloch L2CAP a AVDTP, ktoré odoberajú 16 bajtov z užitočného obsahu zvuku.

Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Jeden prenos Bluetooth s 5 slotmi teda môže obsahovať 4 zvukové snímky:

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

Do odosielaného paketu sa nám zmestí 11.7 ms audio dát, ktoré sa prenesú za 3.75 ms a v pakete nám ostáva 6 nevyužitých bajtov.
Ak bitpool trochu nadvihnete, už nebude možné zabaliť 4 audiorámčeky do jedného balenia. Budete musieť odoslať 3 snímky naraz, čo znižuje efektivitu prenosu, znižuje množstvo zvuku prenášaného na snímku a rýchlejšie povedie k zaseknutiu zvuku v zlých rádiových podmienkach.

Rovnakým spôsobom bola zvolená bitová rýchlosť 551 kbit/s pre EDR 3 Mbit/s: pri Bitpool 47 16 blokov na snímku, 8 frekvenčných rozsahov, veľkosť snímky je 200 bajtov, s bitovou rýchlosťou 551 kbit/s. Jedno balenie obsahuje 5 snímok alebo 14.6 ms hudby.

Algoritmus na výpočet všetkých parametrov SBC je pomerne zložitý, pri ručnom počítaní sa môžete ľahko zmiasť, preto som vytvoril interaktívnu kalkulačku, ktorá pomôže záujemcom: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Prečo je toto všetko potrebné?

Na rozdiel od všeobecného presvedčenia o kvalite zvuku kodeku aptX môže pri niektorých súboroch dosahovať horšie výsledky ako SBC so štandardnou bitovou rýchlosťou 328 kbps.

SBC dynamicky prideľuje kvantizačné bity frekvenčným pásmam na báze nízkych až vysokých. Ak bola celá bitová rýchlosť použitá pre nízke a stredné frekvencie, vysoké frekvencie budú „odrezané“ (namiesto toho bude ticho).
aptX kvantuje frekvenčné pásma stále rovnakým počtom bitov, a preto má konštantnú bitovú rýchlosť: 352 kbps pre 44.1 kHz, 384 kbps pre 48 kHz a nedokáže „bit-shift“ na tie frekvencie, ktoré ich najviac potrebujú. . Na rozdiel od SBC, aptX nebude „rezať“ frekvencie, ale pridá k nim kvantizačný šum, čím zníži dynamický rozsah zvuku a niekedy zavedie charakteristické praskanie. SBC „požíva detaily“ – vyraďuje najtichšie oblasti.
V priemere v porovnaní s SBC 328k aptX prináša menšie skreslenie v hudbe so širokým frekvenčným rozsahom, ale v hudbe s úzkym frekvenčným rozsahom a širokým dynamickým rozsahom niekedy vyhráva SBC 328k.

Uvažujme o špeciálnom prípade. Spektrogram nahrávky klavírnej hry:
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Hlavná energia leží vo frekvenciách od 0 do 4 kHz a pokračuje až do 10 kHz.
Spektrogram súboru komprimovaného v aptX vyzerá takto:
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

A takto vyzerá SBC 328k.
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Je možné vidieť, že SBC 328k pravidelne úplne vypínal rozsah nad 16 kHz a všetok dostupný bitový tok spotreboval na rozsahy pod touto hodnotou. Avšak aptX zaviedol väčšie skreslenie do frekvenčného spektra počuteľného ľudským uchom, ako je možné vidieť na odčítanom pôvodnom spektrograme od spektrogramu aptX (čím jasnejšie, tým väčšie skreslenie):
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Zatiaľ čo SBC 328k pokazil signál menej v rozsahu od 0 do 10 kHz a zvyšok prerušil:
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Bitová rýchlosť 485 k SBC stačila na zachovanie celého frekvenčného rozsahu bez zakázania pásiem.
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

SBC 485k je výrazne pred aptX na tejto stope v rozsahu 0-15 kHz, s menším, ale stále viditeľným rozdielom 15-22 kHz (čím tmavšie, tým menšie skreslenie):
Upravili sme zásobník Bluetooth, aby sme zlepšili zvuk na slúchadlách bez kodekov AAC, aptX a LDAC

Archív pôvodného zvuku, SBC a aptX.

Prepnutím na SBC s vysokou bitovou rýchlosťou získate zvuk, ktorý často prekoná aptX na akomkoľvek slúchadle. Na slúchadlách, ktoré podporujú pripojenie 3 Mbps EDR, bitová rýchlosť 551 kbps vytvára zvuk porovnateľný s aptX HD.

Dokážete ešte viac?

Oprava pre Android obsahuje aj možnosť ďalšieho zvýšenia bitovej rýchlosti pre zariadenia EDR s rýchlosťou 2 Mbps. Môžete zvýšiť bitrate zo 452 kbit/s na 595 kbit/s, za cenu zníženia stability prenosu v náročných rádiových podmienkach.
Premennú persist.bluetooth.sbc_hd_higher_bitrate stačí nastaviť na 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Oprava extrémnej bitovej rýchlosti bola doteraz prijatá iba v LineageOS 15.1, ale nie v 16.0.

Kompatibilita zariadenia

SBC Dual Channel podporujú takmer všetky slúchadlá, reproduktory a hlavné jednotky auta. Niet sa čomu čudovať – štandard vyžaduje jeho podporu v akýchkoľvek dekódovacích zariadeniach. Existuje malý počet zariadení, na ktorých tento režim spôsobuje problémy, ale ide o izolované prípady.
Viac podrobností o kompatibilných zariadeniach nájdete na W4bsitXNUMX-dns.com alebo XDA-vývojári.

Porovnanie rozdielov zvuku

Vytvoril som webovú službu, ktorá kóduje zvuk do SBC (ako aj aptX a aptX HD) v reálnom čase priamo v prehliadači. S ním môžete porovnávať zvuk rôznych profilov SBC a iných kodekov bez toho, aby ste skutočne prenášali zvuk cez Bluetooth, na akýchkoľvek káblových slúchadlách, reproduktoroch a obľúbenej hudbe, a tiež meniť parametre kódovania priamo počas prehrávania zvuku.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaktujte vývojárov systému Android

Napísal som mnohým vývojárom Bluetooth stacku v Google a požiadal som ich, aby zvážili zahrnutie opráv do hlavnej vetvy Androidu – AOSP, ale nedostal som jedinú odpoveď. Moje náplasti v Opravný systém Gerrit pre Android tiež zostalo bez komentára od kohokoľvek zainteresovaného.
Bol by som rád, keby som mohol získať nejakú pomoc pri kontakte s vývojármi v Google a uvedení SBC HD do Androidu. Oprava v gerrite je už zastaraná (toto je jedna z prvých revízií) a ak budú mať vývojári záujem o moje zmeny, aktualizujem ju (nie je pre mňa ľahké ju aktualizovať, nemám zariadenia kompatibilné s Androidom Q ).

Záver

Používatelia smartfónov s LineageOS, Resurrection Remix a firmvérom crDroid si už teraz môžu vychutnať vylepšenú kvalitu zvuku, stačí aktivovať možnosť v nastaveniach zariadenia Bluetooth. Používatelia Linuxu môžu tiež získať zvýšenú bitovú rýchlosť SBC inštaláciou náplasť od Paliho Rohara, ktorý okrem iného pridáva podporu kodekov aptX, aptX HD a FastStream.

Zdroj: hab.com

Pridať komentár