Πίνακας περιεχομένων:

Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino: 10 βήματα
Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino: 10 βήματα

Βίντεο: Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino: 10 βήματα

Βίντεο: Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino: 10 βήματα
Βίντεο: ΑΣΥΡΜΑΤΑ ΔΙΚΤΥΑ ΑΙΣΘΗΤΗΡΩΝ ΔΡ. ΔΙΟΝ. ΚΑΝΔΡΗΣ 2024, Ιούλιος
Anonim
Image
Image
Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino
Επεξεργασία ήχου και ψηφιακού σήματος Bluetooth: ένα πλαίσιο Arduino

Περίληψη

Όταν σκέφτομαι το Bluetooth σκέφτομαι τη μουσική, αλλά δυστυχώς οι περισσότεροι μικροελεγκτές δεν μπορούν να παίξουν μουσική μέσω Bluetooth. Το Raspberry Pi μπορεί, αλλά αυτός είναι ένας υπολογιστής. Θέλω να αναπτύξω ένα πλαίσιο βασισμένο σε Arduino για μικροελεγκτές για αναπαραγωγή ήχου μέσω Bluetooth. Για να λυγίσω πλήρως τους μυς του μικροελεγκτή μου, θα προσθέσω επεξεργασία ψηφιακού σήματος σε πραγματικό χρόνο (DSP) στον ήχο (φιλτράρισμα υψηλής διέλευσης, φιλτράρισμα χαμηλής διέλευσης και συμπίεση δυναμικού εύρους). Για το κεράσι από πάνω, θα προσθέσω έναν διακομιστή ιστού που μπορεί να χρησιμοποιηθεί για να διαμορφώσει το DSP ασύρματα. Το ενσωματωμένο βίντεο δείχνει τα βασικά στοιχεία του ήχου Bluetooth σε δράση. Μου δείχνει επίσης ότι χρησιμοποιώ τον διακομιστή ιστού για να εκτελέσω φιλτράρισμα υψηλής διέλευσης, φιλτράρισμα χαμηλής διέλευσης και συμπίεση δυναμικού εύρους. Η πρώτη χρήση της συμπίεσης δυναμικού εύρους προκαλεί σκόπιμα παραμόρφωση ως παράδειγμα κακών επιλογών παραμέτρων. Το δεύτερο παράδειγμα εξαλείφει αυτήν την παραμόρφωση.

Για αυτό το έργο, ο ESP32 είναι ο μικροελεγκτής επιλογής. Κοστίζει λιγότερο από £ 10 και είναι εξοπλισμένο με ADC, DAC, Wifi, Bluetooth Low Energy, Bluetooth Classic και επεξεργαστή διπλού πυρήνα 240MHz. Το ενσωματωμένο DAC μπορεί τεχνικά να αναπαράγει ήχο, αλλά δεν θα ακούγεται υπέροχο. Αντ 'αυτού, θα χρησιμοποιήσω τον στερεοφωνικό αποκωδικοποιητή Adafruit I2S για να παράγω ένα σήμα γραμμής. Αυτό το σήμα μπορεί εύκολα να σταλεί σε οποιοδήποτε σύστημα HiFi για άμεση προσθήκη ασύρματου ήχου στο υπάρχον σύστημα HiFi.

Προμήθειες

Ας ελπίσουμε ότι οι περισσότεροι κατασκευαστές θα έχουν σανίδες, άλτες, καλώδια USB, κολλητήρες τροφοδοσίας και θα πρέπει να ξοδέψουν μόνο 15 λίρες για το ESP32 και τον στερεοφωνικό αποκωδικοποιητή. Εάν όχι, όλα τα απαιτούμενα μέρη παρατίθενται παρακάτω.

  • Ένα ESP32 - δοκιμασμένο σε ESP32 -PICO -KIT και TinyPico - 9,50// 24 £
  • Στερεοφωνικός αποκωδικοποιητής Adafruit I2S - 5,51 λίρες
  • Breadboard - £ 3- £ 5 το καθένα
  • Καλώδια βραχυκυκλωτήρων - 3 λίρες
  • Ενσύρματα ακουστικά/σύστημα Hi -Fi - £££
  • Κεφαλίδες ώθησης ή συγκολλητικό σίδερο - 2,10 / / 30 £
  • Καλώδιο Micro USB - 2.10// £ 3
  • Υποδοχή 3,5 mm σε RCA/ υποδοχή 3,5 mm σε υποδοχή (ή ό, τι χρειάζεται το ηχείο σας) - 2,40// 1,50
  • Τροφοδοσία USB - 5 £

Βήμα 1: Κατασκευή - το Breadboard

Κατασκευή - το Breadboard
Κατασκευή - το Breadboard

Εάν αγοράσατε το ESP32-PICO-KIT δεν θα χρειαστεί να κολλήσετε καμία καρφίτσα καθώς έρχεται προ-συγκολλημένη. Απλά τοποθετήστε το στο ψωμί.

Βήμα 2: Κατασκευή - Push Headers/συγκόλληση

Κατασκευή - Push Headers/συγκόλληση
Κατασκευή - Push Headers/συγκόλληση
Κατασκευή - Push Headers/συγκόλληση
Κατασκευή - Push Headers/συγκόλληση

Εάν έχετε κολλητήρι, κολλήστε τις καρφίτσες στον στερεοφωνικό αποκωδικοποιητή σύμφωνα με τις οδηγίες στην ιστοσελίδα της Adafruit. Κατά τη στιγμή της γραφής, το κολλητήρι μου ήταν στη δουλειά το οποίο ήταν κλειδωμένο. Δεν ήθελα να πληρώσω για ένα προσωρινό συγκολλητικό σίδερο, οπότε έκοψα μερικές κεφαλίδες από το πιμορώνι. Τα έκοψα ώστε να ταιριάζουν στον στερεοφωνικό αποκωδικοποιητή. Αυτή δεν είναι η καλύτερη λύση (και όχι πώς προορίζονταν να χρησιμοποιηθούν οι κεφαλίδες) αλλά είναι η φθηνότερη εναλλακτική λύση σε ένα συγκολλητικό σίδερο. Τοποθετήστε την κεφαλίδα κοπής στο breadboard. Θα χρειαστείτε μόνο 1 γραμμή 6 ακίδων για τον αποκωδικοποιητή. Μπορείτε να προσθέσετε άλλα έξι στην άλλη πλευρά για σταθερότητα, αλλά αυτό δεν είναι απαραίτητο για αυτό το πρωτότυπο σύστημα. Οι καρφίτσες για να τοποθετήσετε τις κεφαλίδες είναι vin, 3vo, gnd, wsel, din και bclk.

Βήμα 3: Κατασκευή - Καλωδίωση των ακίδων τροφοδοσίας

Κατασκευή - Καλωδίστε τις ακίδες ισχύος
Κατασκευή - Καλωδίστε τις ακίδες ισχύος

Τοποθετήστε τον Stereo αποκωδικοποιητή στις κεφαλίδες push (vin, 3vo, gnd, wsel, din και bclk pins) και σπρώξτε τα σταθερά μεταξύ τους. Και πάλι, αυτό θα πρέπει ιδανικά να γίνει με ένα συγκολλητικό σίδερο, αλλά έπρεπε να αυτοσχεδιάσω. Θα παρατηρήσετε ότι όλα τα καλώδια σε αυτό το εκπαιδευτικό είναι μπλε. Αυτό συμβαίνει επειδή δεν είχα καθόλου καλώδια για άλματα, οπότε έκοψα 1 μακρύ σύρμα σε μικρότερα κομμάτια. Επίσης, είμαι αχρωματοψία και δεν με ενδιαφέρει πολύ το χρώμα του σύρματος. Οι ακίδες τροφοδοσίας συνδέονται ως εξής:

3v3 (ESP32) -> σε vin σε στερεοφωνικό αποκωδικοποιητή

gnd (ESP32) -> για gnd σε στερεοφωνικό αποκωδικοποιητή

Βήμα 4: Κατασκευή - καλωδίωση I2S

Κατασκευή - καλωδίωση I2S
Κατασκευή - καλωδίωση I2S

Για να στείλουμε τον ήχο Bluetooth από το ESP32 στον στερεοφωνικό αποκωδικοποιητή, θα χρησιμοποιήσουμε μια μέθοδο ψηφιακής επικοινωνίας που ονομάζεται I2S. Ο στερεοφωνικός αποκωδικοποιητής λαμβάνει αυτό το ψηφιακό σήμα και το μετατρέπει σε αναλογικό σήμα που μπορεί να συνδεθεί σε ηχείο ή HiFi. Το I2S απαιτεί μόνο 3 καλώδια και είναι αρκετά απλό για κατανόηση. Η γραμμή ρολογιού δυαδικών ψηφίων (bclk) γυρίζει ψηλά και χαμηλά για να δείξει ότι μεταδίδεται ένα νέο bit. Η γραμμή εξόδου δεδομένων (dout) γίνεται υψηλή ή χαμηλή για να δείξει εάν αυτό το bit έχει τιμή 0 ή 1 και η γραμμή επιλογής λέξης (wsel) γυρίζει υψηλή ή χαμηλή για να δείξει εάν μεταδίδεται το αριστερό ή το δεξί κανάλι. Δεν υποστηρίζει κάθε μικροελεγκτής το I2S αλλά το ESP32 έχει 2 γραμμές I2S. Αυτό το καθιστά προφανή επιλογή για αυτό το έργο.

Η καλωδίωση έχει ως εξής:

27 (ESP32) -> wsel (στερεοφωνικός αποκωδικοποιητής)

25 (ESP32) -> din (στερεοφωνικός αποκωδικοποιητής)

26 (ESP32) -> bclk (στερεοφωνικός αποκωδικοποιητής)

Βήμα 5: Εγκατάσταση της βιβλιοθήκης BtAudio

Εγκατάσταση της βιβλιοθήκης BtAudio
Εγκατάσταση της βιβλιοθήκης BtAudio
Εγκατάσταση της Βιβλιοθήκης BtAudio
Εγκατάσταση της Βιβλιοθήκης BtAudio

Εάν δεν τα έχετε ήδη εγκατεστημένα, εγκαταστήστε το Arduino IDE και τον πυρήνα Arduino για ESP32. Μόλις τα εγκαταστήσετε, επισκεφθείτε τη σελίδα μου στο Github και κάντε λήψη του αποθετηρίου. Στο Arduino IDE κάτω από το Sketch >> Include Library >> επιλέξτε "Προσθήκη βιβλιοθήκης. ZIP". Στη συνέχεια, επιλέξτε το αρχείο zip που έχετε κατεβάσει. Αυτό θα πρέπει να προσθέσει τη βιβλιοθήκη μου btAudio στις βιβλιοθήκες σας Arduino. Για να χρησιμοποιήσετε τη βιβλιοθήκη θα πρέπει να συμπεριλάβετε τη σχετική κεφαλίδα στο σκίτσο του Arduino. Θα το δείτε στο επόμενο βήμα.

Βήμα 6: Χρήση της βιβλιοθήκης BtAudio

Χρήση της βιβλιοθήκης BtAudio
Χρήση της βιβλιοθήκης BtAudio
Χρήση της βιβλιοθήκης BtAudio
Χρήση της βιβλιοθήκης BtAudio

Μόλις εγκατασταθεί, συνδέστε το ESP32 στον υπολογιστή σας μέσω micro USB και, στη συνέχεια, συνδέστε τον στερεοφωνικό αποκωδικοποιητή στο ηχείο σας με το καλώδιο 3,5 mm. Πριν ανεβάσετε το σκίτσο θα χρειαστεί να αλλάξετε κάποια πράγματα στον επεξεργαστή Arduino. Αφού επιλέξετε τον πίνακα σας, θα χρειαστεί να επεξεργαστείτε το σχήμα διαμερίσματος στην περιοχή Εργαλεία >> Σχήμα κατατμήσεων και να επιλέξετε είτε "Όχι OTA (Μεγάλη ΕΦΑΡΜΟΓΗ)" ή "Ελάχιστο SPIFFS (Μεγάλες Εφαρμογές με ΟΤΑ)". Αυτό είναι απαραίτητο επειδή αυτό το έργο χρησιμοποιεί τόσο WiFi όσο και Bluetooth που είναι αμφότερες βιβλιοθήκες με μεγάλη μνήμη. Μόλις το κάνετε αυτό, ανεβάστε το παρακάτω σκίτσο στο ESP32.

#περιλαμβάνω

// Ορίζει το όνομα της συσκευής ήχου btAudio audio = btAudio ("ESP_Speaker"); void setup () {// μεταδίδει δεδομένα ήχου στο ESP32 audio.begin (); // εξάγει τα ληφθέντα δεδομένα σε ένα I2S DAC int bck = 26; int ws = 27; int dout = 25; ήχος. I2S (bck, dout, ws); } void loop () {}

Το σκίτσο μπορεί γενικά να χωριστεί σε 3 βήματα:

  1. Δημιουργήστε ένα παγκόσμιο αντικείμενο btAudio που ορίζει το "όνομα Bluetooth" του ESP32 σας
  2. Διαμορφώστε το ESP32 για λήψη ήχου με τη μέθοδο btAudio:: begin
  3. Ρυθμίστε τις ακίδες I2S με τη μέθοδο btAudio:: I2S.

Αυτό είναι από την πλευρά του λογισμικού! Τώρα το μόνο που χρειάζεται να κάνετε είναι να ξεκινήσετε τη σύνδεση Bluetooth στο ESP32. Απλώς σαρώστε για νέες συσκευές στο τηλέφωνο/φορητό υπολογιστή/συσκευή αναπαραγωγής MP3 και θα εμφανιστεί το "ESP_Speaker". Μόλις είστε ευχαριστημένοι ότι όλα λειτουργούν (παίζει μουσική), μπορείτε να αποσυνδέσετε το ESP32 από τον υπολογιστή σας. Τροφοδοτήστε το με το τροφοδοτικό USB και θα θυμάται τον τελευταίο κωδικό που ανεβάσατε σε αυτό. Με αυτόν τον τρόπο, μπορείτε να αφήσετε το ESP32 σας κρυμμένο πίσω από το σύστημα HiFi για πάντα.

Βήμα 7: DSP - Φιλτράρισμα

Επέκταση του δέκτη με επεξεργασία ψηφιακού σήματος

Αν ακολουθήσατε όλα τα βήματα (και δεν άφησα τίποτα), τώρα έχετε έναν πλήρως λειτουργικό δέκτη Bluetooth για το σύστημα HiFi. Ενώ αυτό είναι δροσερό, δεν ωθεί πραγματικά τον μικροελεγκτή στα όριά του. Το ESP32 έχει δύο πυρήνες που λειτουργούν στα 240MHz. Αυτό σημαίνει ότι αυτό το έργο δεν είναι μόνο ένας δέκτης. Έχει τη δυνατότητα να είναι δέκτης Bluetooth με επεξεργαστή ψηφιακού σήματος (DSP). Τα DSP εκτελούν ουσιαστικά μαθηματικές πράξεις στο σήμα σε πραγματικό χρόνο. Μια χρήσιμη λειτουργία ονομάζεται Filηφιακό φιλτράρισμα. Αυτή η διαδικασία εξασθενεί τις συχνότητες σε ένα σήμα κάτω ή πάνω από μια συγκεκριμένη συχνότητα διακοπής, ανάλογα με το αν χρησιμοποιείτε φίλτρο υψηλής διέλευσης ή χαμηλής διέλευσης.

Φίλτρα υψηλής διέλευσης

Τα φίλτρα High-Pass εξασθενίζουν τις συχνότητες κάτω από μια συγκεκριμένη ζώνη. Έχω δημιουργήσει μια βιβλιοθήκη φίλτρων για συστήματα Arduino με βάση τον κώδικα από το earlevel.com. Η κύρια διαφορά είναι ότι άλλαξα τη δομή της τάξης για να επιτρέψω την κατασκευή φίλτρων υψηλότερης τάξης πιο εύκολα. Τα φίλτρα υψηλότερης τάξης καταστέλλουν πιο αποτελεσματικά τις συχνότητες πέρα από τη διακοπή, αλλά απαιτούν πολύ περισσότερο υπολογισμό. Ωστόσο, με την τρέχουσα εφαρμογή, μπορείτε ακόμη και να χρησιμοποιήσετε φίλτρα 6ης τάξης για ήχο σε πραγματικό χρόνο!

Το σκίτσο είναι το ίδιο με αυτό που βρέθηκε στο προηγούμενο βήμα, εκτός από το ότι αλλάξαμε τον κύριο βρόχο. Για να ενεργοποιήσουμε τα φίλτρα χρησιμοποιούμε τη μέθοδο btAudio:: createFilter. Αυτή η μέθοδος δέχεται 3 ορίσματα. Το πρώτο είναι ο αριθμός των καταρράκτη φίλτρων. Ο αριθμός των καταρρακτών φίλτρου είναι η μισή σειρά του φίλτρου. Για ένα φίλτρο 6ης τάξης, το πρώτο όρισμα πρέπει να είναι 3. Για ένα φίλτρο 8ης τάξης, θα ήταν 4. Το δεύτερο όρισμα είναι η αποκοπή φίλτρου. Το έχω ρυθμίσει στα 1000Hz για να έχει πραγματικά δραματική επίδραση στα δεδομένα. Τέλος, καθορίζουμε τον τύπο του αρχείου με το τρίτο όρισμα. Αυτό θα πρέπει να είναι highpass για φίλτρο υψηλής διέλευσης και lowpass για φίλτρο χαμηλής διέλευσης. Το παρακάτω σενάριο αλλάζει τη διακοπή αυτής της συχνότητας μεταξύ 1000Hz και 2Hz. Θα πρέπει να ακούσετε μια δραματική επίδραση στα δεδομένα.

#περιλαμβάνω

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; ήχος. I2S (bck, dout, ws); } void loop () {delay (5000); audio.createFilter (3, 1000, highpass); καθυστέρηση (5000)? audio.createFilter (3, 2, highpass); }

Φίλτρα χαμηλής διέλευσης

Τα φίλτρα χαμηλής διέλευσης κάνουν το αντίθετο από τα φίλτρα υψηλής διέλευσης και καταστέλλουν συχνότητες πάνω από μια συγκεκριμένη συχνότητα. Μπορούν να εφαρμοστούν με τον ίδιο τρόπο όπως τα φίλτρα υψηλής διέλευσης, εκτός από το ότι απαιτούν αλλαγή του τρίτου ορίσματος σε lowpass. Για το παρακάτω σκίτσο, εναλλάσσω την αποκοπή χαμηλής διέλευσης μεταξύ 2000Hz και 20000Hz. Ας ελπίσουμε ότι θα ακούσετε τη διαφορά. Θα πρέπει να ακούγεται αρκετά σβηστό όταν το φίλτρο χαμηλής διέλευσης είναι στα 2000Hz.

#περιλαμβάνω

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; ήχος. I2S (bck, dout, ws) } void loop () {delay (5000); audio.createFilter (3, 2000, lowpass); καθυστέρηση (5000)? audio.createFilter (3, 20000, lowpass); }

Βήμα 8: DSP - Συμπίεση δυναμικού εύρους

Ιστορικό

Η συμπίεση δυναμικού εύρους είναι μια μέθοδος επεξεργασίας σήματος που προσπαθεί να εξισορροπήσει την ένταση του ήχου. Συμπιέζει δυνατούς ήχους, που ξεπερνούν ένα συγκεκριμένο όριο, στο επίπεδο των ήσυχων και στη συνέχεια, προαιρετικά ενισχύει και τα δύο. Το αποτέλεσμα είναι μια πολύ πιο ομοιόμορφη εμπειρία ακρόασης. Αυτό ήρθε πραγματικά χρήσιμο ενώ παρακολουθούσα μια παράσταση με πολύ δυνατή μουσική υπόκρουση και πολύ ήσυχα φωνητικά. Σε αυτή την περίπτωση, η απλή αύξηση της έντασης δεν βοήθησε καθώς αυτό ενίσχυσε μόνο τη μουσική υπόκρουση. Με συμπίεση δυναμικής εμβέλειας, θα μπορούσα να μειώσω τη δυνατή μουσική υπόκρουση στο επίπεδο των φωνητικών και να ακούσω τα πάντα ξανά σωστά.

Ο κώδικας

Η συμπίεση δυναμικής εμβέλειας δεν περιλαμβάνει μόνο τη μείωση της έντασης ή τον περιορισμό του σήματος. Είναι λίγο πιο έξυπνο από αυτό. Εάν χαμηλώσετε την ένταση, οι ήχοι θα μειωθούν καθώς και οι δυνατοί. Ένας τρόπος γύρω από αυτό είναι να οριοθετήσετε το σήμα, αλλά αυτό οδηγεί σε σοβαρή παραμόρφωση. Η συμπίεση δυναμικής εμβέλειας περιλαμβάνει ένα συνδυασμό μαλακού κατωφλιού και φιλτραρίσματος για να ελαχιστοποιήσει την παραμόρφωση που θα έπαιρνε εάν επρόκειτο να οριοθετήσετε/αποκόψετε το σήμα. Το αποτέλεσμα είναι ένα σήμα όπου οι δυνατοί ήχοι «κόβονται» χωρίς παραμόρφωση και οι ήσυχοι αφήνονται ως έχουν. Ο παρακάτω κώδικας αλλάζει μεταξύ τριών διαφορετικών επιπέδων συμπίεσης.

  1. Συμπίεση με παραμόρφωση
  2. Συμπίεση χωρίς παραμόρφωση
  3. Χωρίς συμπίεση

#περιλαμβάνω

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; ήχος. I2S (bck, dout, ws); } void loop () {delay (5000); audio.compress (30, 0.0001, 0.0001, 10, 10, 0); καθυστέρηση (5000)? audio.compress (30, 0.0001, 0.1, 10, 10, 0); καθυστέρηση (5000)? audio.decompress (); }

Η συμπίεση δυναμικού εύρους είναι περίπλοκη και οι μέθοδοι συμπίεσης btAudio:: έχουν πολλές παραμέτρους. Θα προσπαθήσω να τα εξηγήσω (με τη σειρά) εδώ:

  1. Κατώφλι - Το επίπεδο στο οποίο ο ήχος μειώνεται (μετριέται σε ντεσιμπέλ)
  2. Χρόνος επίθεσης - Ο χρόνος που χρειάζεται για να ξεκινήσει ο συμπιεστής να λειτουργήσει μόλις ξεπεραστεί το όριο
  3. Χρόνος απελευθέρωσης - Ο χρόνος που χρειάζεται για να σταματήσει να λειτουργεί ο συμπιεστής.
  4. Αναλογία μείωσης - ο παράγοντας με τον οποίο συμπιέζεται ο ήχος.
  5. Πλάτος γόνατος - Το πλάτος (σε ντεσιμπέλ) γύρω από το κατώφλι στο οποίο λειτουργεί μερικώς ο συμπιεστής (πιο φυσικός ήχος).
  6. Το κέρδος (ντεσιμπέλ) που προστέθηκε στο σήμα μετά τη συμπίεση (αύξηση/μείωση έντασης)

Η πολύ ηχητική παραμόρφωση κατά την πρώτη χρήση της συμπίεσης είναι επειδή το κατώφλι είναι πολύ χαμηλό και τόσο ο χρόνος επίθεσης όσο και ο χρόνος απελευθέρωσης είναι πολύ σύντομοι με αποτέλεσμα μια σκληρή συμπεριφορά κατωφλίου. Αυτό λύνεται σαφώς στη δεύτερη περίπτωση αυξάνοντας τον χρόνο απελευθέρωσης. Αυτό ουσιαστικά προκαλεί τον συμπιεστή να λειτουργεί με πολύ πιο ομαλό τρόπο. Εδώ, έχω δείξει μόνο πώς η αλλαγή 1 παραμέτρου μπορεί να έχει δραματική επίδραση στον ήχο. Τώρα είναι η σειρά σας να πειραματιστείτε με διαφορετικές παραμέτρους.

Η εφαρμογή (τα μαγικά μαθηματικά - προαιρετικά)

Διαπίστωσα ότι η εφαρμογή της συμπίεσης δυναμικής εμβέλειας ήταν αφελώς προκλητική. Ο αλγόριθμος απαιτεί τη μετατροπή ενός ακέραιου 16-bit σε ντεσιμπέλ και στη συνέχεια τον μετατρέπει ξανά σε έναν ακέραιο 16-bit αφού έχετε επεξεργαστεί το σήμα. Παρατήρησα ότι μια γραμμή κώδικα χρειάζονταν 10 μικροδευτερόλεπτα για την επεξεργασία στερεοφωνικών δεδομένων. Καθώς ο στερεοφωνικός ήχος δειγματοληψίας στα 44,1 KHz αφήνει μόνο 11,3 μικροδευτερόλεπτα για το DSP, αυτό είναι απαράδεκτα αργό… Ωστόσο, συνδυάζοντας έναν μικρό πίνακα αναζήτησης (400 byte) και μια διαδικασία παρεμβολής που βασίζεται στις διαιρεμένες διαφορές του Netwon, μπορούμε να αποκτήσουμε ακρίβεια σχεδόν 17 bit σε 0,2 μικροδευτερόλεπτα Το Έχω επισυνάψει ένα έγγραφο pdf με όλα τα μαθηματικά για τους πραγματικά ενδιαφερόμενους. Είναι περίπλοκο, σας έχουν προειδοποιήσει!

Βήμα 9: Η διασύνδεση Wifi

Η διασύνδεση Wifi
Η διασύνδεση Wifi
Η διασύνδεση Wifi
Η διασύνδεση Wifi

Τώρα έχετε έναν δέκτη Bluetooth ικανό να εκτελεί DSP σε πραγματικό χρόνο. Δυστυχώς, εάν θέλετε να αλλάξετε οποιαδήποτε από τις παραμέτρους DSP, θα πρέπει να αποσυνδεθείτε από το HiFi, να ανεβάσετε ένα νέο σκίτσο και στη συνέχεια να επανασυνδεθείτε. Αυτό είναι ακατάστατο. Για να το διορθώσω, ανέπτυξα έναν διακομιστή ιστού που μπορείτε να χρησιμοποιήσετε για να επεξεργαστείτε όλες τις παραμέτρους DSP χωρίς να επανασυνδεθείτε στον υπολογιστή σας. Το σκίτσο για τη χρήση του διακομιστή ιστού είναι παρακάτω.

#περιλαμβάνω

#include btAudio audio = btAudio ("ESP_Speaker"); webDSP web? void setup () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; ήχος. I2S (bck, dout, ws); // αντικαταστήστε με το αναγνωριστικό WiFi και τον κωδικό πρόσβασής σας const char* ssid = "SSID"; const char* password = "PASSWORD"; web.begin (ssid, κωδικός πρόσβασης και ήχος); } void loop () {web._server.handleClient (); }

Ο κώδικας εκχωρεί μια διεύθυνση IP στο ESP32 σας, την οποία μπορείτε να χρησιμοποιήσετε για πρόσβαση στην ιστοσελίδα. Την πρώτη φορά που εκτελείτε αυτόν τον κώδικα θα πρέπει να τον έχετε προσαρτήσει στον υπολογιστή σας. Με αυτόν τον τρόπο μπορείτε να δείτε τη διεύθυνση IP που έχει εκχωρηθεί στο ESP32 στη σειριακή οθόνη σας. Εάν θέλετε να αποκτήσετε πρόσβαση σε αυτήν την ιστοσελίδα, απλώς εισαγάγετε αυτήν τη διεύθυνση IP σε οποιοδήποτε πρόγραμμα περιήγησης ιστού (δοκιμασμένο στο chrome).

Μέχρι τώρα θα πρέπει να είμαστε εξοικειωμένοι με τη μέθοδο ενεργοποίησης του Bluetooth και του I2S. Η βασική διαφορά είναι η χρήση ενός αντικειμένου webDSP. Αυτό το αντικείμενο παίρνει το WIFI SSID και τον κωδικό πρόσβασής σας ως ορίσματα, καθώς και έναν δείκτη στο αντικείμενο btAudio. Στον κύριο βρόχο, παίρνουμε συνεχώς το αντικείμενο webDSP να ακούει εισερχόμενα δεδομένα από την ιστοσελίδα και στη συνέχεια να ενημερώνει τις παραμέτρους DSP. Ως σημείο κλεισίματος, πρέπει να σημειωθεί ότι τόσο το Bluetooth όσο και το Wifi χρησιμοποιούν το ίδιο ραδιόφωνο στο ESP32. Αυτό σημαίνει ότι ενδέχεται να χρειαστεί να περιμένετε έως και 10 δευτερόλεπτα από την εισαγωγή παραμέτρων στην ιστοσελίδα έως τη στιγμή που οι πληροφορίες φτάσουν πραγματικά στο ESP32.

Βήμα 10: Μελλοντικά σχέδια

Ας ελπίσουμε ότι έχετε απολαύσει αυτό το διδακτικό και τώρα έχετε προσθέσει Bluetooth Audio και DSP στο HiFi σας. Ωστόσο, πιστεύω ότι υπάρχει πολύς χώρος για ανάπτυξη σε αυτό το έργο και ήθελα απλώς να επισημάνω κάποιες μελλοντικές κατευθύνσεις που θα μπορούσα να ακολουθήσω.

  • Ενεργοποίηση ροής ήχου Wifi (για την καλύτερη ποιότητα ήχου)
  • Χρησιμοποιήστε ένα μικρόφωνο I2S για να ενεργοποιήσετε τις φωνητικές εντολές
  • αναπτύξτε έναν ελεγχόμενο ισοσταθμιστή WiFi
  • Κάντε το όμορφο (το breadboard δεν φωνάζει υπέροχο σχεδιασμό προϊόντος)

Όταν φτάσω στην υλοποίηση αυτών των ιδεών, θα κάνω περισσότερες οδηγίες. Or ίσως κάποιος άλλος να εφαρμόσει αυτές τις δυνατότητες. Αυτή είναι η χαρά να κάνουμε τα πάντα ανοιχτού κώδικα!

Συνιστάται: