Am creat acest script pentru a rezolva o problemă fundamentală: modelul AI era antrenat pe sunete curate, înregistrate profesional, dar pe dispozitiv primea sunete „murdărite” de caracteristicile microfonului intern al ESP32. Microfonul acesta nu este unul de studio — are o răspuns în frecvență limitat, introduce un zgomot de fond propriu și colorează sunetul într-un mod specific. Din cauza asta, aceeași împușcătură sau sirenă suna diferit în datele de antrenare față de ce auzea dispozitivul în realitate, iar modelul nu le mai recunoștea corect.
Soluția: am „murdărit” datele de antrenare ca să semene cu ce aude microfonul
1. Am calculat amprenta acustică a microfonului
Am redat un semnal de test cunoscut (un sweep de frecvențe) prin difuzor și l-am înregistrat cu microfonul ESP32. Comparând semnalul original curat cu cel înregistrat, am extras prin deconvoluție ceea ce se numește „răspuns la impuls” — practic amprenta acustică a microfonului, care descrie exact cum modifică el sunetul (ce frecvențe le atenuează, ce frecvențe le amplifică, ce distorsiuni introduce).
2. Am aplicat această amprentă peste toate datele de antrenare
Am luat fiecare fișier audio din setul de date și l-am trecut prin convoluție cu acest răspuns la impuls. Efectul este ca și cum acel sunet ar fi fost înregistrat direct cu microfonul ESP32, chiar dacă inițial era un fișier curat descărcat de pe internet.
3. Am limitat banda de frecvențe
Microfonul ESP32 nu captează fidel frecvențe foarte joase sau foarte înalte. Am aplicat un filtru care păstrează doar frecvențele între 100 Hz și 7000 Hz, simulând limitările reale ale hardware-ului.
4. Am aplicat compresie
Microfonul și circuitul analogic al dispozitivului introduc o ușoară compresie naturală — sunetele foarte puternice nu cresc proporțional, ci se „saturează” ușor. Am simulat acest efect printr-o funcție matematică de compresie.
5. Am adăugat zgomot de fond real
Am înregistrat liniștea cu ESP32 — chiar și când nu e niciun sunet, microfonul produce un zgomot de fond slab, caracteristic. Am amestecat acest zgomot peste fiecare fișier audio de antrenare, la intensități variate, pentru ca modelul să învețe să ignore acest zgomot de fond și să se concentreze pe sunetele importante.
6. Am variat volumul
În realitate, sunetele ajung la microfon la volume diferite în funcție de distanță și mediu. Am aplicat o amplificare aleatorie pentru fiecare fișier, astfel încât modelul să nu depindă de un anumit nivel de volum.
De ce este nevoie de acest pas
Fără el, modelul ar fi fost antrenat într-o „lume ideală” a sunetelor curate, dar ar fi funcționat pe un dispozitiv care aude lumea printr-un microfon imperfect. Este ca și cum ai antrena pe cineva să recunoască mașini uitându-se la fotografii profesionale, dar apoi îi ceri să le recunoască printr-o cameră de supraveghere neclară și cu zgomot.
Prin aplicarea acestor transformări, am adus datele de antrenare cât mai aproape de condițiile reale, iar modelul a învățat să recunoască sunete exact așa cum le aude dispozitivul — cu toate imperfecțiunile incluse. Acest lucru a îmbunătățit semnificativ acuratețea clasificării pe dispozitiv.
[mai mult...]