Mündəricat:

Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi: 10 addım
Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi: 10 addım

Video: Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi: 10 addım

Video: Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi: 10 addım
Video: LG Smart televizorda Azerbaycan ve Türk kanallarının yıgılması#azerspace #turksat42e #turksat #kanal 2024, Noyabr
Anonim
Image
Image
Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi
Bluetooth Səs və Rəqəmsal Siqnal İşlənməsi: Arduino Çərçivəsi

Xülasə

Bluetooth haqqında düşünəndə musiqini düşünürəm, amma təəssüf ki, əksər mikrokontrollerlər Bluetooth vasitəsilə musiqi oxuya bilmirlər. Raspberry Pi edə bilər, amma bu bir kompüterdir. Bluetooth vasitəsilə səs çalması üçün mikrokontrollerlər üçün Arduino əsaslı bir çərçivə hazırlamaq istəyirəm. Mikrodenetleyicimin əzələlərini tam bükmək üçün səsi real vaxt rejimində Rəqəmsal Siqnal İşləmə (DSP) əlavə edəcəyəm (yüksək keçidli filtrasiya, aşağı keçidli filtrləmə və dinamik diapazonlu sıxılma). Üstdəki albalı üçün DSP -ni simsiz olaraq konfiqurasiya etmək üçün istifadə edilə bilən bir veb server əlavə edəcəyəm. Gömülü video, Bluetooth səsinin fəaliyyətdəki əsaslarını göstərir. Həm də bəzi yüksək keçidli süzgəclər, aşağı keçidli süzgəclər və dinamik diapazonların sıxılması üçün veb serverdən istifadə etdiyimi göstərir. Dinamik aralığın sıxılmasının ilk istifadəsi, pis parametr seçimlərinə misal olaraq məqsədyönlü şəkildə təhrifə səbəb olur. İkinci nümunə bu təhrifi aradan qaldırır.

Bu layihə üçün ESP32 seçilən mikro nəzarətçidir. Qiyməti 10 funtdan aşağıdır və ADC, DAC, Wifi, Bluetooth Aşağı Enerji, Bluetooth Klassik və 240MHz cüt nüvəli prosessorla təchiz olunmuşdur. Daxili DAC texniki cəhətdən səs oxuya bilər, amma əla səslənməyəcək. Bunun əvəzinə Adafruit I2S stereo dekoderindən bir xətt çıxışı siqnalı çıxarmaq üçün istifadə edəcəyəm. Mövcud HiFi sisteminizə dərhal simsiz səs əlavə etmək üçün bu siqnal istənilən HiFi sisteminə asanlıqla göndərilə bilər.

Təchizat

Ümid edirik ki, əksər istehsalçıların çörək taxtaları, atlayıcıları, USB kabelləri, enerji təchizatı lehimləmə ütüləri olacaq və yalnız ESP32 və stereo dekoder üçün 15 funt xərcləmək məcburiyyətində qalacaqlar. Əks təqdirdə, lazım olan bütün hissələr aşağıda verilmişdir.

  • Bir ESP32 - ESP32 -PICO -KIT və TinyPico -da sınaqdan keçirilmiş - 9.50/ 24 funt sterlinq
  • Adafruit I2S Stereo Dekoder - 5,51 funt
  • Çörək taxtası - hər biri 3-5 funt sterlinq
  • Jumper telləri - 3 funt
  • Simli qulaqlıq/Hi -Fi sistemi - £££
  • Push Heads və ya Lehimləmə Dəmiri - 2.10 / £ 30
  • Mikro USB kabeli - 2,10 funt sterlinq/ 3 funt
  • 3.5 mm RCA konnektoru/ 3.5 mm jak (və ya dinamikinizin ehtiyacı olan hər şey) - £ 2.40/ £ 1.50
  • USB Güc Təchizatı - 5 funt

Addım 1: Tikinti - Breadboard

Tikinti - Çörək lövhəsi
Tikinti - Çörək lövhəsi

ESP32-PICO-KIT almış olsanız, əvvəlcədən lehimli olduğu üçün heç bir sancaq lehimləməyəcəksiniz. Sadəcə çörək taxtasına qoyun.

Addım 2: Tikinti - Başlıqları itələyin/lehimləyin

Tikinti - Başlıqları itələyin/lehimləyin
Tikinti - Başlıqları itələyin/lehimləyin
Tikinti - Push Headers/lehimləmə
Tikinti - Push Headers/lehimləmə

Bir lehimləmə dəmiriniz varsa, pinləri Adafruit veb saytındakı təlimatlara uyğun olaraq stereo dekoderə lehimləyin. Yazı vaxtı mənim lehimləmə dəmirim kilidli vəziyyətdə idi. Müvəqqəti bir lehimləmə dəmiri ödəmək istəmədim, buna görə pimoronidən bəzi itələmə başlıqlarını kəsdim. Mən onları kəsdim ki, stereo dekoderə uyğun olsun. Bu ən yaxşı həll deyil (və başlıqların necə istifadə olunacağı deyil), lakin bir lehimləmə dəmirinə ən ucuz alternativdir. Kəsilmiş başlığı çörək taxtasına yapışdırın. Dekoder üçün yalnız 6 pinli 1 xəttə ehtiyacınız var. Sabitlik üçün digər tərəfə daha altı əlavə edə bilərsiniz, lakin bu prototip sistemi üçün bu lazım deyil. Başlıqları daxil etmək üçün pinlər vin, 3vo, gnd, wsel, din və bclk -dir.

Addım 3: Tikinti - Güc pinlərini bağlayın

Tikinti - Güc pinlərini bağlayın
Tikinti - Güc pinlərini bağlayın

Stereo dekoderi itələyici başlıqlara (vin, 3vo, gnd, wsel, din və bclk pinləri) yerləşdirin və möhkəm bir şəkildə itələyin. Yenə də bu ideal bir lehimləmə dəmiri ilə edilməlidir, amma doğaçlama etmək məcburiyyətində qaldım. Bu təlimatdakı bütün tellərin mavi olduğunu görəcəksiniz. Məndə heç bir tullanan tel olmadığı üçün 1 uzun teli daha kiçik parçalara ayırdım. Həm də rəngsizəm və telin rənginə əhəmiyyət vermirəm. Elektrik pinləri aşağıdakı kimi bağlanır:

3v3 (ESP32) -> stereo kod deşifratoru açmaq üçün

gnd (ESP32) -> stereo dekoderdə gnd

Addım 4: Tikinti - I2S Kablolama

Tikinti - I2S Kablolama
Tikinti - I2S Kablolama

Bluetooth səsini ESP32 -dən stereo dekoderə göndərmək üçün I2S adlı rəqəmsal ünsiyyət metodundan istifadə edəcəyik. Stereo dekoder bu rəqəmsal siqnalı alacaq və onu dinamikə və ya HiFi -yə qoşula bilən analoq siqnala çevirəcək. I2S yalnız 3 tel tələb edir və başa düşmək olduqca sadədir. Bit saatı (bclk) xətti yeni bir bitin ötürüldüyünü göstərmək üçün yuxarı və aşağıya çevrilir. Məlumat çıxışı xətti (dout) o bitin 0 və ya 1 dəyərinə malik olduğunu göstərmək üçün yuxarı və ya aşağıya çevrilir və söz seçmək xətti (wsel) sola və ya sağ kanalın ötürülüb-ötürülmədiyini göstərmək üçün yuxarı və ya aşağıya çevrilir. Hər mikrokontrolör I2S -ni dəstəkləmir, lakin ESP32 -də 2 I2S xətti var. Bu, bu layihə üçün açıq bir seçimdir.

Kablolama aşağıdakı kimidir:

27 (ESP32) -> wsel (Stereo dekoder)

25 (ESP32) -> din (Stereo dekoder)

26 (ESP32) -> bclk (Stereo dekoder)

Addım 5: BtAudio Kitabxanasının quraşdırılması

BtAudio Kitabxanasının quraşdırılması
BtAudio Kitabxanasının quraşdırılması
BtAudio Kitabxanasının quraşdırılması
BtAudio Kitabxanasının quraşdırılması

Onları hələ yükləməmisinizsə, Arduino IDE və ESP32 üçün Arduino nüvəsini quraşdırın. Quraşdırdıqdan sonra Github səhifəmə daxil olun və depoyu yükləyin. Arduino IDE daxilində Sketch >> Kitabxanaya Daxil et >> altında "ZIP kitabxana əlavə et" seçin. Sonra yüklənmiş zip faylını seçin. Bu mənim btAudio kitabxanamı Arduino kitabxanalarınıza əlavə etməlidir. Kitabxanadan istifadə etmək üçün Arduino eskizinə müvafiq başlığı daxil etməlisiniz. Bunu növbəti addımda görəcəksiniz.

Addım 6: BtAudio Kitabxanasından istifadə edin

BtAudio Kitabxanasından istifadə
BtAudio Kitabxanasından istifadə
BtAudio Kitabxanasından istifadə
BtAudio Kitabxanasından istifadə

Quraşdırıldıqdan sonra ESP32 -ni mikro USB vasitəsilə kompüterinizə qoşun və sonra stereo dekoderinizi 3,5 mm telinizlə dinamikinizə qoşun. Eskizi yükləməzdən əvvəl Arduino redaktorunda bəzi şeyləri dəyişdirməlisiniz. Lövhənizi seçdikdən sonra Alətlər >> Bölmə Sxemi altında bölmə sxemini redaktə etməli və ya "OTA (Böyük APP)" və ya "Minimum SPIFFS (OTA ilə Böyük APPS)" seçimini etməlisiniz. Bu lazımdır, çünki bu layihə həm yaddaşlı ağır kitabxanalar olan həm WiFi, həm də Bluetooth istifadə edir. Bunu etdikdən sonra aşağıdakı eskizi ESP32 -ə yükləyin.

#daxil edin

// btAudio audio = btAudio ("ESP_Speaker") audio cihazının adını təyin edir; void setup () {// audio məlumatları ESP32 audio.begin () -ə ötürür; // alınan məlumatları I2S DAC -a çıxarır int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } boşluq döngəsi () {}

Eskiz ümumilikdə 3 mərhələyə bölünə bilər:

  1. ESP32 cihazınızın "Bluetooth adını" təyin edən qlobal btAudio obyekti yaradın
  2. ESP32 -ni btAudio:: begin metodu ilə səs qəbul etmək üçün konfiqurasiya edin
  3. BtAudio:: I2S metodu ilə I2S pinlərini təyin edin.

Bu proqram tərəfindədir! İndi etməniz lazım olan şey, ESP32 cihazınıza Bluetooth bağlantısını başlatmaqdır. Telefonunuzda/dizüstü kompüterinizdə/MP3 pleyerinizdə yeni cihazları axtarın və "ESP_Speaker" görünəcək. Hər şeyin işlədiyindən (musiqi çalır) məmnun olduqdan sonra ESP32 -ni kompüterinizdən ayıra bilərsiniz. USB enerji təchizatı ilə işə salın və ona yüklədiyiniz son kodu xatırlayacaq. Beləliklə, ESP32 -ni HiFi sisteminizin arxasında əbədi olaraq tərk edə bilərsiniz.

Addım 7: DSP - Filtrləmə

Rəqəmsal Siqnal İşlənməsi ilə Alıcının Genişləndirilməsi

Bütün addımları izləsəniz (və heç bir şey buraxmadım), indi HiFi sisteminiz üçün tam işləyən bir Bluetooth qəbulediciniz var. Bu sərin olsa da, mikro nəzarətçini həddinə çatdırmır. ESP32, 240MHz tezliyində işləyən iki nüvəyə malikdir. Bu o deməkdir ki, bu layihə yalnız bir alıcıdan daha çox şeydir. Rəqəmsal Siqnal Prosessoru (DSP) olan Bluetooth qəbuledicisi olmaq qabiliyyətinə malikdir. DSP-lər əslində siqnal üzərində real vaxt rejimində riyazi əməliyyatlar həyata keçirirlər. Faydalı bir əməliyyata Rəqəmsal Süzmə deyilir. Bu proses, yüksək keçid və ya aşağı keçid filtrindən istifadə etməyinizdən asılı olaraq müəyyən bir kəsmə tezliyinin altında və ya üstündə bir siqnalda tezlikləri zəiflədir.

Yüksək keçid filtrləri

High-Pass filtrləri müəyyən bir diapazonun altındakı tezlikləri zəiflədir. Earlevel.com saytının koduna əsaslanaraq Arduino sistemləri üçün filtr kitabxanası qurdum. Əsas fərq, daha yüksək dərəcəli filtrlərin daha asan qurulmasına imkan vermək üçün sinif quruluşunu dəyişməyimdir. Yüksək dərəcəli filtrlər, kəsilmənizin kənarındakı tezlikləri daha təsirli şəkildə basdırır, lakin daha çox hesablama tələb edir. Bununla birlikdə, mövcud tətbiq ilə, hətta real vaxt səs üçün 6-cı dərəcəli filtrlərdən istifadə edə bilərsiniz!

Eskiz, əsas döngəni dəyişdirdiyimiz istisna olmaqla, əvvəlki addımda tapılanla eynidir. Filtrləri aktiv etmək üçün btAudio:: createFilter metodundan istifadə edirik. Bu üsul 3 arqument qəbul edir. Birincisi, filtr kaskadlarının sayıdır. Filtr kaskadlarının sayı filtrin yarısı qədərdir. 6 -cı dərəcəli filtr üçün ilk arqument 3 olmalıdır. 8 -ci dərəcəli filtr üçün 4 olardı. İkinci arqument filtr kəsilməsidir. Məlumatlara həqiqətən dramatik təsir göstərmək üçün bunu 1000Hz olaraq təyin etdim. Nəhayət, üçüncü arqumentlə fayl növünü təyin edirik. Bu yüksək keçidli filtr üçün yüksək keçidli və aşağı keçidli filtr üçün aşağı keçid olmalıdır. Aşağıdakı skript bu tezliyin kəsilməsini 1000Hz və 2Hz arasında dəyişir. Verilənlərə dramatik bir təsir eşitməlisiniz.

#daxil edin

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {gecikmə (5000); audio.createFilter (3, 1000, yüksək keçid); gecikmə (5000); audio.createFilter (3, 2, yüksək keçid); }

Aşağı keçidli filtrlər

Aşağı keçid filtrləri yüksək keçid filtrlərinin əksini edir və müəyyən bir tezliyin üstündəki tezlikləri bastırır. Üçüncü arqumentin aşağı keçid olaraq dəyişdirilməsini tələb etmələri istisna olmaqla, yüksək keçid filtrləri ilə eyni şəkildə həyata keçirilə bilər. Aşağıdakı eskiz üçün 2000Hz və 20000Hz arasında aşağı keçid həddini dəyişirəm. İnşallah, fərqi eşidəcəksiniz. Aşağı keçid filtri 2000 Hz-də olduqda olduqca səssiz səslənməlidir.

#daxil edin

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {gecikmə (5000); audio.createFilter (3, 2000, aşağı keçid); gecikmə (5000); audio.createFilter (3, 20000, aşağı keçid); }

Addım 8: DSP - Dinamik Aralıq Sıxılma

Fon

Dinamik aralığın sıxılması, səsin yüksəkliyini bərabərləşdirməyə çalışan bir siqnal işləmə üsuludur. Müəyyən bir eşikdən yuxarı qalxan yüksək səsləri sakit olanların səviyyəsinə sıxışdırır və sonra hər ikisini də gücləndirir. Nəticə daha çox eşitmə təcrübəsidir. Çox yüksək fon musiqisi və çox səssiz vokalları olan bir şou seyr edərkən bu həqiqətən faydalı oldu. Bu vəziyyətdə, yalnız səs səviyyəsini artırmaq kömək etmədi, çünki bu yalnız fon musiqisini gücləndirdi. Dinamik diapazonlu sıxılma ilə yüksək səsli fon musiqisini vokal səviyyəsinə endirə və hər şeyi yenidən düzgün eşidə bilərdim.

Kod

Dinamik aralığın sıxılması yalnız səsin aşağı salınması və ya siqnalın eşik həddini keçməsini nəzərdə tutmur. Bundan bir az daha ağıllıdır. Səs səviyyəsini aşağı salsanız, yüksək səslər olduğu kimi sakit səslər də azalacaq. Bunun bir yolu siqnalın həddini aşmaqdır, lakin bu ciddi təhriflə nəticələnir. Dinamik aralığa sıxılma, siqnalı eşik etmək/kəsmək istəsəniz alacağınız təhrifi minimuma endirmək üçün yumşaq eşik və süzgəcin birləşməsini ehtiva edir. Nəticə, yüksək səslərin təhrif edilmədən "kəsildiyi" və səssizlərin olduğu kimi qaldığı bir siqnaldır. Aşağıdakı kod üç fərqli sıxılma səviyyəsi arasında dəyişir.

  1. Təhrif ilə sıxılma
  2. Təhrif edilmədən sıxılma
  3. Sıxılma yoxdur

#daxil edin

btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {gecikmə (5000); audio.compress (30, 0.0001, 0.0001, 10, 10, 0); gecikmə (5000); audio.compress (30, 0.0001, 0.1, 10, 10, 0); gecikmə (5000); audio.decompress (); }

Dinamik aralığın sıxılması mürəkkəbdir və btAudio:: kompress metodlarının bir çox parametri var. Onları (sırayla) burada izah etməyə çalışacağam:

  1. Eşik - Səsin azalma səviyyəsi (desibellərlə ölçülür)
  2. Hücum vaxtı - Eşik həddi keçdikdən sonra kompressorun işə düşməsi üçün lazım olan vaxt
  3. Buraxılış vaxtı - Kompressorun işləməsini dayandırması üçün lazım olan vaxt.
  4. Azaltma Oranı - səsin sıxıldığı faktor.
  5. Diz Genişliyi - Kompressorun qismən işlədiyi eşik ətrafındakı eni (desibellərlə) (daha təbii səs).
  6. Sıxıldıqdan sonra siqnala əlavə olunan qazanc (desibel) (həcmi artır/azaldın)

Sıxışın ilk istifadəsindəki çox səsli təhrif, eşik həddinin çox aşağı olması və həm hücum vaxtı, həm də sərbəst buraxılma müddətinin çox qısa olması, nəticədə çətin bir eşik davranışı ilə nəticələnir. Bu, ikinci vəziyyətdə buraxılma müddətini artırmaqla aydın şəkildə həll olunur. Bu, əslində kompressorun daha hamar bir şəkildə işləməsinə səbəb olur. Burada yalnız 1 parametrin dəyişdirilməsinin səsə necə dramatik təsir göstərə biləcəyini göstərmişəm. İndi fərqli parametrləri sınamaq sizin növbənizdir.

İcra (sehrli riyaziyyat - isteğe bağlı)

Dinamik diapazon sıxışdırmasının sadəlövh şəkildə tətbiq edilməsinin çətin olduğunu gördüm. Alqoritm, 16 bitlik tam ədədin desibelə çevrilməsini və siqnal işləndikdən sonra yenidən 16 bitlik bir tamsayıya çevirməsini tələb edir. Bir kod xəttinin stereo məlumatları emal etmək üçün 10 mikrosaniyə çəkdiyini gördüm. 44.1 KHz -də nümunə götürülmüş stereo səs, DSP üçün cəmi 11.3 mikrosaniyəni tərk etdiyinə görə, bu qəbuledilməz dərəcədə yavaşdır … Ancaq kiçik bir axtarış masası (400 bayt) və Netwon -un bölünmüş fərqlərinə əsaslanan bir interpolasiya prosedurunu birləşdirərək 0.2 mikrosaniyədə təxminən 17 bit dəqiqlik əldə edə bilərik.. Həqiqətən maraqlananlar üçün bütün riyaziyyatı olan bir pdf sənəd əlavə etdim. Bu mürəkkəbdir, sənə xəbərdarlıq edilib!

Addım 9: Wifi interfeysi

Wifi interfeysi
Wifi interfeysi
Wifi interfeysi
Wifi interfeysi

İndi real vaxt rejimində DSP işlədə bilən Bluetooth qəbulediciniz var. Təəssüf ki, DSP parametrlərindən hər hansı birini dəyişdirmək istəyirsinizsə, HiFi -dən ayrılmalı, yeni bir eskiz yükləməli və sonra yenidən qoşulmalısınız. Bu hiyləgərdir. Bunu düzəltmək üçün kompüterinizə yenidən qoşulmadan bütün DSP parametrlərini düzəltmək üçün istifadə edə biləcəyiniz bir veb server hazırladım. Veb serverini istifadə etmək üçün eskiz aşağıda verilmişdir.

#daxil edin

#btAudio audio = btAudio ("ESP_Speaker") daxil edin; webDSP veb; void setup () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); // WiFi identifikatorunuz və parolunuzla əvəz edin const char* ssid = "SSID"; const char* parol = "PAROLA"; web.begin (ssid, parol və audio); } boşluq döngəsi () {web._server.handleClient (); }

Kod, ESP32 -yə veb səhifəsinə daxil olmaq üçün istifadə edə biləcəyiniz bir IP ünvanı təyin edir. Bu kodu ilk dəfə işə salanda onu kompüterinizə bağlamalısınız. ESP32 -yə təyin edilmiş IP ünvanını serial monitorunuzda görə bilərsiniz. Bu veb səhifəsinə daxil olmaq istəyirsinizsə, bu IP ünvanını hər hansı bir veb brauzerinə daxil edin (xromda sınaqdan keçirilmişdir).

İndiyə qədər Bluetooth və I2S -ni aktivləşdirmə üsulu ilə tanış olmalıyıq. Əsas fərq webDSP obyektinin istifadəsidir. Bu obyekt Wifi SSID və parolunuzu btAudio obyektinə işarə kimi arqument olaraq götürür. Əsas döngədə davamlı olaraq webDSP obyektini veb səhifədən daxil olan məlumatları dinləyib DSP parametrlərini yeniləyirik. Bağlama nöqtəsi olaraq qeyd etmək lazımdır ki, həm Bluetooth, həm də Wifi ESP32 -də eyni radiodan istifadə edir. Bu o deməkdir ki, veb səhifəyə parametrlər daxil etdikdən məlumatın həqiqətən ESP32 -ə çatana qədər 10 saniyə gözləmək lazım ola bilər.

Addım 10: Gələcək Planlar

Ümid edirik ki, bu təlimatdan zövq aldınız və indi HiFi -ə Bluetooth Audio və DSP əlavə etdiniz. Ancaq düşünürəm ki, bu layihədə böyümək üçün çox yer var və gələcəkdə götürə biləcəyim bəzi istiqamətləri göstərmək istədim.

  • Wifi səs axınını aktiv edin (ən yaxşı səs keyfiyyəti üçün)
  • Səs əmrlərini aktivləşdirmək üçün I2S mikrofonundan istifadə edin
  • WiFi nəzarətli ekvalayzer hazırlayın
  • Gözəlləşdirin (çörək taxtası əla məhsul dizaynını qışqırmır)

Bu fikirləri həyata keçirməyə başladığım zaman daha çox öyrədici şeylər edəcəm. Və ya bəlkə də başqaları bu xüsusiyyətləri həyata keçirəcək. Hər şeyi açıq mənbə etmək sevincidir!

Tövsiyə: