Änderung des Bluetooth-Stacks zur Verbesserung des Klangs in Kopfhörern ohne AAC-, aptX- und LDAC-Codecs

Einige Benutzer von drahtlosen Kopfhörern bemerken eine schlechte Klangqualität und einen Mangel an hohen Frequenzen, wenn sie den Bluetooth SBC-Standardcodec verwenden, der von allen Audiogeräten unterstützt wird. Eine häufige Empfehlung zur Verbesserung des Klangs ist der Kauf von Geräten und Kopfhörern, die aptX- und LDAC-Codecs unterstützen. Diese Codecs erfordern Lizenzgebühren, daher sind die Geräte, die sie unterstützen, teurer.

Es stellt sich heraus, dass die schlechte Qualität des SBC auf künstliche Einschränkungen der Bluetooth-Stacks und der Kopfhörerkonfiguration zurückzuführen ist. Diese Einschränkung kann auf jedem vorhandenen Gerät durch Softwareänderungen am Smartphone oder Computer vermieden werden.
SBC-Codec
Der SBC-Codec verfügt über viele verschiedene Parameter, die während der Verbindungsaufbauphase ausgehandelt werden. Unter ihnen:
Anzahl und Art der Kanäle: Joint Stereo, Stereo, Dual Channel, Mono;
Anzahl der Frequenzbänder: 4 oder 8;
Anzahl der Blöcke in einer Packung: 4, 8, 12, 16;
Quantisierungsbit-Zuweisungsalgorithmus: Loudness, SNR;
Der Maximal- und Minimalwert der zur Quantisierung verwendeten Bitgruppe (Bitgruppe): normalerweise 2 bis 53.
Der Decoder MUSS eine beliebige Kombination dieser Parameter unterstützen. Der Encoder kann möglicherweise nicht alles tun.
Bestehende Bluetooth-Stacks entsprechen im Allgemeinen dem folgenden Profil: Stereo-Set, 8 Bänder, 16 Blöcke, Lautstärke, Bitpool 2..53. Dieses Profil codiert 44,1-kHz-Audio mit 328 kbit / s.
Der Bitpool-Parameter wirkt sich direkt auf die Bitrate innerhalb eines 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 beeinflussen die Bitrate ebenfalls erheblich: die Art der Kanäle, die Anzahl der Frequenzbänder, die Anzahl der Blöcke. Sie können die Bitrate indirekt erhöhen, indem Sie sich auf nicht standardmäßige Profile einigen, ohne die Bitgruppe zu ändern.
Berechnungsformel für die SBC-Bitrate
Beispielsweise codiert der Zweikanalmodus Kanäle separat unter Verwendung des für jeden Kanal gesetzten Vollbits. Indem wir das Gerät zwingen, Dual Channel anstelle von Joint Stereo zu verwenden, erhalten wir fast die doppelte Bitrate bei demselben maximalen Bitpoolwert: 617 kbps.
Meiner Meinung nach ist die Verwendung eines nicht profilierten Bitpool-Werts in der Verhandlungsphase ein Fehler im A2DP-Standard, der zu einer künstlichen Einschränkung der SBC-Qualität führte. Es wäre klüger, sich eher auf die Bitrate als auf die Bitgruppe zu einigen.
Diese festen Bitpool- und Bitrate-Werte stammen aus der Tabelle der empfohlenen Werte für Audio in hoher Qualität. Die Empfehlung ist jedoch kein Grund, sich auf diese Werte zu beschränken.
SBC Bluetooth-Profiltabelle
Die A2DP v1.2-Spezifikation, die von 2007 bis 2015 aktiv war, erfordert, dass alle Decodierungsgeräte mit Bitraten von bis zu 512 kbps ordnungsgemäß funktionieren:
Der SNK-Decoder muss alle möglichen Werte der Bitkombination unterstützen, die die maximale Bitrate nicht überschreiten. Dieses Profil begrenzt die maximal verfügbare Bitrate auf 320 kb / s für Mono und 512 kb / s für Zweikanalmodi.
In der neuen Version der Spezifikation gibt es keine Bitratenbeschränkung. Moderne Kopfhörer, die nach 2015 veröffentlicht wurden und EDR unterstützen, sollen Bitraten von bis zu 730 kbps unterstützen können.
Aus irgendeinem Grund haben die Bluetooth-Stacks, die ich für Linux (PulseAudio), Android, Blackberry und macOS getestet habe, künstliche Grenzen für den Maximalwert 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 gesehen habe, funktionieren die meisten Geräte auf einem modifizierten Bluetooth-Stack mit einer Bitrate von 551 kbit / s einwandfrei, ohne Aussetzer oder Knistern. Diese Bitrate wäre jedoch unter normalen Umständen in normalen Bluetooth-Stacks niemals konstant.
Ändern Sie den Bluetooth-Stack
Jeder Bluetooth-Stack, der mit dem A2DP-Standard kompatibel ist, unterstützt den Zweikanalmodus, 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 volle Dual-Channel-Unterstützung hinzufügen, dem Moduswechselmenü in den Entwicklertools den Modus hinzufügen und Dual-Channel-SBCs so behandeln, als wären sie ein zusätzlicher Codec wie aptX, AAC oder LDAC (Android) nennt es HD Audio), indem Sie den Bluetooth-Geräteeinstellungen ein Häkchen hinzufügen.