Bevor Sie diesen Artikel lesen, wird empfohlen, den vorherigen Artikel zu lesen: Audio über Bluetooth: Ausführlichste Informationen zu Profilen, Codecs und Geräten /Einige Benutzer von drahtlosen Kopfhörern stellen bei Verwendung des Standard-Bluetooth-SBC-Codecs, der von allen Kopfhörern und anderen Bluetooth-Audiogeräten unterstützt wird, eine geringe Klangqualität und fehlende hohe Frequenzen fest. Eine häufige Empfehlung für eine bessere Klangqualität ist der Kauf von Geräten und Kopfhörern mit Unterstützung für aptX- oder LDAC-Codecs. Für diese Codecs sind Lizenzgebühren erforderlich. Deshalb sind Geräte mit ihnen teurer.
Es stellt sich heraus, dass die geringe Qualität von SBC durch künstliche Einschränkungen aller aktuellen Bluetooth-Stacks und Kopfhörerkonfigurationen verursacht wird. Diese Einschränkung kann auf jedem vorhandenen Gerät nur mit Softwaremodifikationen umgangen werden.
Sbc Codec
SBC verfügt über viele verschiedene Parameter, die während der Verbindungsaufbauphase ausgehandelt werden:
- Typ und Nummer des Audiokanals: Joint Stereo, Stereo, Dual Channel, Mono;
- Anzahl der Frequenzbänder: 4 oder 8;
- Anzahl der Audioblöcke in einem Paket: 4, 8, 12, 16;
- Algorithmus zur Zuweisung von Quantisierungsbits: Loudness, SNR;
- Maximaler und minimaler Bitpool, der im Quantisierungsprozess verwendet wird: normalerweise 2-53.
Der Decoder muss eine beliebige Kombination dieser Parameter unterstützen. Der Encoder kann nur einen Teil davon implementieren.
Bestehende Bluetooth-Stacks verhandeln normalerweise die folgenden Optionen, die ich als "Profil" bezeichne: Joint Stereo, 8 Bänder, 16 Blöcke, Loudness, Bitpool 2..53. Dieses Profil codiert 44,1-kHz-Stereo-Audio mit einer Bitrate von 328 kbit / s.
Bitpool ist ein Parameter, der die Codierungsbitrate ändert: Je höher sie ist, desto höher ist die Bitrate und damit die Qualität. Der genaue Bitpoolwert entspricht jedoch nur innerhalb des exakten Profils der exakten Bitrate.
Die Bitrate wird auch erheblich von anderen Parametern beeinflusst: Audiokanaltyp, Anzahl der Frequenzbänder, Anzahl der Audioblöcke. Sie können die Bitrate indirekt erhöhen, indem Sie nicht standardmäßige Profile aushandeln, ohne den Bitpool zu ändern.
Bitrate-BerechnungsformelIm Zweikanalmodus werden beispielsweise Kanäle separat codiert, wobei für jeden Kanal ein einzelner Bitpool verwendet wird, im Gegensatz zu Stereo oder Joint Stereo, bei denen für beide Kanäle ein Bitpool verwendet wird. Wenn Sie das Gerät dazu zwingen, Dual Channel anstelle von Joint Stereo zu verwenden, wird die Bitrate mit 617 kbps bei gleichem Bitpool-Wert von 53 fast verdoppelt.
Für mich sollte Bitpool eine interne Variable sein. Ich gehe davon aus, dass es sich um einen Entwurfsfehler der A2DP-Spezifikation handelt, dass der Bitpoolwert nicht an andere Codec-Parameter gebunden und nur als unabhängige ausgehandelte Variable definiert ist.
Feste Bitpool- und Bitratenwerte stammen aus dem empfohlenen Profil für Audio in hoher Qualität. Die Empfehlung sollte jedoch nicht der Grund sein, die Grenze für diese Parameter festzulegen.

Gemäß der A2DP-Spezifikation v1.2, die von 2007 bis 2015 aktiv war, müssen alle Decoder ordnungsgemäß mit Bitraten von bis zu 512 kbit / s arbeiten:
Der Decoder des SNK muss alle möglichen Bitpoolwerte unterstützen, die nicht zu einer Überschreitung der maximalen Bitrate führen. Dieses Profil begrenzt die verfügbare maximale Bitrate auf 320 kb / s für Mono und 512 kb / s für Zweikanalmodi.
In der neuen Version der Spezifikation ist keine Bitratenbegrenzung angegeben. Es wird davon ausgegangen, dass moderne Kopfhörer mit EDR-Unterstützung, die nach 2015 veröffentlicht wurden, Bitraten von bis zu 730 kbps unterstützen können.
Aus irgendeinem Grund unterliegen alle derzeit getesteten Bluetooth-Stacks (Linux (PulseAudio), Android, Blackberry und macOS) künstlichen Einschränkungen des maximalen Bitpool-Parameters, die sich direkt auf die maximale Bitrate auswirken. Dies ist jedoch nicht das größte Problem. Fast alle Kopfhörer begrenzen den maximalen Bitpoolwert auf 53.
Wie ich bereits in meinen Tests gesehen habe, funktionieren die meisten Geräte auf einem modifizierten Bluetooth-Stack mit einer Bitrate von 551 kbit / s einwandfrei, ohne Unterbrechungen und Knistern. Eine solche Bitrate wird jedoch unter normalen Bedingungen mit Standard-Bluetooth-Stacks niemals ausgehandelt.
Änderung des Bluetooth-Stacks
Jeder A2DP-kompatible Bluetooth-Stack sollte den Dual-Channel-Modus unterstützen, es gibt jedoch keine Möglichkeit, die Verwendung dieses Modus zu erzwingen.
Fügen wir der Benutzeroberfläche einen Schalter hinzu! Ich habe Patches für Android 8.1 und Android 9 erstellt, die dem Channel und dem Entwicklermenü die volle Unterstützung für Dual Channel hinzufügen, und den Dual Channel-Modus als zusätzlichen "HD Audio" -Codec wie aptX, AAC oder LDAC behandelt, indem ich dem ein Häkchen hinzufüge Bluetooth-Geräteeinstellungen So sieht es aus:
Android 9 PatchAndroid 8.1 PatchDieses Kontrollkästchen schaltet den Zweikanalmodus um, der für die Verwendung von
551 kbit / s für EDR-Geräte mit 3 Mbit / s und
452 kbit / s für EDR-Geräte mit 2 Mbit / s konfiguriert ist.
Dieses Patchset wurde in die folgenden alternativen Firmwares integriert:
- LineageOS 15.1 (seit dem 31. März 2019) und 16.0 (seit dem 13. Mai 2019)
- Resurrection Remix (seit 14. Mai 2019)
- crDroid (seit dem 13. Mai 2019)
Woher kamen 551 und 452 kbps?
Die Bluetooth-Zeitteilungstechnologie wurde entwickelt, um große Pakete mit fester Größe effizient zu übertragen. Die Datenübertragung erfolgt in Slots, die größte Anzahl von Slots, die in einer Übertragung gesendet werden, ist 5. Es gibt auch Übertragungsmodi mit 1 oder 3 Slots, jedoch nicht mit 2 oder 4. Sie können bis zu 679 Bytes in 5 Slots mit einer Verbindungsgeschwindigkeit übertragen von 2 Mbit / s und bis zu 1021 Bytes bei einer Geschwindigkeit von 3 Mbit / s. In 3 Slots beträgt die maximale Datenmenge 367 bzw. 552 Byte.

Wenn wir weniger Daten als 679 oder 1021 Bytes, aber mehr als 367 oder 552 Bytes übertragen möchten, benötigt die Übertragung immer noch 5 Slots, und die Übertragung dauert genauso lange, was die Übertragungseffizienz verringert.

44100 Hz Audio, codiert mit SBC im Zweikanalmodus mit Bitpool = 38, 16 Blöcke in einem Frame, 8 Frequenzbänder, erzeugt einen Audio-Frame von 164 Bytes mit einer Bitrate von 452 kb / s.
Die Audio-Nutzdaten sollten in L2CAP- und AVDTP-Übertragungsprotokolle eingekapselt werden, die 16 Byte Overhead von den Audio-Nutzdaten abziehen.
\ begin {align *} Framelength & = 4 + \ frac {Teilbänder \ mal Kanäle} {2} + \\ & \ begin {Fälle} \ frac {Blöcke \ mal Kanäle \ mal Bitpool} {8} & \ text { wenn Mono- oder Zweikanalmodus} \\ \ frac {Teilbänder + Blöcke \ mal Bitpool} {8} & \ Text {wenn gemeinsamer Stereomodus} \\ \ frac {Blöcke \ mal Bitpool} {8} & \ Text {wenn Stereo Modus} \\ \ Ende {Fälle} \ Ende {Ausrichtung *}
Eine Audioübertragung mit 5 Steckplätzen kann bis zu 4 Audio-Frames enthalten:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (SBC header) - (164*4) = 6
Ein einzelnes Paket überträgt bis zu 11,7 ms Audiodaten, die in 3,75 ms übertragen werden, und wir haben noch 6 nicht verwendete Bytes im Paket.
Wenn Sie den Bitpool leicht erhöhen, können 4 Audio-Frames nicht mehr in eine einzige Übertragung gepackt werden. Sie müssen 3 Frames gleichzeitig senden, was die Übertragungseffizienz verringert, die Menge des in einem Paket übertragenen Audios verringert und die Wahrscheinlichkeit eines Audio-Stotterns unter schlechten Funkbedingungen erhöht.
Die Bitrate von 551 kbit / s für EDR 3 Mbit / s wurde nach dem gleichen Prinzip ausgewählt: Mit Bitpool 47, 16 Blöcken pro Frame, 8 Frequenzbändern beträgt die Frame-Größe 200 Byte bei einer Bitrate von 551 kbit / s. Die Einzelübertragung kann bis zu 5 Frames oder 14,6 ms Musik bündeln.
Der Algorithmus zum Berechnen aller SBC-Parameter ist ziemlich kompliziert. Sie können leicht einen Fehler machen, wenn Sie versuchen, alle manuell zu berechnen. Deshalb habe ich einen interaktiven Taschenrechner erstellt, um Interessierten zu helfen:
btcodecs.valdikss.org.ru/sbc-bitrate-calculatorWofür ist das alles?
Entgegen der weit verbreiteten Meinung zur aptX-Klangqualität kann sie in einigen Fällen eine schlechtere Audioqualität als SBC mit einer Standard-Bitrate von 328 KB erzeugen.
SBC ordnet Quantisierungsbits für Frequenzbänder dynamisch zu und wirkt "von unten nach oben". Wenn die gesamte Bitrate für die unteren und mittleren Frequenzen verwendet wurde, werden die oberen Frequenzen "abgeschnitten" (stummgeschaltet).
aptX quantisiert Frequenzbänder mit der gleichen Anzahl von Bits konstant, was es zu einem Codec mit konstanter Bitrate macht: 352 kbps für 44,1 kHz, 384 kbps für 48 kHz. Es kann keine Bits auf Frequenzen übertragen, die sie am dringendsten benötigen. Im Gegensatz zu SBC "schneidet" aptX keine Frequenzen, sondern fügt ihnen Quantisierungsrauschen hinzu, reduziert den Dynamikbereich von Audio und führt manchmal zu Knistern. SBC hingegen "frisst die Details" - verwirft die ruhigsten Bereiche.
Im Vergleich zu SBC 328k macht aptX im Durchschnitt weniger Verzerrungen bei Musik mit einem breiten Frequenzbereich, aber bei Musik mit einem engen Frequenzbereich und einem großen Dynamikbereich gewinnt SBC 328k manchmal.
Betrachten wir einen Sonderfall, eine Klavieraufnahme. Hier ist ein Spektrogramm:

Die meiste Energie befindet sich in den Frequenzen von 0 bis 4 kHz und dauert bis zu 10 kHz.
Das Spektrogramm der Datei aptX sieht folgendermaßen aus:

Hier ist SBC 328k:

Es ist ersichtlich, dass der SBC 328k den Bereich über 16 kHz periodisch vollständig abschneidet und alle verfügbaren Bitraten für die Frequenzbereiche unter diesem Wert verwendet. AptX führte jedoch mehr Verzerrungen in das vom menschlichen Ohr hörbare Frequenzspektrum ein, die auf dem vom aptX-Spektrogramm subtrahierten ursprünglichen Audiospektrogramm zu sehen sind (je heller, desto stärker verzerrt):

SBC 328k hat das Signal im Bereich von 0 bis 10 kHz weniger verzerrt, und die Restfrequenzen von wurden reduziert:

Eine Bitrate von 485k reichte für SBC aus, um den gesamten Frequenzbereich zu speichern, ohne die Bänder abzuschneiden.

SBC 485k liefert bei diesem Sample viel bessere Ergebnisse im Bereich von 0 bis 15 kHz als aptX und einen kleineren, aber immer noch spürbaren Unterschied bei 15 bis 22 kHz (je dunkler, desto weniger Verzerrung):
Archiv mit Original-Audio- und SBC / aptX-codierten Dateien .
Wenn Sie zu einem SBC mit hoher Bitrate wechseln, erhalten Sie auf jedem Kopfhörer einen Sound, der aptX die meiste Zeit überlegen ist. Bei Kopfhörern mit EDR 3 Mb / s-Unterstützung erzeugt SBC mit 551 kb / s einen Klang, der aptX HD sehr nahe kommt.
Können wir noch weiter gehen?
Das Android-Patchset bietet eine zusätzliche Option, um die Bitrate für EDR-Geräte mit 2 MBit / s noch weiter zu erhöhen. Sie können die Bitrate von 452 kbit / s auf 595 kbit / s erhöhen, um die Stabilität der Übertragung bei überlasteten Funkbedingungen zu verringern.
Setzen Sie einfach die Variable persist.bluetooth.sbc_hd_higher_bitrate auf 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1
Patch mit extremer Bitrate wird derzeit nur in LineageOS 15.1 zusammengeführt, nicht jedoch in 16.0.
Kompatibilität mit den Geräten
SBC Dual Channel wird von fast allen Kopfhörern, Lautsprechern und Autokopfeinheiten unterstützt. Dies ist kein Wunder - der Standard schreibt seine Unterstützung für alle Dekodierungsgeräte vor. Es gibt eine kleine Anzahl von Geräten, auf denen dieser Modus Probleme verursacht, aber dies sind sehr seltene Fälle.
Weitere Details zu kompatiblen Geräten finden Sie unter
w3bsit3-dns.com und
xda-Entwicklern .
Klangunterschiedsvergleich
Ich habe einen Webdienst erstellt, der Audio in Echtzeit direkt im Browser in SBC (sowie in aptX und aptX HD) codiert. Mit diesem Dienst können Sie den Klang verschiedener SBC-Profile und anderer Codecs vergleichen, ohne tatsächlich Audio über Bluetooth zu übertragen, über kabelgebundene Kopfhörer, Lautsprecher und Ihre Lieblingsmusik. Sie können die Codierungsparameter auch direkt während der Audiowiedergabe ändern.
btcodecs.valdikss.org.ru/sbc-encoderKontaktaufnahme mit Android-Entwicklern
Ich habe versucht, viele Bluetooth-Stack-Entwickler von Google zu kontaktieren und sie gebeten, meine Patches in den Haupt-Android-Zweig - AOSP - aufzunehmen, erhielt jedoch keine einzige Antwort. Meine Patches im
Gerrit-Code-Überprüfungssystem für Android haben auch keine Kommentare von Personen erhalten, die an der Entwicklung beteiligt waren.
Ich würde mich freuen, wenn jemand Google-Entwicklern von dieser Implementierung von SBC HD für Android erzählen könnte. Das Gerrit-Patchset ist bereits veraltet (dies ist eine der frühesten Überarbeitungen), aber ich werde es aktualisieren, wenn Entwickler an meinen Änderungen interessiert sind (es ist nicht einfach für mich, es zu aktualisieren, ich habe keine Android Q-kompatiblen Geräte). .
Fazit
Benutzer von LineageOS, Resurrection Remix und crDroid-Firmwares können die Bluetooth-Audioqualität verbessern, indem sie ein Kontrollkästchen in den Bluetooth-Geräteeinstellungen aktivieren. Linux-Benutzer können auch eine höhere SBC-Bitrate
erzielen , indem sie
den Patch von Pali Rohár installieren , der unter anderem die Unterstützung der Codecs aptX, aptX HD und FastStream bietet.