Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Πριν διαβάσετε αυτό το άρθρο, συνιστάται να διαβάσετε το προηγούμενο άρθρο: Ήχος μέσω Bluetooth: μέγιστες λεπτομέρειες σχετικά με προφίλ, κωδικοποιητές και συσκευές

Ορισμένοι χρήστες ασύρματων ακουστικών αναφέρουν κακή ποιότητα ήχου και έλλειψη υψηλών συχνοτήτων όταν χρησιμοποιούν τον τυπικό κωδικοποιητή Bluetooth SBC, ο οποίος υποστηρίζεται από όλες τις συσκευές ήχου. Μια κοινή σύσταση για τη βελτίωση του ήχου είναι η αγορά συσκευών και ακουστικών που υποστηρίζουν κωδικοποιητές aptX και LDAC. Αυτοί οι κωδικοποιητές απαιτούν τέλη αδειοδότησης, επομένως οι συσκευές που τους υποστηρίζουν είναι πιο ακριβές.

Αποδεικνύεται ότι η χαμηλή ποιότητα του SBC οφείλεται σε τεχνητούς περιορισμούς των στοίβων Bluetooth και των ρυθμίσεων ακουστικών και αυτός ο περιορισμός μπορεί να παρακαμφθεί σε οποιαδήποτε υπάρχουσα συσκευή μέσω αλλαγών λογισμικού σε smartphone ή υπολογιστή.

Κωδικοποιητής SBC

Ο κωδικοποιητής SBC έχει πολλές διαφορετικές παραμέτρους που διαπραγματεύονται κατά τη φάση εγκατάστασης της σύνδεσης. Ανάμεσα τους:

  • Αριθμός και τύπος καναλιών: Joint Stereo, Stereo, Dual Channel, Mono;
  • Αριθμός ζωνών συχνοτήτων: 4 ή 8;
  • Αριθμός μπλοκ στη συσκευασία: 4, 8, 12, 16.
  • Αλγόριθμος για την κατανομή bit κατά την κβαντοποίηση: Loudness, SNR;
  • Η μέγιστη και η ελάχιστη τιμή του συνόλου των bit που χρησιμοποιείται κατά την κβαντοποίηση (bitpool): συνήθως από 2 έως 53.

Η συσκευή αποκωδικοποίησης πρέπει να υποστηρίζει οποιονδήποτε συνδυασμό αυτών των παραμέτρων. Ο κωδικοποιητής ενδέχεται να μην υλοποιεί τα πάντα.
Οι υπάρχουσες στοίβες Bluetooth συνήθως συμφωνούν στο ακόλουθο προφίλ: Joint Stereo, 8 μπάντες, 16 block, Loudness, bitpool 2..53. Αυτό το προφίλ κωδικοποιεί ήχο 44.1 kHz με ρυθμό bit 328 kbps.
Η παράμετρος bitpool επηρεάζει άμεσα τον ρυθμό μετάδοσης δυαδικών ψηφίων σε ένα προφίλ: όσο υψηλότερος είναι, τόσο υψηλότερος είναι ο ρυθμός μετάδοσης bit και επομένως η ποιότητα.
Ωστόσο, η παράμετρος bitpool δεν συνδέεται με ένα συγκεκριμένο προφίλ. Το bitrate επηρεάζεται επίσης σε μεγάλο βαθμό από άλλες παραμέτρους: τύπος καναλιών, αριθμός ζωνών συχνοτήτων, αριθμός μπλοκ. Μπορείτε να αυξήσετε το bitrate έμμεσα, συμφωνώντας σε μη τυπικά προφίλ, χωρίς να αλλάξετε το bitpool.

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Τύπος για τον υπολογισμό του ρυθμού bit SBC

Για παράδειγμα, η λειτουργία Dual Channel κωδικοποιεί κανάλια ξεχωριστά, χρησιμοποιώντας ολόκληρο το bitpool για κάθε κανάλι. Αναγκάζοντας τη συσκευή να χρησιμοποιεί Dual Channel αντί για Joint Stereo, παίρνουμε σχεδόν το διπλάσιο bitrate με την ίδια μέγιστη τιμή bitpool: 617 kbps.
Κατά τη γνώμη μου, η χρήση μιας τιμής bitpool που δεν συνδέεται με ένα προφίλ στο στάδιο της διαπραγμάτευσης είναι ένα ελάττωμα στο πρότυπο A2DP, το οποίο οδήγησε σε τεχνητό περιορισμό της ποιότητας SBC. Θα ήταν πιο λογικό να διαπραγματευόμαστε το bitrate παρά το bitpool.

Αυτές οι σταθερές τιμές Bitpool και Bitrate προέρχονται από έναν πίνακα με προτεινόμενες τιμές για χρήση για ήχο υψηλής ποιότητας. Αλλά μια σύσταση δεν είναι λόγος να περιοριστείτε σε αυτές τις αξίες.

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Η προδιαγραφή A2DP v1.2, η οποία ήταν ενεργή από το 2007 έως το 2015, απαιτεί από όλες τις συσκευές αποκωδικοποίησης να λειτουργούν σωστά με ρυθμούς bit έως 512 kbps:

Ο αποκωδικοποιητής του SNK θα υποστηρίζει όλες τις πιθανές τιμές bitpool που δεν έχουν ως αποτέλεσμα υπέρβαση του μέγιστου ρυθμού bit. Αυτό το προφίλ περιορίζει τον διαθέσιμο μέγιστο ρυθμό μετάδοσης bit στα 320 kb/s για μονοφωνικές λειτουργίες και 512 kb/s για λειτουργίες δύο καναλιών.

Στη νέα έκδοση της προδιαγραφής δεν υπάρχει όριο στο bitrate. Υπολογίζεται ότι τα σύγχρονα ακουστικά που κυκλοφόρησαν μετά το 2015 και υποστηρίζουν EDR μπορούν να υποστηρίξουν ρυθμούς bit έως και ≈730 kbps.

Για κάποιο λόγο, οι στοίβες Bluetooth (PulseAudio), Android, Blackberry και macOS που δοκίμασα έχουν τεχνητά όρια στη μέγιστη τιμή της παραμέτρου bitpool, η οποία επηρεάζει άμεσα τον μέγιστο ρυθμό μετάδοσης bit. Αλλά αυτό δεν είναι το μεγαλύτερο πρόβλημα· σχεδόν όλα τα ακουστικά περιορίζουν επίσης τη μέγιστη τιμή bitpool στο 53.
Όπως έχω ήδη δει, οι περισσότερες συσκευές λειτουργούν τέλεια σε μια τροποποιημένη στοίβα Bluetooth με ρυθμό μετάδοσης bit 551 kbps, χωρίς διακοπές ή κροτάλισμα. Αλλά ένας τέτοιος ρυθμός bit δεν θα είναι ποτέ σταθερός υπό κανονικές συνθήκες, σε κανονικές στοίβες Bluetooth.

Τροποποίηση της στοίβας Bluetooth

Οποιαδήποτε στοίβα Bluetooth είναι συμβατή με το πρότυπο A2DP υποστηρίζει τη λειτουργία Dual Channel, αλλά δεν είναι δυνατή η ενεργοποίησή της από τη διεπαφή.

Ας προσθέσουμε μια εναλλαγή στη διεπαφή! Έχω δημιουργήσει ενημερώσεις κώδικα για το Android 8.1 και το Android 9 που προσθέτουν πλήρη υποστήριξη Dual Channel στη στοίβα, προσθέτουν μια λειτουργία στο μενού εναλλαγής λειτουργίας στα εργαλεία προγραμματισμού και αντιμετωπίζουν τα SBC με δυνατότητα διπλού καναλιού σαν να ήταν ένας επιπλέον κωδικοποιητής όπως το aptX , AAC ή LDAC (το Android αποκαλεί αυτόν τον ήχο HD) προσθέτοντας ένα σημάδι επιλογής στις ρυθμίσεις της συσκευής Bluetooth. Έτσι φαίνεται:

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Ενημερωμένη έκδοση κώδικα για Android 9
Ενημερωμένη έκδοση κώδικα για Android 8.1

Όταν το πλαίσιο ελέγχου είναι ενεργοποιημένο, ο ήχος Bluetooth αρχίζει να μεταδίδεται με ρυθμό bit 551 kbps, εάν τα ακουστικά υποστηρίζουν ταχύτητα σύνδεσης 3 Mbit/s ή 452 kbps, εάν τα ακουστικά υποστηρίζουν μόνο 2 Mbit/s.

Αυτή η ενημέρωση κώδικα περιλαμβάνεται στα ακόλουθα εναλλακτικά υλικολογισμικά:

  • LineageOS
  • Ανάμνηση της Αναστάσεως
  • cDroid

Από πού προήλθαν τα 551 και 452 kbit/s;

Η τεχνολογία κοινής χρήσης αέρα Bluetooth έχει σχεδιαστεί για να μεταδίδει αποτελεσματικά μεγάλα πακέτα σταθερού μεγέθους. Η μεταφορά δεδομένων πραγματοποιείται σε υποδοχές, ο μεγαλύτερος αριθμός θυρίδων που αποστέλλονται σε μία μεταφορά είναι 5. Υπάρχουν επίσης τρόποι μεταφοράς που χρησιμοποιούν 1 ή 3 υποδοχές, αλλά όχι 2 ή 4. Σε 5 υποδοχές μπορείτε να μεταφέρετε έως και 679 byte με ταχύτητα σύνδεσης 2 Mbit/s και έως 1021 bytes με ταχύτητα 3 Mbit/s και σε 3 - 367 και 552 byte, αντίστοιχα.

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Εάν θέλουμε να μεταφέρουμε λιγότερα δεδομένα από 679 ή 1021 byte, αλλά περισσότερα από 367 ή 552 byte, η μεταφορά θα συνεχίσει να παίρνει 5 θέσεις και τα δεδομένα θα μεταφερθούν ταυτόχρονα, γεγονός που μειώνει την απόδοση μεταφοράς.

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Το SBC σε λειτουργία Dual Channel, στα 44100 Hz ήχος με Bitpool 38 παραμέτρων, 16 μπλοκ ανά καρέ, 8 εύρη συχνοτήτων, κωδικοποιεί τον ήχο σε καρέ 164 byte, με bitrate 452 kbps.
Ο ήχος πρέπει να είναι ενσωματωμένος σε πρωτόκολλα μεταφοράς L2CAP και AVDTP, τα οποία λαμβάνουν 16 byte από το ωφέλιμο φορτίο ήχου.

Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Έτσι, μια μετάδοση Bluetooth με 5 υποδοχές μπορεί να φιλοξενήσει 4 καρέ ήχου:

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

Τοποθετούμε 11.7 ms δεδομένων ήχου στο πακέτο που αποστέλλεται, το οποίο θα μεταδοθεί σε 3.75 ms, και έχουμε 6 αχρησιμοποίητα byte στο πακέτο.
Εάν αυξήσετε λίγο το bitpool, δεν θα είναι πλέον δυνατό να συσκευάσετε 4 καρέ ήχου σε ένα πακέτο. Θα πρέπει να στείλετε 3 καρέ τη φορά, γεγονός που μειώνει την απόδοση μετάδοσης, μειώνει την ποσότητα του ήχου που μεταδίδεται ανά καρέ και θα οδηγήσει πιο γρήγορα σε τραυλισμό ήχου σε κακές συνθήκες ραδιοφώνου.

Με τον ίδιο τρόπο, επιλέχθηκε ρυθμός μετάδοσης bit 551 kbit/s για EDR 3 Mbit/s: με Bitpool 47, 16 μπλοκ ανά καρέ, 8 εύρη συχνοτήτων, το μέγεθος του πλαισίου είναι 200 ​​byte, με ρυθμό μετάδοσης bit 551 kbit/s. Μία συσκευασία περιέχει 5 καρέ ή 14.6 ms μουσικής.

Ο αλγόριθμος για τον υπολογισμό όλων των παραμέτρων SBC είναι αρκετά περίπλοκος, μπορείτε εύκολα να μπερδευτείτε αν μετράτε χειροκίνητα, γι 'αυτό έφτιαξα μια διαδραστική αριθμομηχανή για να βοηθήσω όσους ενδιαφέρονται: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Γιατί χρειάζονται όλα αυτά;

Σε αντίθεση με τη δημοφιλή πεποίθηση σχετικά με την ποιότητα ήχου του κωδικοποιητή aptX, σε ορισμένα αρχεία μπορεί να παράγει αποτελέσματα χειρότερα από το SBC με τυπικό bitrate 328 kbps.

Το SBC εκχωρεί δυναμικά bits κβαντοποίησης σε ζώνες συχνοτήτων σε βάση από χαμηλό προς υψηλό. Εάν χρησιμοποιήθηκε όλος ο ρυθμός μετάδοσης bit για τις χαμηλές και μεσαίες συχνότητες, οι υψηλές συχνότητες θα «κοπούν» (αντ' αυτού θα υπάρχει σιωπή).
Το aptX κβαντίζει ζώνες συχνοτήτων με τον ίδιο αριθμό bit συνεχώς, γι' αυτό έχει σταθερό bitrate: 352 kbps για 44.1 kHz, 384 kbps για 48 kHz και δεν μπορεί να "μετατοπιστεί bit" σε εκείνες τις συχνότητες που τα χρειάζονται περισσότερο. . Σε αντίθεση με το SBC, το aptX δεν θα «κόψει» τις συχνότητες, αλλά θα προσθέσει θόρυβο κβαντοποίησης σε αυτές, μειώνοντας το δυναμικό εύρος του ήχου και μερικές φορές εισάγοντας χαρακτηριστικό κροτάλισμα. Το SBC "τρώει τις λεπτομέρειες" - απορρίπτει τις πιο ήσυχες περιοχές.
Κατά μέσο όρο, σε σύγκριση με το SBC 328k, το aptX εισάγει λιγότερη παραμόρφωση σε μουσική με μεγάλο εύρος συχνοτήτων, αλλά σε μουσική με στενό εύρος συχνοτήτων και μεγάλο δυναμικό εύρος, το SBC 328k μερικές φορές κερδίζει.

Ας εξετάσουμε μια ειδική περίπτωση. Φασματογράφημα ενός πιάνου που παίζει ηχογράφηση:
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Η κύρια ενέργεια βρίσκεται σε συχνότητες από 0 έως 4 kHz και συνεχίζεται έως και 10 kHz.
Το φασματογράφημα ενός αρχείου που είναι συμπιεσμένο σε aptX μοιάζει με αυτό:
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Και έτσι μοιάζει το SBC 328k.
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Μπορεί να φανεί ότι το SBC 328k κατά διαστήματα απενεργοποίησε τελείως το εύρος άνω των 16 kHz και ξόδευε όλο τον διαθέσιμο ρυθμό μετάδοσης bit σε εύρη κάτω από αυτήν την τιμή. Ωστόσο, το aptX εισήγαγε περισσότερη παραμόρφωση στο φάσμα συχνοτήτων που ακούγεται στο ανθρώπινο αυτί, όπως φαίνεται στο αφαιρεμένο αρχικό φασματογράφημα από το φασματογράφημα aptX (όσο πιο φωτεινό, τόσο περισσότερη παραμόρφωση):
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Ενώ το SBC 328k χάλασε λιγότερο το σήμα στην περιοχή από 0 έως 10 kHz και έκοψε τα υπόλοιπα:
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Το 485k bitrate του SBC ήταν αρκετό για να διατηρηθεί ολόκληρο το εύρος συχνοτήτων, χωρίς να απενεργοποιηθούν οι ζώνες.
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Το SBC 485k είναι σημαντικά μπροστά από το aptX σε αυτό το κομμάτι στην περιοχή 0-15 kHz, με μικρότερη αλλά ακόμα αισθητή διαφορά 15-22 kHz (όσο πιο σκοτεινό τόσο λιγότερη παραμόρφωση):
Τροποποίηση της στοίβας Bluetooth για βελτίωση του ήχου σε ακουστικά χωρίς κωδικοποιητές AAC, aptX και LDAC

Αρχείο πρωτότυπου ήχου, SBC και aptX.

Με την εναλλαγή σε SBC υψηλής ταχύτητας bit, θα έχετε ήχο που συχνά ξεπερνά το aptX σε οποιοδήποτε ακουστικό. Σε ακουστικά που υποστηρίζουν συνδεσιμότητα EDR 3 Mbps, ένα bitrate 551 kbps παράγει ήχο συγκρίσιμο με το aptX HD.

Μπορείτε να κάνετε ακόμα περισσότερα;

Η ενημερωμένη έκδοση κώδικα Android περιλαμβάνει επίσης μια επιλογή για περαιτέρω αύξηση του ρυθμού bit για συσκευές EDR 2 Mbps. Μπορείτε να αυξήσετε το bitrate από 452 kbit/s σε 595 kbit/s, με κόστος μείωσης της σταθερότητας μετάδοσης σε δύσκολες συνθήκες ραδιοφώνου.
Αρκεί να ορίσετε τη μεταβλητή persist.bluetooth.sbc_hd_higher_bitrate σε 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Η ενημερωμένη έκδοση κώδικα ακραίου ρυθμού bit έχει μέχρι στιγμής υιοθετηθεί μόνο στο LineageOS 15.1, αλλά όχι στην έκδοση 16.0.

Συμβατότητα συσκευής

Το SBC Dual Channel υποστηρίζεται σχεδόν από όλα τα ακουστικά, τα ηχεία και τις μονάδες κεφαλής αυτοκινήτου. Αυτό δεν είναι περίεργο - το πρότυπο απαιτεί την υποστήριξή του σε οποιεσδήποτε συσκευές αποκωδικοποίησης. Υπάρχει ένας μικρός αριθμός συσκευών στις οποίες αυτή η λειτουργία προκαλεί προβλήματα, αλλά πρόκειται για μεμονωμένες περιπτώσεις.
Περισσότερες λεπτομέρειες σχετικά με τις συμβατές συσκευές μπορείτε να βρείτε στη διεύθυνση 4pda ή xda-developers.

Σύγκριση διαφορών ήχου

Έφτιαξα μια υπηρεσία web που κωδικοποιεί τον ήχο στο SBC (καθώς και το aptX και το aptX HD) σε πραγματικό χρόνο, απευθείας στο πρόγραμμα περιήγησης. Με αυτό, μπορείτε να συγκρίνετε τον ήχο διαφορετικών προφίλ SBC και άλλων κωδικοποιητών, χωρίς να μεταδίδετε ήχο μέσω Bluetooth, σε ενσύρματα ακουστικά, ηχεία και την αγαπημένη σας μουσική, καθώς και να αλλάξετε τις παραμέτρους κωδικοποίησης απευθείας κατά την αναπαραγωγή ήχου.
btcodecs.valdikss.org.ru/sbc-encoder

Επικοινωνήστε με τους προγραμματιστές Android

Έγραψα σε πολλούς προγραμματιστές στοίβας Bluetooth στην Google ζητώντας τους να εξετάσουν το ενδεχόμενο συμπερίληψης ενημερώσεων κώδικα στον κύριο κλάδο Android - AOSP, αλλά δεν έλαβα ούτε μία απάντηση. Τα μπαλώματα μου μέσα Σύστημα ενημέρωσης κώδικα Gerrit για Android παρέμεινε επίσης χωρίς σχόλια από κανέναν εμπλεκόμενο.
Θα ήμουν ευτυχής αν μπορούσα να λάβω κάποια βοήθεια για να έρθω σε επαφή με τους προγραμματιστές της Google και να φέρω το SBC HD στο Android. Το patch στο gerrit είναι ήδη ξεπερασμένο (αυτή είναι μια από τις πρώτες αναθεωρήσεις) και θα το ενημερώσω εάν οι προγραμματιστές ενδιαφέρονται για τις αλλαγές μου (δεν είναι εύκολο για μένα να το ενημερώσω, δεν έχω συσκευές συμβατές με Android Q ).

Συμπέρασμα

Οι χρήστες smartphone με LineageOS, Resurrection Remix και υλικολογισμικό crDroid μπορούν να απολαμβάνουν βελτιωμένη ποιότητα ήχου αυτήν τη στιγμή, απλώς ενεργοποιήστε την επιλογή στις ρυθμίσεις της συσκευής Bluetooth. Οι χρήστες Linux μπορούν επίσης να λάβουν αυξημένο ρυθμό μετάδοσης bit SBC με την εγκατάσταση έμπλαστρο από το Pali Rohar, το οποίο, μεταξύ άλλων, προσθέτει υποστήριξη για κωδικοποιητές aptX, aptX HD και FastStream.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο