Bevor Sie diesen Artikel lesen, wird empfohlen, den vorherigen Artikel zu lesen: Audio über Bluetooth: so viel wie möglich über Profile, Codecs und Geräte / auf EnglischEinige Benutzer von drahtlosen Kopfhörern stellen bei Verwendung des Standard-SBC-Bluetooth-Codecs, der alle Audiogeräte unterstützt, eine schlechte Audioqualität und einen Mangel an hohen Frequenzen fest. Eine häufige Empfehlung zur Verbesserung des Klangs ist der Kauf von Geräten und Kopfhörern, die aptX- und LDAC-Codecs unterstützen. Für diese Codecs sind Lizenzgebühren erforderlich, sodass Geräte mit deren Unterstützung teurer sind.
Es stellt sich heraus, dass die geringe Qualität von SBC auf die künstlichen Einschränkungen von Bluetooth-Stacks und Kopfhörereinstellungen zurückzuführen ist. Diese Einschränkung kann bei vorhandenen Geräten durch Softwareänderungen an einem Smartphone oder Computer umgangen werden.
SBC Codec
Der SBC-Codec verfügt über viele verschiedene Parameter, die während der Verbindungsaufbauphase konsistent sind. Unter ihnen:
- Anzahl und Art der Kanäle: Joint Stereo, Stereo, Dual Channel, Mono;
- Anzahl der Frequenzbänder: 4 oder 8;
- Die Anzahl der Blöcke im Paket: 4, 8, 12, 16;
- Algorithmus zur Zuweisung von Quantisierungsbits: Loudness, SNR;
- Maximaler und minimaler Wert des bei der Quantisierung verwendeten Bitpools (Bitpool): normalerweise von 2 bis 53.
Das Decodiergerät muss eine beliebige Kombination dieser Parameter unterstützen. Der Encoder implementiert möglicherweise nicht alle.
Bestehende Bluetooth-Stacks stimmen in der Regel mit folgendem Profil überein: Joint Stereo, 8 Bänder, 16 Blöcke, Loudness, Bitpool 2..53. Dieses Profil codiert 44,1-kHz-Audio mit einer Bitrate von 328 kbit / s.
Der Bitpool-Parameter wirkt sich direkt auf die Bitrate innerhalb eines einzelnen Profils aus: Je höher diese ist, desto höher ist die Bitrate und damit die Qualität.
Der Bitpool-Parameter ist jedoch nicht an ein bestimmtes Profil gebunden. Andere Parameter wirken sich ebenfalls auf die Bitrate aus: Art der Kanäle, Anzahl der Frequenzbänder, Anzahl der Blöcke. Sie können die Bitrate indirekt erhöhen, indem Sie nicht standardmäßige Profile aushandeln, ohne den Bitpool zu ändern.
SBC Bitrate FormulaBeispielsweise codiert der Zweikanalmodus Kanäle separat, wobei der gesamte Bitpool für jeden Kanal verwendet wird. Indem das Gerät gezwungen wird, Dual Channel anstelle von Joint Stereo zu verwenden, erhalten wir eine fast doppelte Bitrate bei demselben maximalen Bitpoolwert: 617 kbps.
Meiner Meinung nach ist die Verwendung eines Bitpool-Werts ohne Profil in der Genehmigungsphase ein Fehler im A2DP-Standard, der zu einer künstlichen Einschränkung der SBC-Qualität führte. Es wäre klüger, die Bitrate zu vereinbaren, nicht den Bitpool.
Diese festen Werte, Bitpool und Bitrate, stammen aus einer Tabelle mit empfohlenen Werten für Audio in hoher Qualität. Die Empfehlung ist jedoch kein Grund, sich auf diese Werte zu beschränken.

Die A2DP v1.2-Spezifikation, die von 2007 bis 2015 aktiv war, erfordert, dass alle Decodierungsgeräte ordnungsgemäß mit Bitraten von bis zu 512 kbps 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 gibt es keine Bitratenbegrenzung. Es wird davon ausgegangen, dass moderne Kopfhörer, die nach 2015 veröffentlicht wurden und EDR unterstützen, Bitraten von bis zu 730 kbps unterstützen können.
Aus irgendeinem Grund haben die von mir getesteten Linux-Bluetooth-Stacks (PulseAudio), Android, Blackberry und macOS künstliche Einschränkungen hinsichtlich des Maximalwerts des Bitpool-Parameters, was sich direkt auf die maximale Bitrate auswirkt. Dies ist jedoch nicht das größte Problem. Fast alle Kopfhörer begrenzen den maximalen Bitpoolwert auf 53.
Wie ich bereits sichergestellt habe, funktionieren die meisten Geräte auf einem modifizierten Bluetooth-Stack mit einer Bitrate von 551 kbit / s ohne Unterbrechungen und Knistern einwandfrei. Eine solche Bitrate wird jedoch unter normalen Bedingungen auf normalen Bluetooth-Stacks niemals ausgehandelt.
Ändern des Bluetooth-Stacks
Jeder Bluetooth-Stack, der mit dem A2DP-Standard kompatibel ist, unterstützt den Dual-Channel-Modus, kann jedoch nicht über die Schnittstelle aktiviert werden.
Fügen wir der Schnittstelle einen Schalter hinzu! Ich habe Patches für Android 8.1 und Android 9 erstellt, die dem Stack die volle Unterstützung für Dual Channel hinzufügen, dem Modusumschaltmenü in den Entwicklertools den Modus hinzufügen und SBC mit Dual Channel-Unterstützung verarbeiten, als wäre es ein zusätzlicher Codec wie aptX, AAC oder LDAC ( Android nennt es HD Audio), indem es den Einstellungen des Bluetooth-Geräts ein Häkchen hinzufügt. So sieht es aus:
Patch für Android 9Patch für Android 8.1Wenn das Kontrollkästchen aktiviert ist, wird Bluetooth-Audio mit einer Bitrate von
551 kbit / s übertragen, wenn die Kopfhörer eine Verbindung mit 3 Mbit / s unterstützen, oder
452 kbit / s, wenn die Kopfhörer nur 2 Mbit / s unterstützen.
Dieser Patch ist in der folgenden alternativen Firmware enthalten:
- LineageOS
- Resurrection Remix
- crDroid
Woher kamen 551 und 452 kbit / s?
Die Bluetooth-Split-Air-Technologie wurde entwickelt, um große Pakete mit fester Größe effizient zu übertragen. Daten werden über Slots übertragen, die größte Anzahl von Slots, die in einer Übertragung gesendet werden, ist 5. Es gibt auch Übertragungsmodi, die 1 oder 3 Slots verwenden, jedoch nicht 2 oder 4. In 5 Slots können Sie bis zu 679 Bytes mit einer Verbindungsgeschwindigkeit von 2 Mbit / s und übertragen bis zu 1021 Bytes bei einer Geschwindigkeit von 3 Mbit / s und in 3 - 367 bzw. 552 Bytes.

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

SBC im Dual-Channel-Modus für 44100-Hz-Audio mit Bitpool 38-Parametern, 16 Blöcken pro Frame und 8 Frequenzbereichen codiert Audio in Frames mit einer Größe von 164 Byte und einer Bitrate von 452 kbps.
Audio muss in den L2CAP- und AVDTP-Übertragungsprotokollen gekapselt sein, die 16 Byte von der Audio-Nutzlast benötigen.
\ 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 *}
Somit ist es in einer Bluetooth-Übertragung mit 5 Steckplätzen möglich, 4 Audio-Frames aufzunehmen:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 ( SBC) - (164*4) = 6
Wir fügen 11,7 ms Audiodaten in das Sendepaket ein, das in 3,75 ms übertragen wird, und wir haben 6 nicht verwendete Bytes im Paket.
Wenn Sie den Bitpool leicht erhöhen, können 4 Audio-Frames nicht mehr in einem Paket verpackt werden. Sie müssen 3 Frames gleichzeitig senden, was die Übertragungseffizienz verringert, die pro Paket übertragene Audiomenge verringert und bei schlechten Funkbedingungen schnell zu stotterndem Audio führt.
Auf die gleiche Weise wurde eine Bitrate von 551 kbit / s für eine EDR von 3 Mbit / s ausgewählt: Mit Bitpool 47, 16 Blöcken in einem Frame, 8 Frequenzbereichen beträgt die Frame-Größe 200 Bytes bei einer Bitrate von 551 kbit / s. 5 Bilder oder 14,6 ms Musik passen in ein Paket.
Der Algorithmus zum Berechnen aller SBC-Parameter ist ziemlich kompliziert. Wenn Sie manuell zählen, können Sie leicht verwirrt werden.
Deshalb habe ich einen interaktiven Taschenrechner erstellt, der Interessenten
hilft :
btcodecs.valdikss.org.ru/sbc-bitrate-calculatorWarum ist das alles notwendig?
Entgegen der weit verbreiteten Meinung über die Klangqualität des aptX-Codecs kann es bei einigen Dateien zu schlechteren Ergebnissen kommen als bei SBC mit einer Standardbitrate von 328 kbps.
SBC ordnet Quantisierungsbits für Frequenzbänder dynamisch zu und arbeitet von unten nach oben. Wenn die gesamte Bitrate für die niedrigen und mittleren Frequenzen verwendet wurde, werden die höheren Frequenzen "abgeschnitten" (stattdessen herrscht Stille).
aptX quantisiert Frequenzbänder mit der gleichen Anzahl von Bits kontinuierlich, weshalb es eine konstante Bitrate hat: 352 kbit / s für 44,1 kHz, 384 kbit / s für 48 kHz, und es kann keine Bits auf diese Frequenzen übertragen die meisten brauchen sie. Im Gegensatz zu SBC „schneidet“ aptX die Frequenzen nicht, sondern fügt ihnen Quantisierungsrauschen hinzu, verringert den Dynamikbereich des Audios und führt manchmal zu charakteristischen Knistern. SBC hingegen „frisst die Details auf“ - verwirft die ruhigsten Bereiche.
Im Vergleich zum SBC 328k führt aptX im Durchschnitt weniger Verzerrungen bei Musik mit einem breiten Frequenzbereich durch, aber manchmal gewinnt es bei Musik mit einem engen Frequenzbereich und einem breiten Dynamikbereich.
Betrachten Sie einen Sonderfall. Spektrogramm zur Aufnahme des Klaviers:

Die Hauptenergie liegt in den Frequenzen von 0 bis 4 kHz und dauert bis zu 10 kHz.
Das Spektrogramm der in aptX komprimierten Datei lautet wie folgt:

Und so sieht es aus SBC 328k.

Es ist ersichtlich, dass der SBC 328k den Bereich über 16 kHz periodisch vollständig ausschaltete und die gesamte verfügbare Bitrate für Bereiche unter diesem Wert verbrauchte. AptX führte jedoch mehr Verzerrungen in das vom menschlichen Ohr gehörte Frequenzspektrum ein, was auf dem vom aptX-Spektrogramm subtrahierten Originalspektrogramm zu sehen ist (je heller, desto stärker verzerrt):

Während der SBC 328k das Signal im Bereich von 0 bis 10 kHz weniger durcheinander brachte und den Rest abbrach -

Die 485k SBC-Bitrate reichte aus, um den gesamten Frequenzbereich zu speichern, ohne die Bänder zu trennen.

SBC 485k liegt bei dieser Komposition im Bereich von 0-15 kHz deutlich vor aptX und weist einen kleineren, aber immer noch spürbaren Unterschied auf - 15-22 kHz (je dunkler, desto weniger Verzerrung):
Archiv von Original-Audio, SBC und aptX .
Wenn Sie zum High-Bit-SBC wechseln, erhalten Sie auf jedem Kopfhörer einen Sound, der aptX oft überlegen ist. Bei Kopfhörern, die eine 3-Mbit / s-EDR-Verbindung unterstützen, erzeugt die Bitrate von 551 Kbit / s einen mit aptX HD vergleichbaren Klang.
Kann ich mehr haben?
Der Patch für Android bietet auch die Option, die Bitrate für EDR-Geräte um 2 Mbit / s weiter zu erhöhen. Sie können die Bitrate von 452 kbit / s auf 595 kbit / s erhöhen, um die Übertragungsstabilität unter komplexen Funkbedingungen zu verringern.
Setzen Sie einfach die Variable persist.bluetooth.sbc_hd_higher_bitrate auf 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1
Der Patch mit extremer Bitrate wurde bisher nur in LineageOS 15.1 akzeptiert, nicht jedoch in 16.0.
Gerätekompatibilität
SBC Dual Channel wird von fast allen Kopfhörern, Lautsprechern und Autokopfeinheiten unterstützt. Dies ist nicht überraschend - 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, dies sind jedoch einzelne Instanzen.
Weitere Details zu kompatiblen Geräten finden Sie auf
w3bsit3-dns.com oder bei
xda-Entwicklern .
Vergleich der Klangunterschiede
Ich habe einen Webdienst erstellt, der Audio in SBC (sowie aptX und aptX HD) in Echtzeit direkt im Browser codiert. Mit ihm können Sie den Sound verschiedener SBC-Profile und anderer Codecs vergleichen, ohne Audio über Bluetooth zu übertragen, und zwar über kabelgebundene Kopfhörer, Lautsprecher und Ihre Lieblingsmusik. Außerdem können Sie die Codierungseinstellungen direkt während der Audiowiedergabe ändern.
btcodecs.valdikss.org.ru/sbc-encoderWenden Sie sich an Android-Entwickler
Ich schrieb an viele Entwickler des Google Bluetooth-Stacks mit der Bitte, die Aufnahme von Patches in den Haupt-Android-Zweig - AOSP - in Betracht zu ziehen, erhielt jedoch keine einzige Antwort. Meine Patches im
Gerrit-Patch-System für Android wurden ebenfalls von allen Beteiligten kommentarlos hinterlassen.
Ich würde mich freuen, wenn mir im Zusammenhang mit den Entwicklern von Google und der Implementierung von SBC HD in Android geholfen würde. Der Gerrit-Patch ist bereits veraltet (dies ist eine der frühen Überarbeitungen) und ich werde ihn aktualisieren, wenn die Entwickler an meinen Änderungen interessiert sind (es ist nicht einfach für mich, ihn zu aktualisieren, ich habe keine Android Q-kompatiblen Geräte).
Fazit
Benutzer von Smartphones mit LineageOS, Resurrection Remix und crDroid-Firmware können sich jetzt mit verbesserter Klangqualität zufrieden geben. Aktivieren Sie einfach die Option in den Einstellungen des Bluetooth-Geräts. Linux-Benutzer können auch eine erhöhte SBC-Bitrate
erzielen , indem sie einen
Patch von Pali Rohár installieren , der unter anderem die Codecs aptX, aptX HD und FastStream unterstützt.