Mundarija:

Bluetooth audio va raqamli signallarni qayta ishlash: Arduino tizimi: 10 qadam
Bluetooth audio va raqamli signallarni qayta ishlash: Arduino tizimi: 10 qadam

Video: Bluetooth audio va raqamli signallarni qayta ishlash: Arduino tizimi: 10 qadam

Video: Bluetooth audio va raqamli signallarni qayta ishlash: Arduino tizimi: 10 qadam
Video: 38-dars: Analog va raqamli signallar. 2024, Noyabr
Anonim
Image
Image
Bluetooth audio va raqamli signallarni qayta ishlash: Arduino Framework
Bluetooth audio va raqamli signallarni qayta ishlash: Arduino Framework

Xulosa

Men Bluetooth haqida o'ylayotganimda, men musiqa haqida o'ylayman, lekin, afsuski, ko'p mikrokontrollerlar Bluetooth orqali musiqa ijro eta olmaydi. Raspberry Pi mumkin, lekin bu kompyuter. Bluetooth orqali audio ijro etish uchun mikrokontrollerlar uchun Arduino asosini yaratmoqchiman. Mening mikrokontrollerim mushaklarini to'la-to'kis moslashishi uchun men real vaqt rejimida raqamli signallarni qayta ishlash (DSP) ni ovozga qo'shaman (yuqori tezlikdagi filtrlash, past o'tkazgichli filtrlash va dinamik diapazonli siqish). Gilos tepasida men DSP -ni simsiz sozlash uchun ishlatilishi mumkin bo'lgan veb -serverni qo'shaman. O'rnatilgan videoda Bluetooth ovozining amaldagi asoslari ko'rsatilgan. Bu menga yuqori tezlikda filtrlash, past o'tkazgichli filtrlash va dinamik diapazonli siqishni bajarish uchun veb-serverdan foydalanishni ko'rsatadi. Dinamik diapazonni siqishni birinchi marta ishlatilganda, noto'g'ri parametrlarni tanlash misolida maqsadli ravishda buzilishlar paydo bo'ladi. Ikkinchi misol bu buzuqlikni yo'q qiladi.

Ushbu loyiha uchun ESP32 tanlangan mikrokontrollerdir. Uning narxi 10 funtdan kam va ADC, DAC, Wi-Fi, Bluetooth past energiyasi, Bluetooth Classic va 240 MGts chastotali ikki yadroli protsessor bilan jihozlangan. Bortli DAC texnik jihatdan ovozni ijro etishi mumkin, lekin unchalik yaxshi bo'lmaydi. Buning o'rniga, men signalni chiqarish uchun Adafruit I2S stereo dekoderidan foydalanaman. Bu signalni har qanday HiFi tizimiga osongina yuborish mumkin, bu sizning mavjud HiFi tizimingizga simsiz audio qo'shish imkonini beradi.

Ta'minotlar

Umid qilamanki, ko'pchilik ishlab chiqaruvchilarda taxtalar, o'tish moslamalari, USB kabellari, quvvat manbai lehim dazmollari bo'ladi va faqat ESP32 va stereo dekoder uchun 15 funt sarflash kerak bo'ladi. Aks holda, barcha kerakli qismlar quyida keltirilgan.

  • ESP32 - ESP32 -PICO -KIT va TinyPico -da sinovdan o'tgan - £ 9.50/ £ 24
  • Adafruit I2S stereo dekoderi - 5,51 funt
  • Non paneli - har biri 3-5 funt
  • Jumper simlari - 3 funt
  • Simli minigarnituralar/Hi -Fi tizimi - £££
  • Push sarlavhalari yoki lehim temir - 2,10 funt / 30 funt
  • Micro USB kabeli - 2,10 funt/ 3 funt
  • 3,5 mm RCA ulagichi/ 3,5 mm raz'emga ulanish (yoki karnayga kerak bo'lgan narsa) - 2,40 funt/ 1,50 funt
  • USB quvvat manbai - 5 funt

1 -qadam: qurilish - non paneli

Qurilish - non paneli
Qurilish - non paneli

Agar siz ESP32-PICO-KITni sotib olgan bo'lsangiz, oldindan payvandlangan holda hech qanday pinni lehimlashingiz shart emas. Uni shunchaki non paneliga qo'ying.

2 -qadam: qurilish - sarlavhalarni bosish/lehimlash

Qurilish - surish sarlavhalari/lehim
Qurilish - surish sarlavhalari/lehim
Qurilish - surish sarlavhalari/lehim
Qurilish - surish sarlavhalari/lehim

Agar sizda lehimlantiruvchi temir bo'lsa, Adafruit veb -saytidagi ko'rsatmalarga muvofiq pinlarni stereo dekoderga lehimlang. Yozish paytida mening lehim temirim qulflangan ishda edi. Vaqtinchalik lehim uchun pul to'lashni xohlamadim, shuning uchun pimoronidan bir nechta surish boshlarini kesib tashladim. Men ularni stereo dekoderga mos kelishi uchun kesib tashladim. Bu eng yaxshi echim emas (va sarlavhalar qanday ishlatilgani emas), lekin bu lehimlanadigan temirga eng arzon alternativ. Kesilgan sarlavhani non taxtasiga joylashtiring. Dekoder uchun sizga faqat 6 pinli 1 qator kerak bo'ladi. Barqarorlik uchun siz boshqa oltitani qo'shishingiz mumkin, lekin bu prototip tizim uchun kerak emas. Sarlavhalarni joylashtirish uchun pinlar - vin, 3vo, gnd, wsel, din va bclk.

3 -qadam: Qurilish - Quvvat pinlarini simi

Qurilish - Quvvat pinlarini simi
Qurilish - Quvvat pinlarini simi

Stereo dekoderni surish sarlavhalariga joylashtiring (vin, 3vo, gnd, wsel, din va bclk pinlari) va ularni bir -biriga mahkam o'rnating. Shunga qaramay, bu ideal tarzda lehimli temir bilan amalga oshirilishi kerak, lekin men improvizatsiya qilishim kerak edi. Siz shuni tushunasizki, bu ko'rsatmadagi barcha simlar ko'k rangda. Buning sababi shundaki, menda o'tish simlari yo'q edi, shuning uchun men 1 uzun simni mayda bo'laklarga kesib tashladim. Bundan tashqari, men rangli ko'rman va simning rangiga umuman ahamiyat bermayman. Quvvat pinlari quyidagicha biriktirilgan:

3v3 (ESP32) -> stereo dekoderni ochish

gnd (ESP32) -> stereo dekoderni ochish uchun

4 -qadam: Qurilish - I2S simlari

Qurilish - I2S simlari
Qurilish - I2S simlari

Bluetooth ovozini ESP32 -dan stereo dekoderga yuborish uchun biz I2S deb nomlangan raqamli aloqa usulidan foydalanamiz. Stereo dekoder bu raqamli signalni oladi va uni karnay yoki HiFi -ga ulanadigan analog signalga aylantiradi. I2S faqat 3 ta simni talab qiladi va tushunish oson. Bit soat (bclk) chizig'i yuqori va pastga burilib, yangi bit uzatilishini ko'rsatadi. Ma'lumotni uzatish chizig'i (dout) yuqori yoki pastga buriladi, bu bitning qiymati 0 yoki 1 ga tengligini ko'rsatish uchun, chap yoki o'ng kanal uzatilayotganligini ko'rsatish uchun so'z tanlash liniyasi (wsel) yuqori yoki pastga aylanadi. Har bir mikrokontroller I2S -ni qo'llab -quvvatlamaydi, lekin ESP32 -da 2 I2S liniyasi mavjud. Bu loyiha uchun aniq tanlov qiladi.

Ulanish quyidagicha:

27 (ESP32) -> wsel (Stereo dekoder)

25 (ESP32) -> din (Stereo dekoder)

26 (ESP32) -> bclk (Stereo dekoder)

5 -qadam: BtAudio kutubxonasini o'rnatish

BtAudio kutubxonasini o'rnatish
BtAudio kutubxonasini o'rnatish
BtAudio kutubxonasini o'rnatish
BtAudio kutubxonasini o'rnatish

Agar sizda hali o'rnatilgan bo'lmasa, Arduino IDE va ESP32 uchun Arduino yadrosini o'rnating. Siz ularni o'rnatganingizdan so'ng, mening Github sahifamga tashrif buyuring va omborni yuklab oling. Arduino IDE ichida Sketch >> Kutubxonani qo'shish >> ostida "ZIP kutubxonasini qo'shish" -ni tanlang. Keyin yuklangan zip faylini tanlang. Bu mening btAudio kutubxonamni Arduino kutubxonalariga qo'shishi kerak. Kutubxonadan foydalanish uchun siz Arduino eskiziga tegishli sarlavhani kiritishingiz kerak bo'ladi. Buni keyingi bosqichda ko'rasiz.

6 -qadam: BtAudio kutubxonasidan foydalanish

BtAudio kutubxonasidan foydalanish
BtAudio kutubxonasidan foydalanish
BtAudio kutubxonasidan foydalanish
BtAudio kutubxonasidan foydalanish

O'rnatilgandan so'ng, ESP32 -ni kompyuterga mikro USB orqali ulang, so'ngra 3,5 mm sim bilan stereo dekoderni karnayga ulang. Eskizni yuklashdan oldin Arduino muharriridan ba'zi narsalarni o'zgartirish kerak bo'ladi. Kengashni tanlagandan so'ng, asboblar >> bo'linish sxemasi bo'limidagi bo'lim sxemasini o'zgartirishingiz va "OTA yo'q (Katta APP)" yoki "minimal SPIFFS (OTA bilan katta APPS)" ni tanlashingiz kerak bo'ladi. Bu juda zarur, chunki bu loyihada ham WiFi, ham Bluetooth ishlatiladi, ular xotirasi og'ir kutubxonalar. Buni amalga oshirgandan so'ng, ESP32 -ga quyidagi eskizni yuklang.

#qo'shing

// btAudio audio = btAudio ("ESP_Speaker") audio qurilmasi nomini o'rnatadi; void setup () {// audio ma'lumotlarni ESP32 audio.begin () ga uzatadi; // olingan ma'lumotlarni I2S DAC ga chiqaradi int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {}

Eskizni 3 bosqichga bo'lish mumkin:

  1. ESP32 "Bluetooth nomini" o'rnatadigan global btAudio ob'ektini yarating
  2. ESP32 -ni btAudio:: begin usuli bilan ovoz qabul qilish uchun sozlang
  3. I2S pinlarini btAudio:: I2S usuli bilan o'rnating.

Bu dasturiy ta'minot tomonida! Endi ESP32 -ga Bluetooth ulanishini boshlash kifoya. Telefoningizda/noutbukda/MP3 pleerda yangi qurilmalarni qidiring va "ESP_Speaker" paydo bo'ladi. Hamma ishlayotganidan xursand bo'lganingizda (musiqa yangraydi), siz ESP32 -ni kompyuterdan uzishingiz mumkin. Uni USB quvvat manbai bilan quvvatlang va u siz yuklagan oxirgi kodni eslab qoladi. Shunday qilib, siz ESP32 -ni HiFi tizimining orqasida abadiy yashirishingiz mumkin.

7 -qadam: DSP - filtrlash

Raqamli signalni qayta ishlash bilan qabul qilgichni kengaytirish

Agar siz barcha qadamlarni bajargan bo'lsangiz (va men hech narsani tashlab qo'ymagan bo'lsam), endi sizda HiFi tizimi uchun to'liq ishlaydigan Bluetooth qabul qiluvchisi bor. Bu salqin bo'lsa -da, u mikrokontrollerni o'z chegaralariga olib kelmaydi. ESP32 240 yadroli ikkita yadroga ega. Bu shuni anglatadiki, bu loyiha faqat qabul qiluvchidan ko'ra ko'proq. U raqamli signal protsessoriga (DSP) ega Bluetooth qabul qiluvchisi bo'lish imkoniyatiga ega. DSP asosan real vaqtda signal bo'yicha matematik operatsiyalarni bajaradi. Foydali operatsiyalardan biri raqamli filtrlash deb ataladi. Bu jarayon yuqori yoki past o'tish filtridan foydalanayotganingizga qarab, ma'lum bir uzilish chastotasidan pastda yoki undan yuqori signalda chastotalarni susaytiradi.

Yuqori o'tkazuvchan filtrlar

High-Pass filtrlari ma'lum bir diapazon ostidagi chastotalarni susaytiradi. Earlevel.com saytidagi kod asosida Arduino tizimlari uchun filtrlar kutubxonasi qurdim. Asosiy farq shundaki, men yuqori darajadagi filtrlarni qurishni osonlashtirish uchun sinf tuzilishini o'zgartirdim. Yuqori darajadagi filtrlar sizning chegarangizdan tashqaridagi chastotalarni samaraliroq bostiradi, lekin ular ko'proq hisoblashni talab qiladi. Biroq, joriy amaliyot bilan siz hatto real vaqtda audio uchun 6-tartibli filtrlardan ham foydalanishingiz mumkin!

Eskiz oldingi bosqichda bo'lgani bilan bir xil, faqat biz asosiy tsiklni o'zgartirdik. Filtrlarni yoqish uchun btAudio:: createFilter usulidan foydalanamiz. Bu usul 3 ta dalilni qabul qiladi. Birinchisi, filtr kaskadlarining soni. Filtr kaskadlari soni filtrning yarmiga teng. 6 -tartibli filtr uchun birinchi argument 3 bo'lishi kerak. 8 -chi tartibli filtr uchun 4 bo'ladi. Ikkinchi dalil - filtr chegarasi. Ma'lumotlarga haqiqatan ham dramatik ta'sir ko'rsatish uchun buni 1000 Gts ga o'rnatdim. Nihoyat, biz uchinchi dalil bilan fayl turini aniqlaymiz. Bu yuqori o'tish filtri uchun yuqori o'tish va past o'tish filtri uchun past o'tish bo'lishi kerak. Quyidagi skript bu chastotani 1000 Gts dan 2 Gts gacha o'zgartiradi. Ma'lumotlarga dramatik ta'sirni eshitishingiz kerak.

#qo'shing

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 () {kechiktirish (5000); audio.createFilter (3, 1000, yuqori o'tish); kechikish (5000); audio.createFilter (3, 2, yuqori o'tish); }

Kam o'tkazgichli filtrlar

Past o'tkazgichli filtrlar yuqori o'tish filtrlariga qarama -qarshi ishlaydi va ma'lum chastotadan yuqori chastotalarni bostiradi. Ularni yuqori o'tish filtrlari singari amalga oshirish mumkin, faqat uchinchi dalilni past o'tkazishga o'zgartirish zarur. Quyidagi eskiz uchun men 2000 Gts va 20000 Gts oralig'ida past o'tish chegarasini almashtiraman. Umid qilamanki, siz farqni eshitasiz. Past chastotali filtr 2000 Gts chastotada bo'lsa, u juda sust eshitilishi kerak.

#qo'shing

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 () {kechiktirish (5000); audio.createFilter (3, 2000, past o'tish); kechikish (5000); audio.createFilter (3, 20000, past o'tish); }

8 -qadam: DSP - dinamik diapazonli siqish

Fon

Dinamik diapazonli siqish - bu ovoz balandligini tenglashtirishga harakat qiladigan signalni qayta ishlash usuli. U ma'lum bir ostonadan baland tovushlarni jim tovushlar darajasiga siqib chiqaradi va ixtiyoriy ravishda ikkalasini ham kuchaytiradi. Natijada, hatto tinglash tajribasi ham ortadi. Bu juda fon musiqasi va juda sokin vokalli shouni tomosha qilayotganimda juda foydali bo'ldi. Bunday holda, ovoz balandligini oshirish yordam bermadi, chunki bu faqat fon musiqasini kuchaytirdi. Dinamik diapazonli siqilish yordamida men baland ovozli musiqani vokal darajasiga tushirib, hamma narsani yana to'g'ri eshitishim mumkin edi.

Kodeks

Dinamik diapazonni siqish faqat tovushni pasaytirish yoki signalni chegaralashni o'z ichiga olmaydi. Bu biroz aqlli. Agar siz ovoz balandligini pasaytirsangiz, jim tovushlar ham, baland ovozlar ham kamayadi. Buning bir yo'li - signalni chegaralash, lekin bu jiddiy buzilishlarga olib keladi. Dinamik diapazonli siqish, agar siz signalni chegaralash/kesish kerak bo'lsa, buzilishlarni kamaytirish uchun yumshoq chegara va filtrlash kombinatsiyasini o'z ichiga oladi. Natijada - baland tovushlar buzilmasdan "qirqilgan" va jim bo'lganlar xuddi shunday qoldirilgan signal. Quyidagi kod uch xil siqilish darajasini almashtiradi.

  1. Buzilish bilan siqish
  2. Buzilishsiz siqish
  3. Siqilish yo'q

#qo'shing

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 () {kechiktirish (5000); audio.compress (30, 0.0001, 0.0001, 10, 10, 0); kechikish (5000); audio.compress (30, 0.0001, 0.1, 10, 10, 0); kechikish (5000); audio.decompress (); }

Dinamik diapazonni siqish murakkab va btAudio:: kompress usullari ko'p parametrlarga ega. Men ularni (tartibda) bu erda tushuntirishga harakat qilaman:

  1. Eshik - Ovozni pasaytirish darajasi (desibel bilan o'lchanadi)
  2. Hujum vaqti - chegaradan oshib ketgandan keyin kompressor ishlay boshlagan vaqt
  3. Chiqarish vaqti - kompressor ishlamay qolishi uchun zarur bo'lgan vaqt.
  4. Kamaytirish koeffitsienti - audio siqilgan omil.
  5. Tiz kengligi - kompressor qisman ishlaydigan ostonaning atrofidagi kenglik (desibellarda) (tabiiyroq tovush).
  6. Siqishdan keyin signalga qo'shilgan daromad (desibel)

Siqishni birinchi ishlatilishida juda eshitiladigan buzilish, chunki chegara juda past, hujum vaqti ham, bo'shatish vaqti ham juda qisqa, natijada qattiq polga o'tish mumkin bo'ladi. Bu ikkinchi holatda, chiqish vaqtini ko'paytirish orqali aniq hal qilinadi. Bu, asosan, kompressorning ancha silliq ishlashiga olib keladi. Bu erda men faqat 1 parametrni o'zgartirish ovozga qanday ta'sir qilishi mumkinligini ko'rsatdim. Endi sizda turli parametrlar bilan tajriba o'tkazish.

Amalga oshirish (sehrli matematika - ixtiyoriy)

Men Dinamik diapazonli siqishni sodda tarzda amalga oshirish qiyinligini aniqladim. Algoritm 16 bitli butun sonni desibelga aylantirishni va signalni qayta ishlagandan so'ng uni 16 bitli butun songa o'zgartirishni talab qiladi. Men bir satr kod stereo ma'lumotlarni qayta ishlash uchun 10 mikrosaniyani talab qilayotganini payqadim. 44,1 KGts chastotali stereo audio DSP uchun atigi 11,3 mikrosaniyani qoldirgani uchun, bu qabul qilinishi mumkin bo'lmagan darajada sekin … Ammo, kichik qidiruv jadvali (400 bayt) va Netwonning ajratilgan farqlariga asoslangan interpolatsiya protsedurasini birlashtirib, biz 0,2 mikrosaniyada 17 bitga yaqin aniqlikka ega bo'lamiz.. Men haqiqatan ham qiziquvchilar uchun barcha matematikalar bilan pdf hujjatni biriktirdim. Bu murakkab, sizni ogohlantirgan!

9 -qadam: Wi -Fi interfeysi

Wifi interfeysi
Wifi interfeysi
Wifi interfeysi
Wifi interfeysi

Endi sizda real vaqtda DSP-ni ishga tushirishga qodir bo'lgan Bluetooth qabul qiluvchisi bor. Afsuski, agar siz DSP parametrlaridan birortasini o'zgartirmoqchi bo'lsangiz, HiFi -dan uzishingiz, yangi eskiz yuklashingiz va keyin qayta ulanishingiz kerak bo'ladi. Bu noaniq. Buni tuzatish uchun men kompyuterga qayta ulanmasdan DSP -ning barcha parametrlarini tahrirlash uchun foydalanishingiz mumkin bo'lgan veb -serverni ishlab chiqdim. Veb -serverdan foydalanish eskizi quyida keltirilgan.

#qo'shing

#clude btAudio audio = btAudio ("ESP_Speaker"); webDSP veb; void setup () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); // WiFi identifikatori va parol bilan almashtiring const char* ssid = "SSID"; const char* password = "PAROLA"; web.begin (ssid, parol va audio); } void loop () {web._server.handleClient (); }

Kod ESP32 -ga veb -sahifaga kirish uchun foydalanishingiz mumkin bo'lgan IP -manzilni belgilaydi. Ushbu kodni birinchi marta ishga tushirganingizda, uni kompyuteringizga biriktirishingiz kerak. Shunday qilib, ketma -ket monitorda ESP32 -ga tayinlangan IP -manzilni ko'rishingiz mumkin. Agar siz ushbu veb -sahifaga kirmoqchi bo'lsangiz, ushbu IP -manzilni istalgan veb -brauzerga kiriting (xromda sinovdan o'tgan).

Hozircha biz Bluetooth va I2S -ni yoqish usuli bilan tanish bo'lishimiz kerak. Asosiy farq - webDSP ob'ektidan foydalanish. Bu ob'ekt sizning Wi -Fi SSID va parolingizni argument sifatida, shuningdek btAudio ob'ektiga ko'rsatgich sifatida oladi. Asosiy tsiklda biz doimo webDSP ob'ektini veb -sahifadan kiruvchi ma'lumotlarni tinglashiga va keyin DSP parametrlarini yangilashiga erishamiz. Yakuniy nuqta sifatida shuni ta'kidlash kerakki, Bluetooth ham, Wi -Fi ham ESP32 -da bir xil radiodan foydalanadi. Bu shuni anglatadiki, siz veb -sahifadagi parametrlarni kiritganingizdan ESP32 ma'lumotiga etib borguncha 10 soniya kutishingiz kerak bo'ladi.

10 -qadam: Kelgusi rejalar

Umid qilamanki, sizga bu ko'rsatma yoqdi va endi HiFi -ga Bluetooth Audio va DSP qo'shildi. Biroq, menimcha, bu loyihada o'sish uchun juda ko'p joy bor va men kelajakda qanday yo'nalishlarga e'tibor qaratmoqchi edim.

  • Wi -Fi orqali ovoz uzatishni yoqish (eng yaxshi ovoz sifati uchun)
  • Ovozli buyruqlarni yoqish uchun I2S mikrofonidan foydalaning
  • WiFi boshqariladigan ekvalayzer ishlab chiqish
  • Buni chiroyli qiling (non paneli mahsulotning ajoyib dizayniga qichqirmaydi)

Men bu g'oyalarni hayotga tatbiq eta olsam, men ko'proq ko'rsatma beraman. Yoki kimdir bu xususiyatlarni amalga oshirishi mumkin. Bu hamma narsani ochiq manba qilishning quvonchi!

Tavsiya: