Navody

Prava zásobníku Bluetooth pro zlepšení zvuku ve sluchátkách bez kodeků AAC, aptX a LDAC / Habr

Někteří uživatelé bezdrátových sluchátek hlásí špatnou kvalitu zvuku a nedostatek vysokých frekvencí při použití standardního kodeku Bluetooth SBC, který podporují všechna zvuková zařízení. Častým doporučením pro zlepšení zvuku je nákup zařízení a sluchátek s podporou kodeků aptX a LDAC. Tyto kodeky vyžadují licenční poplatky, takže zařízení, která je podporují, jsou dražší.

Ukazuje se, že nízká kvalita SBC je způsobena umělým omezením Bluetooth stacků a nastavení sluchátek a toto omezení lze obejít na jakémkoli existujícím zařízení softwarovými změnami smartphonu nebo počítače.

Kodek SBC

Kodek SBC má mnoho různých parametrů, které se vyjednávají během fáze nastavování připojení. Mezi nimi:

  • Počet a typ kanálů: Joint Stereo, Stereo, Dual Channel, Mono;
  • Počet frekvenčních pásem: 4 nebo 8;
  • Počet bloků v balení: 4, 8, 12, 16;
  • Algoritmus pro distribuci bitů během kvantizace: Loudness, SNR;
  • Maximální a minimální hodnota skupiny bitů použitých při kvantizaci (bitpool): obvykle od 2 do 53.

Dekódovací zařízení musí podporovat jakoukoli kombinaci těchto parametrů. Kodér nemusí implementovat vše.
Stávající sady Bluetooth se obvykle shodují na následujícím profilu: Joint Stereo, 8 pásem, 16 bloků, Loudness, bitpool 2..53. Tento profil kóduje zvuk 44.1 kHz při datovém toku 328 kbps.
Parametr bitpool přímo ovlivňuje datový tok v rámci jednoho profilu: čím vyšší je, tím vyšší je datový tok a tím i kvalita.
Parametr bitpool však není vázán na konkrétní profil; Přenosová rychlost je také do značné míry ovlivněna dalšími parametry: typem kanálů, počtem frekvenčních pásem, počtem bloků. Datový tok můžete zvýšit nepřímo, odsouhlasením nestandardních profilů, bez změny bitpoolu.

Vzorec pro výpočet bitrate SBC

Například režim Dual Channel kóduje kanály samostatně, přičemž pro každý kanál využívá celý bitpool. Tím, že zařízení přinutíme používat Dual Channel místo Joint Stereo, získáme téměř dvojnásobný datový tok se stejnou maximální hodnotou bitpoolu: 617 kbps.
Podle mého názoru je použití neprofilové bitpoolové hodnoty ve fázi vyjednávání chybou standardu A2DP, která vedla k umělému omezení kvality SBC. Bylo by moudřejší vyjednat bitrate, ne bitpool.

Tyto pevné hodnoty Bitpool a Bitrate pocházejí z tabulky doporučených hodnot pro vysoce kvalitní zvuk. Ale doporučení není důvodem k tomu, abyste se omezovali na tyto hodnoty.

Specifikace A2DP v1.2, která byla aktivní v letech 2007 až 2015, vyžaduje, aby všechna dekódovací zařízení fungovala správně s datovými toky až 512 kbps:

Dekodér SNK musí podporovat všechny možné hodnoty bitového fondu, které nevedou k překročení maximální bitové rychlosti. Tento profil omezuje dostupnou maximální přenosovou rychlost na 320 kb/s pro mono a 512 kb/s pro dvoukanálové režimy.

V nové verzi specifikace není žádný limit datového toku. Předpokládá se, že moderní sluchátka vydaná po roce 2015 a podporující EDR mohou podporovat přenosové rychlosti až ≈730 kbps.

Přečtěte si více
Rýma u koček: jak léčit, příznaky, příčiny

Z nějakého důvodu mají mnou testované zásobníky Bluetooth pro Linux (PulseAudio), Android, Blackberry a macOS umělé limity maximální hodnoty parametru bitpool, který přímo ovlivňuje maximální bitrate. To ale není největší problém, téměř všechna sluchátka také omezují maximální bitpool hodnotu na 53.
Jak jsem již viděl, většina zařízení funguje perfektně na upraveném Bluetooth stacku s datovým tokem 551 kbps, bez přerušení a praskání. Ale takový datový tok nebude nikdy konzistentní za normálních podmínek, na běžných Bluetooth stackech.

Úprava zásobníku Bluetooth

V každém Bluetooth stacku, který je kompatibilní se standardem A2DP, existuje podpora pro režim Dual Channel, ale není možné ji aktivovat z rozhraní.

Pojďme přidat přepínač do rozhraní! Vytvořil jsem záplaty pro Android 8.1 a Android 9, které do zásobníku přidávají plnou podporu Dual Channel, přidávají režim do nabídky přepínání režimů ve vývojářských nástrojích a zacházejí s SBC s podporou Dual Channel, jako by to byl další kodek jako aptX, AAC. nebo LDAC (Android tomu říká HD Audio) přidáním zaškrtnutí do nastavení Bluetooth zařízení. Vypadá to takto:

Když je zaškrtávací políčko aktivováno, zvuk Bluetooth se začne přenášet bitovou rychlostí 551 kbps, pokud sluchátka podporují rychlost připojení 3 Mbit/s, popř 452 kbps, pokud sluchátka podporují pouze 2 Mbit/s.

Kde se vzalo 551 a 452 kbit/s?

Technologie air-splitting v Bluetooth je navržena tak, aby efektivně přenášela velké pakety pevné velikosti. Přenos dat probíhá ve slotech, největší počet slotů odeslaných při jednom přenosu je 5. Existují také přenosové režimy, které využívají 1 nebo 3 sloty, ale ne 2 nebo 4. V 5 slotech lze přenést až 679 bajtů rychlostí připojení 2 Mbps a až 1021 bajtů při rychlosti 3 Mbps, respektive 3 – 367 a 552 bajtů.

Pokud chceme přenést méně dat než 679 nebo 1021 bajtů, ale více než 367 nebo 552 bajtů, bude přenos stále trvat 5 slotů a data budou přenesena za stejnou dobu, což snižuje efektivitu přenosu.

SBC v režimu Dual Channel, při 44100 Hz zvuku s parametry Bitpool 38, 16 bloků na snímek, 8 frekvenčních rozsahů, kóduje zvuk do 164 bajtových snímků s bitovou rychlostí 452 kbps.
Zvuk musí být zapouzdřen v přenosových protokolech L2CAP a AVDTP, které odebírají 16 bajtů z užitečného obsahu zvuku.

V jednom přenosu Bluetooth s 5 sloty je tedy možné osadit 4 zvukové rámce:

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

Do odesílaného paketu vměstnáme 11.7 ms audio dat, která se přenesou za 3.75 ms a v paketu nám zbývá 6 nevyužitých bajtů.
Pokud bitpool trochu zvednete, nebude již možné zabalit 4 audiorámce do jednoho balíčku. Budete muset posílat 3 snímky najednou, což snižuje efektivitu přenosu, snižuje množství zvuku přenášeného na snímek a rychleji vede k zasekávání zvuku ve špatných rádiových podmínkách.

Stejně tak byl zvolen datový tok 551 kbps pro EDR 3 Mbps: s Bitpool 47, 16 bloků na snímek, 8 frekvenčních pásem, je získána velikost rámce 200 bajtů s bitovou rychlostí 551 kbps. Jedno balení obsahuje 5 snímků nebo 14.6 ms hudby.

Přečtěte si více
Catozal pro psy: indikace a návod k použití, recenze, cena

Algoritmus pro výpočet všech parametrů SBC je poměrně složitý, můžete se snadno zmást, pokud počítáte ručně, proto jsem vytvořil interaktivní kalkulačku, která pomůže zájemcům: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Proč je to všechno nutné?

Na rozdíl od všeobecného přesvědčení o kvalitě zvuku kodeku aptX může u některých souborů poskytovat horší výsledky než SBC se standardní bitovou rychlostí 328 kbps.

SBC dynamicky přiděluje kvantizační bity do frekvenčních pásem způsobem zdola nahoru. Pokud byl celý datový tok použit pro spodní a střední frekvence, budou horní frekvence „odříznuty“ (místo toho bude ticho).
aptX kvantuje frekvenční pásma stále stejným počtem bitů, a proto má konstantní datový tok: 352 kbps pro 44.1 kHz, 384 kbps pro 48 kHz a neumí „bit-shift“ na ty frekvence, které je nejvíce potřebují. . Na rozdíl od SBC nebude aptX „ořezávat“ frekvence, ale přidá k nim kvantizační šum, čímž sníží dynamický rozsah zvuku a někdy zavede charakteristické praskání. SBC „žere detaily“ – vyřadí nejtišší oblasti.
V průměru ve srovnání s SBC 328k přináší aptX menší zkreslení u hudby s širokým rozsahem, ale u hudby s úzkým rozsahem a vysokým dynamickým rozsahem SBC 328k někdy vyhrává.

Podívejme se na zvláštní případ. Spektrogram klavírní nahrávky:

Hlavní energie leží ve frekvencích od 0 do 4 kHz a pokračuje až do 10 kHz.
Spektrogram souboru komprimovaného v aptX vypadá takto:

A takto vypadá SBC 328k.

Je vidět, že SBC 328k periodicky úplně vypínal rozsah nad 16 kHz a utratil veškerý dostupný datový tok na rozsahy pod touto hodnotou. Nicméně aptX zavedlo větší zkreslení do frekvenčního spektra slyšitelného lidským uchem, jak lze vidět na odečteném původním spektrogramu od spektrogramu aptX (čím jasnější, tím větší zkreslení):

Zatímco SBC 328k kazil signál méně v rozsahu od 0 do 10 kHz a zbytek odřízl:

485k bitrate SBC stačilo k zachování celého frekvenčního rozsahu, bez deaktivace pásem.

SBC 485k je na této stopě výrazně před aptX v rozsahu 0-15 kHz, s menším, ale stále znatelným rozdílem 15-22 kHz (čím tmavší, tím menší zkreslení):

Přepnutím na SBC s vysokým datovým tokem získáte zvuk, který často překonává aptX na jakýchkoli sluchátkách. Na sluchátkách, která podporují konektivitu 3 Mb/s EDR, poskytuje přenosová rychlost 551 kb/s zvuk srovnatelný s aptX HD.

Dokážete ještě víc?

Oprava pro Android také obsahuje možnost dalšího zvýšení bitrate pro 2 Mbps EDR zařízení. Můžete zvýšit bitrate ze 452 kbit/s na 595 kbit/s, za cenu snížení stability přenosu v obtížných rádiových podmínkách.
Proměnnou persist.bluetooth.sbc_hd_higher_bitrate stačí nastavit na 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Oprava pro extrémní datový tok je akceptována pouze v LineageOS 15.1, ale ne v 16.0.

Kompatibilita zařízení

SBC Dual Channel podporují téměř všechna sluchátka, reproduktory a hlavní jednotky automobilu. Není se čemu divit – standard vyžaduje jeho podporu v jakýchkoli dekódovacích zařízeních. Existuje malý počet zařízení, na kterých tento režim způsobuje problémy, ale jedná se o izolované případy.
Podrobnější informace o kompatibilních zařízeních naleznete na 4pda nebo xda-developers.

Přečtěte si více
Sazenice rajčat padají a vadnou u kořene, doma na parapetu, důvody, co dělat

Porovnání zvukových rozdílů

Vytvořil jsem webovou službu, která kóduje zvuk do SBC (stejně jako aptX a aptX HD) v reálném čase, přímo v prohlížeči. S ním můžete porovnávat zvuk různých profilů SBC a dalších kodeků, aniž byste skutečně přenášeli zvuk přes Bluetooth, na jakýchkoli kabelových sluchátkách, reproduktorech a své oblíbené hudbě a také měnit parametry kódování přímo při přehrávání zvuku.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaktujte vývojáře Android

Psal jsem mnoha vývojářům Bluetooth stacku od společnosti Google a požádal je, aby zvážili zahrnutí oprav do hlavní větve Androidu – AOSP, ale nedostal jsem jedinou odpověď. Moje záplaty v systému správy záplat Gerrit pro Android také zůstaly bez komentáře nikým zúčastněným.
Byl bych rád, kdybych mohl získat nějakou pomoc, jak se spojit s vývojáři v Google a přinést SBC HD do Androidu. Záplata v gerritu je již zastaralá (jedná se o jednu z prvních revizí) a pokud budou mít vývojáři zájem o mé změny, aktualizuji ji (není pro mě snadné ji aktualizovat, nemám zařízení kompatibilní s Android Q ).

Závěr

Uživatelé chytrých telefonů s LineageOS, Resurrection Remix a firmwarem crDroid si mohou vychutnat vylepšenou kvalitu zvuku právě teď, stačí aktivovat možnost v nastavení zařízení Bluetooth. Uživatelé Linuxu mohou také získat vyšší bitrate SBC instalací opravy od Paliho Rohára, která mimo jiné přidává podporu kodeků aptX, aptX HD a FastStream.

  • Bezdrátová technologie
  • znít
  • Android

Proč se snažit zlepšit kvalitu Bluetooth?
Kvalita reprodukce zvuku přes Bluetooth na automobilových handsfree systémech značně zaostává za podobným kabelovým připojením z flash disku, iPodu atd. Přitom v drtivé většině případů nemají hlavové jednotky do auta mixpult, to znamená, že zvuk lze reprodukovat pouze z jednoho zdroje. Pokud používáte navigátor na smartphonu v městských dopravních zácpách, můžete zapomenout na kvalitní přehrávání hudby, protože zdroj Bluetooth je vybrán na hlavní jednotce (a jiné zdroje nejsou k dispozici) a hudba přes A2DP ze smartphonu má výrazně horší kvalitu ve srovnání s jakýmkoli jiným zdrojem. Tento článek bude o tom, jak situaci napravit.

Hands-Free Tool Honda (dále jen Honda HFT) byl standardně instalován na všechna vozidla Honda CR-V 4. generace (před restylingem), kromě úrovně výbavy Elegance 2.0. K uskutečňování a přijímání hovorů slouží další sada tlačítek na levé spodní straně volantu. Samotné zařízení je vyrobeno jako samostatná jednotka, propojená se standardním audio systémem vyhrazeným kabelem a má externí mikrofon. Umožňuje přenášet signály přes sběrnici GA-Net a může také přenášet přijímaný dvoukanálový audio stream do hlavní jednotky. Výrobcem tohoto zařízení je známý výrobce elektronických autokomponentů – Visteon Corporation.

Jaké příležitosti nám Honda HFT nabízí?
Honda HFT je rádiový vysílač Bluetooth 2.1 + EDR.
Verze Bluetooth je upřímně stará. Výrobce ale zjevně sází v první řadě na spolehlivost a až za druhé na podporu nových standardů. Ale jako výrobce BT čipu máme Qualcomm Technologies International, Ltd, což je velmi dobré. Tyto čipy jsou velmi spolehlivé, dobře splňují uvedené normy a jsou energeticky účinné (vytvářejí málo tepla).

Přečtěte si více
Petržel na zimu: recepty na přípravu, skladování a možnosti použití.

Z dostupných kodeků pro přenos zvuku přes Bluetooth pomocí protokolu A2DP je pouze jeden: kodek SBC. V této verzi zařízení umožňuje použití následujících parametrů audio streamu: (16000, 32000, 44100, 48000 | Mono, Dual Channel, Stereo, Joint Stereo | blok: 4, 8, 12, 16 | subpásma: 4, 8 | přidělení: SNR, Loudness. | 2.115 bitů). Obecně se jedná o téměř standardní parametry, které nabízí většina audio zařízení (sluchátek). Zde je důležité, že zařízení podporuje rozšířený bitpool až na 115, což umožňuje výrazné zvýšení šířky pásma signálu ve srovnání se standardním bitpoolem 53.

Druhý důležitý bod: zařízení umožňuje obsluhu pomocí tzv vysokorychlostní přenos dat: Enhanced Data Rate (EDR). Většina moderních spotřebitelských sluchátek Bluetooth 4.xa 5.0 již dlouho podporuje EDR a smartphone standardně používá EDR při 2 Mbit/s a 3 Mbit/s, ale pro zařízení Bluetooth 2.1 je schopnost přenášet data rychlostí 2 Mbit/s pakety EDR velkým úspěchem a pro nás velkým úspěchem.

Proč se kvalita přehrávání zvuku přes Bluetooth tak liší od kvality přehrávání jiných zařízení?
Bohužel i přes to, že zařízení podporuje EDR, se moderní smartphone při pohledu na verzi Bluetooth 2.1 rozhodne pro kódování v horší kvalitě, jako u zařízení, která EDR nepodporují. Proč to dělá? Pravděpodobně existuje velké množství zařízení, která nominálně tvrdí, že mají Bluetooth 2.x s EDR, ale ve skutečnosti EDR nemají. A pro jistotu zachází se všemi zařízeními Bluetooth 2.x jako se zařízeními bez EDR.

Bitpool je tedy nucen snížit na 35 a skutečně jsou použity následující parametry: Střední kvalita, 44.1 kHz, Joint Stereo, 229 kbps. Pokud předpokládáme, že pomocí řekněme iPodu se zvuk na hlavní jednotce přehraje beze ztrát, tak přes Bluetooth bude přehráván v kvalitě SBC 229 kbps, což lze zhruba přirovnat k MP3 160-192 kbps.

Parametry kodeku SBC na smartphonu obsahují dvě konstanty, které určují maximální šířku pásma pro zařízení, která podporují EDR, a pro zařízení, která nepodporují: 328 kb/s a 229 kb/s. Pomocí těchto konstant se vypočítá bitpool, který pro Joint Stereo a 44,1 kHz bude 35, respektive 53.

Jaké změny byly provedeny v kodeku SBC v telefonu?
Zvýšil jsem hodnotu dostupné šířky pásma až 452 kbps pro zařízení EDR i non-EDR. To nám umožnilo zvýšit bitpool v tomto konkrétním případě na 75 a využívat skutečnou šířku pásma 449,3 kbps, tzn. 2x více než původní bitrate, což lze zhruba srovnat s Kvalita MP3 přes 320 kbps. Je důležité, aby přenos dat přes Bluetooth probíhal pomocí EDR (nehledě na to, že kodek rozhodl, že EDR se nepoužívá), takže tuto šířku pásma naše Honda HFT perfektně přijímá v normálním režimu a bez prodlev. Tato změna je bezpečná ze dvou důvodů:
1. Všechna moderní sluchátka omezují bitpool na 53 jednotek, tato změna se tedy nedotkne všech ostatních připojení, rychlost bude stále nastavena na 328 kbps. Pokud sluchátka podporují rozšířený bitpool, pak to pouze prospěje kvalitě přehrávání stejným způsobem jako u Honda HFT.
2. Pravděpodobnost použití zařízení, která opravdu nepodporují EDR s tak vysokým bitratem, je extrémně nízká, protože Všechna moderní sluchátka mají Bluetooth verze 4.xa 5.0 a standardně podporují EDR.

Přečtěte si více
Schéma zapojení vodičů pe a n k peru (oddělení pera od vodiče)

Psychoakusticky (tj. sluchově) se obsah reprodukovaný rychlostí 449 kbps neliší od nekomprimovaného originálu. Můžete si to ověřit pomocí webové stránky vytvořené ValdikSS. Chcete-li to provést, musíte nastavit následující 3 možnosti přehrávání: původní soubor, normální výchozí zvuk a vylepšená možnost – v souladu s nastavením zobrazeným na snímku obrazovky si stáhněte jakýkoli hudební soubor, který znáte, a poslouchejte, jak se bude přehrávat, přičemž přepínejte mezi 3 možnostmi nastavení. Pokud uslyšíte rozdíl, pak pro vás má modifikace smysl.

O tom, jak byla upravena standardní knihovna Bluetooth na smartphonu na 4pda, jsem podrobně psal zde. Požadováno pro revizi vyžadován root přístup k zařízení a přístup k nastavení vývojáře pro odstranění protokolu Bluetooth HCI. Ti, kteří chtějí jít cestou sami, budou muset ovládat IDA disassembler a nástroj pro čtení logu Wireshark. Není to moc těžké. Celé studium nástrojů, analýza logů a výroba záplaty mi zabraly celkem 5 dní. Vzhledem k vyšlapané cestě a podrobnému popisu lze změny provést během několika hodin.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button