Să încercăm să facem o treabă destul de lipsită de sens, și anume, recepția sunetului cu o anumită spectrogramă. Dintr-o data, randurile fanilor EHF se vor micsora, fara a fi ofensati fanilor filmului "White Noise" 🙂
Deci, să începem cu modelarea pe Matlab. Vrem un algoritm care să vă permită să traduceți sunetul într-o spectrogramă de imagine și înapoi. Va fi logic să începem cu calculul spectrogramului, de-a lungul căruia imaginea va fi calculată.
Pentru a nu face ceea ce sa făcut deja pentru noi de către alții, folosim funcția enframe din biblioteca vocii, concepută pentru a rezolva o varietate de sarcini în recunoașterea vorbirii. Funcția enframe vă permite doar să tăiați semnalul în cadre cu un anumit pas. Lungimea cadrului pe care îl luăm este egală cu lungimea transformării Fourier (FFTLEN = 256), iar pasul este jumătate din această valoare (128). Toate cele mai bune tradiții 🙂 Fiecare cadru este suprapus cu fereastra Hanning pentru a elimina lobii laterali atunci când se calculează DFT. Din moment ce cadrele vin cu jumătate suprapuse, atunci când fereastra este suprapusă, suma greutăților sub secțiunile suprapuse este de 1 și putem reconstitui cu ușurință semnalul în jumătatea cadrului prin două cadre adiacente.
Pentru sintagma "De ce să nu folosiți externalizarea în țările cu forță de muncă ieftină", a fost obținută următoarea spectrogramă:
Sunetul original a fost așa (cu playerul online pentru fișierele .wav care nu au fost încă descoperite)
Firește, cu siguranță nu putem restabili semnalul. Atunci când se primește o imagine, fiecare eșantion al spectrogramului este preluat de un modul de valoare complexă - informațiile despre faza se pierd. Prin urmare, dacă asamblați pur și simplu jumătățile restaurate, vor apărea două probleme:
- Limitele cadrelor vor fi vizibile (deoarece toate armonicile vor fi în aceeași fază în fiecare cadru
- Componentele cu un număr impar de perioade de sinusoid nu se lipesc împreună
Prima problemă rămâne, pentru a rezolva cea de-a doua încercare de a răsuci faza de asamblare a semicarcurilor - printr-o jumătate de cadru. Acest lucru a fost realizat aproximativ în felul următor:
După restaurare, sa dovedit că asta este
Și acum rămâne doar să scriem o mică funcție de a obține o spectrogramă din imagine. Imaginea este transformată în alb-negru și apoi scalată la dimensiunea dorită în înălțime.
Un pic inselat, linia "image = 1-image;" făcând o imagine negativă, astfel încât tedda noastră părea pete strălucitoare pe întuneric și nu invers. În caz contrar, ar fi prea mult zgomot.
Codul sursă și tot ce aveți nevoie de articol pot fi descărcate de aici.
Programe pregătite pentru astfel de exerciții: