Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

A cikk elolvasása előtt javasoljuk, hogy olvassa el az előző cikket: Hang Bluetooth-on keresztül: maximális részletek a profilokról, kodekekről és eszközökről

Egyes vezeték nélküli fejhallgató-felhasználók rossz hangminőségről és magas frekvenciák hiányáról számolnak be, amikor a szabványos SBC Bluetooth kodeket használják, amelyet minden audioeszköz támogat. A hangzás javítására általános javaslat az aptX és LDAC kodekeket támogató eszközök és fejhallgatók vásárlása. Ezek a kodekek licencdíjat igényelnek, így az őket támogató eszközök drágábbak.

Kiderült, hogy az SBC gyenge minősége a Bluetooth-stackek és a fejhallgató-beállítások mesterséges korlátozásának tudható be, és ez a korlátozás bármely meglévő eszközön megkerülhető okostelefonon vagy számítógépen végrehajtott szoftveres változtatásokkal.

Codec SBC

Az SBC kodek számos különböző paraméterrel rendelkezik, amelyeket a kapcsolat beállítási fázisában egyeztetnek. Közöttük:

  • Csatornák száma és típusa: Joint Stereo, Stereo, Dual Channel, Mono;
  • Frekvenciasávok száma: 4 vagy 8;
  • Blokkok száma a csomagban: 4, 8, 12, 16;
  • A bitek kvantálás közbeni elosztásának algoritmusa: Hangosság, SNR;
  • A kvantálás során használt bitkészlet (bitpool) maximális és minimális értéke: általában 2 és 53 között.

A dekódoló eszköznek támogatnia kell e paraméterek bármely kombinációját. Előfordulhat, hogy a kódoló nem valósít meg mindent.
A meglévő Bluetooth-veremek általában megegyeznek a következő profillal: Közös sztereó, 8 sáv, 16 blokk, Hangosság, bitpool 2...53. Ez a profil 44.1 kHz-es hangot kódol 328 kbps bitsebességgel.
A bitpool paraméter közvetlenül befolyásolja a bitrátát egy profilon belül: minél nagyobb, annál magasabb a bitráta, és ezáltal a minőség is.
A bitpool paraméter azonban nincs egy adott profilhoz kötve; A bitrátát más paraméterek is nagymértékben befolyásolják: csatornák típusa, frekvenciasávok száma, blokkok száma. A bitrátát közvetetten növelheti, nem szabványos profilok megegyezésével, a bitpool megváltoztatása nélkül.

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Képlet az SBC bitráta kiszámításához

Például a Dual Channel mód külön kódolja a csatornákat, minden csatornához a teljes bitpoolt felhasználva. Ha a készüléket a Joint Stereo helyett Dual Channel használatára kényszerítjük, akkor ugyanazzal a maximális bitpool értékkel csaknem kétszeres bitrátát kapunk: 617 kbps.
Véleményem szerint a tárgyalási szakaszban a profilhoz nem kötött bitpool érték használata az A2DP szabvány hibája, ami az SBC minőség mesterséges korlátozásához vezetett. Ésszerűbb lenne a bitrátával tárgyalni a bitpool helyett.

Ezek a rögzített Bitpool és Bitrate értékek egy táblázatból származnak, amely a kiváló minőségű hanghoz ajánlott értékeket tartalmazza. De egy ajánlás nem ok arra, hogy ezekre az értékekre korlátozza magát.

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Az A2DP v1.2 specifikáció, amely 2007 és 2015 között volt aktív, megköveteli, hogy minden dekódoló eszköz megfelelően működjön 512 kbps-ig:

Az SNK dekódolójának támogatnia kell minden olyan lehetséges bitpool értéket, amely nem eredményezi a maximális bitsebességet. Ez a profil a rendelkezésre álló maximális bitsebességet 320 kb/s-ra korlátozza mono és 512 kb/s-ra kétcsatornás módban.

A specifikáció új verziójában nincs korlátozás a bitrátára. A becslések szerint a 2015 után kiadott modern fejhallgatók, amelyek támogatják az EDR-t, akár ≈730 kbps bitsebességet is támogathatnak.

Valamiért az általam tesztelt Linux (PulseAudio), Android, Blackberry és macOS Bluetooth stackek mesterségesen korlátozzák a bitpool paraméter maximális értékét, ami közvetlenül befolyásolja a maximális bitrátát. De nem ez a legnagyobb probléma, szinte minden fejhallgató korlátozza a maximális bitpool-értéket 53-ra.
Ahogy már láttam, a legtöbb eszköz tökéletesen működik módosított Bluetooth-veremen, 551 kbps bitsebességgel, megszakítások és recsegések nélkül. De egy ilyen bitsebesség normál körülmények között, normál Bluetooth-veremeken soha nem lesz állandó.

A Bluetooth-verem módosítása

Az A2DP szabvánnyal kompatibilis Bluetooth-verem támogatja a Dual Channel módot, de az interfészről nem aktiválható.

Adjunk hozzá egy kapcsolót a felülethez! Javításokat készítettem az Android 8.1-hez és Android 9-hez, amelyek teljes Dual Channel támogatást adnak a veremhez, módot adnak a fejlesztői eszközök módváltó menüjéhez, és úgy kezelik a Dual Channel-kompatibilis SBC-ket, mintha egy további kodek lennének, mint például az aptX. , AAC vagy LDAC (az Android ezt HD Audionak nevezi), ha pipát ad a Bluetooth-eszköz beállításaihoz. Így néz ki:

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Javítás Android 9-hez
Javítás Android 8.1-hez

Ha a jelölőnégyzet be van kapcsolva, a Bluetooth audio bitsebességgel kerül továbbításra 551 kbps, ha a fejhallgató támogatja a 3 Mbit/s csatlakozási sebességet, ill 452 kbps, ha a fejhallgató csak 2 Mbit/s sebességet támogat.

Ez a javítás a következő alternatív firmware-ekben található:

  • LineageOS
  • Feltámadás remix
  • crDroid

Honnan jött az 551 és 452 kbit/s?

A Bluetooth légmegosztó technológiát nagy, rögzített méretű csomagok hatékony továbbítására tervezték. Az adatátvitel slotokban történik, egy átvitel során a legtöbb kártyahely 5. Vannak olyan átviteli módok is, amelyek 1 vagy 3 slotot használnak, de nem 2 vagy 4-et. 5 slotban akár 679 bájtot is átvihet egy kapcsolati sebességgel 2 Mbit/s és legfeljebb 1021 bájt 3 Mbit/s sebességgel, illetve 3 - 367 és 552 bájt.

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Ha 679 vagy 1021 bájtnál kevesebb adatot szeretnénk átvinni, de 367 vagy 552 bájtnál többet, akkor is 5 slotot vesz igénybe az átvitel, és az adatok átvitele ugyanannyi idő alatt történik, ami csökkenti az átvitel hatékonyságát.

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

SBC Dual Channel módban, 44100 Hz-es audióval, Bitpool 38 paraméterrel, 16 blokkkal képkockánként, 8 frekvenciatartományban, 164 bájtos keretekbe kódolja a hangot, 452 kbps bitsűrűséggel.
A hangot L2CAP és AVDTP átviteli protokollokba kell beágyazni, amelyek 16 bájtot vesznek el az audio hasznos terhelésből.

Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Így egy 5 slottal rendelkező Bluetooth átvitel 4 hangkockát képes befogadni:

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

A küldendő csomagba 11.7 ms audio adatot illesztünk, ami 3.75 ms alatt kerül átvitelre, és a csomagban 6 fel nem használt bájt maradt.
Ha kicsit megemeli a bitpoolt, többé nem lehet 4 hangkockát egy csomagba csomagolni. Egyszerre 3 képkockát kell küldenie, ami csökkenti az átvitel hatékonyságát, csökkenti a képkockánként továbbított hang mennyiségét, és gyorsabban vezet a hang akadozásához rossz rádióviszonyok mellett.

Ugyanígy 551 kbit/s bitsebességet választottak az EDR 3 Mbit/s-hoz: Bitpool 47-nél 16 blokk keretenként, 8 frekvenciatartomány, a keret mérete 200 bájt, 551 kbit/s bitsebességgel. Egy csomag 5 képkockát vagy 14.6 ms zenét tartalmaz.

Az összes SBC paraméter kiszámításának algoritmusa meglehetősen bonyolult, könnyen összezavarodhat, ha manuálisan számol, ezért készítettem egy interaktív számológépet az érdeklődők segítségére: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Miért van szükség minderre?

Ellentétben az aptX kodek hangminőségével kapcsolatos közhiedelemmel, egyes fájlok esetében rosszabb eredményeket produkál, mint az SBC szabványos 328 kbps bitsebességgel.

Az SBC dinamikusan allokálja a kvantálási biteket a frekvenciasávokhoz az alacsonytól a magasig. Ha az összes bitrátát az alacsony és középső frekvenciákhoz használtuk, a magas frekvenciák „levágódnak” (ehelyett csend lesz).
Az aptX állandóan ugyanannyi bittel kvantálja a frekvenciasávokat, ezért állandó bitrátája van: 352 kbps 44.1 kHz esetén, 384 kbps 48 kHz esetén, és nem tud „biteltolódni” azokra a frekvenciákra, amelyeknek a legnagyobb szüksége van rájuk. . Az SBC-vel ellentétben az aptX nem „levágja” a frekvenciákat, hanem kvantálási zajt ad hozzájuk, csökkentve a hang dinamikatartományát, és néha jellegzetes recsegést is bevezethet. Az SBC „megeszi a részleteket” – eldobja a legcsendesebb területeket.
Átlagosan az SBC 328k-hoz képest az aptX kevesebb torzítást okoz a széles frekvenciatartományú zenében, de a szűk frekvenciatartományú és széles dinamikatartománnyal rendelkező zenékben néha az SBC 328k nyer.

Vegyünk egy speciális esetet. Egy zongorajátékos felvétel spektrogramja:
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

A fő energia a 0 és 4 kHz közötti frekvenciákban rejlik, és 10 kHz-ig folytatódik.
Az aptX-ben tömörített fájl spektrogramja így néz ki:
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

És így néz ki az SBC 328k.
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Látható, hogy az SBC 328k időnként teljesen kikapcsolta a 16 kHz feletti tartományt, és az összes elérhető bitrátát az alatti tartományokon költötte. Az aptX azonban több torzítást vezetett be az emberi fül által hallható frekvenciaspektrumban, amint az az aptX spektrogramból kivont eredeti spektrogramon is látható (minél fényesebb, annál nagyobb a torzítás):
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Míg az SBC 328k kevésbé rontotta el a jelet a 0 és 10 kHz közötti tartományban, és levágta a többit:
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Az SBC 485 ezer bitsebessége elegendő volt a teljes frekvenciatartomány megőrzéséhez, a sávok letiltása nélkül.
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Az SBC 485k jelentősen megelőzi az aptX-et ezen a sávon a 0-15 kHz-es tartományban, kisebb, de még mindig észrevehető, 15-22 kHz-es különbséggel (minél sötétebb, annál kisebb a torzítás):
Módosítottuk a Bluetooth-vermet, hogy javítsuk a hangzást az AAC, aptX és LDAC kodekek nélküli fejhallgatókon

Az eredeti hang, SBC és aptX archívuma.

Ha nagy bitsebességű SBC-re vált, olyan hangot kap, amely gyakran felülmúlja az aptX-et bármely fejhallgatón. A 3 Mbps-os EDR-csatlakozást támogató fejhallgatókon az 551 kbps bitsebesség az aptX HD-éhoz hasonló hangzást biztosít.

Tudsz még többet tenni?

Az Android javítás tartalmaz egy lehetőséget a 2 Mbps-os EDR-eszközök bitsebességének további növelésére is. A bitrátát 452 kbit/s-ról 595 kbit/s-ra növelheti, az átviteli stabilitás csökkentése árán nehéz rádiós körülmények között.
Elég a persist.bluetooth.sbc_hd_higher_bitrate változót 1-re állítani:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Az extrém bitsebességű javítást eddig csak a LineageOS 15.1-ben alkalmazták, a 16.0-ban viszont nem.

Eszköz kompatibilitás

Az SBC Dual Channel szinte minden fejhallgató, hangszóró és autós fejegység támogatja. Ez nem csoda - a szabvány megköveteli a támogatást minden dekódoló eszközben. Néhány eszközön ez a mód problémákat okoz, de ezek elszigetelt példányok.
További részletek a kompatibilis eszközökről a címen találhatók 4pda vagy xda-fejlesztők.

Hangkülönbségek összehasonlítása

Készítettem egy webszolgáltatást, amely a hangot SBC-be (valamint aptX-be és aptX HD-be) kódolja valós időben, közvetlenül a böngészőben. Ezzel összehasonlíthatja a különböző SBC-profilok és más kodekek hangját anélkül, hogy ténylegesen Bluetooth-on keresztül továbbítaná a hangot, bármilyen vezetékes fejhallgatón, hangszórón és kedvenc zenéjén, valamint közvetlenül módosíthatja a kódolási paramétereket hang lejátszása közben.
btcodecs.valdikss.org.ru/sbc-encoder

Lépjen kapcsolatba az Android fejlesztőkkel

Írtam sok Bluetooth-veremfejlesztőnek a Google-nál, és arra kértem őket, hogy fontolják meg a javítások beillesztését az Android fő ágába – az AOSP-be, de egyetlen választ sem kaptam. A foltjaim be vannak Gerrit patch rendszer Androidra szintén az érintettek megjegyzése nélkül maradt.
Örülnék, ha segítséget kapnék a Google fejlesztőivel való kapcsolatfelvételben, és az SBC HD Androidra való bevezetésében. A gerritben lévő javítás már elavult (ez az egyik korai verzió), frissítem, ha a fejlesztők érdeklődnek a változtatásaim iránt (nem könnyű frissíteni, nincsenek Android Q-val kompatibilis készülékeim ).

Következtetés

A LineageOS, Resurrection Remix és crDroid firmware-rel rendelkező okostelefonok felhasználói már most jobb hangminőséget élvezhetnek, csak aktiválják az opciót a Bluetooth eszköz beállításainál. A Linux-felhasználók a telepítéssel megnövelt SBC-bitrátát is elérhetnek patch Rohar Palitól, amely többek között támogatja az aptX, aptX HD és FastStream kodekeket.

Forrás: will.com

Hozzászólás