Conducator științific : Lector dr.ing. Mihai Neghină Îndrumător: Lector dr.ing. Mihai Neghină Absolvent: Stanciu Liviu Gabriel Specializarea… [628901]
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
– Sibiu, 2018 –
PROIECT DE DIPLOMĂ
Conducator științific : Lector dr.ing. Mihai Neghină
Îndrumător: Lector dr.ing. Mihai Neghină
Absolvent: [anonimizat] :Calculatoare
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
– Sibiu, 2018 –
MODIFICAREA
PARAMETRILOR VOCII
Conducător științific: Lector dr.ing. Mihai Neghină
Îndrumător: Lector dr.ing. Mihai Neghină
Absolvent: [anonimizat] :Calculatoare
1
Cuprins:
Capitolul 1. Introducere ………………………….. ………………………….. ………………………….. ………… 3
Capitolul 2. Tehnologii folosite ………………………….. ………………………….. ………………………….. .5
2.1. Matlab ………………………….. ………………………….. ………………………….. ………………………….. ………. 5
2.2. Audacity ………………………….. ………………………….. ………………………….. ………………………….. ……. 8
Capitolul 3. Considerații teoretice ………………………….. ………………………….. ………………………. 9
3.1. Transformata Fourier ………………………….. ………………………….. ………………………….. ……………….. 9
3.1.1.Transformata Fourier Discretă(DFT) ………………………….. ………………………….. ………………… 13
3.1.2. Inversul Transformatei Fourier Discretă (IDFT) ………………………….. ………………………….. … 15
3.1.3. Transformata Fourier rapidă(FFT) ………………………….. ………………………….. …………………… 15
3.1.4. Inversul Transformatei Fourier rapidă(IFFT) ………………………….. ………………………….. …….. 17
3.1.5. Transformata Fourier pe termen scurt (STFT) ………………………….. ………………………….. …… 19
3.1.5.1. Umplerea cu zero ………………………….. ………………………….. ………………………… 22
3.1.6. Inversul transformatei Fourier pe termen scurt (ISTFT) ………………………….. …………………… 22
3.3. Vocoder de fază ………………………….. ………………………….. ………………………….. …………………….. 23
3.3.1. Procedura inițială ………………………….. ………………………….. ………………………….. …………….. 24
3.3.2.Scalare în timp ………………………….. ………………………….. ………………………….. …………………. 24
3.3.3. Pitch Shift ………………………….. ………………………….. ………………………….. ……………………….. 25
3.4. Amplitudine ………………………….. ………………………….. ………………………….. …………………………. 25
Capitolul 4. Aplicația ………………………….. ………………………….. ………………………….. ………….. 28
4.1. Funcția principală ………………………….. ………………………….. ………………………….. ………………….. 29
4.2. Funcția Transformatei Fourier pe termen scurt ………………………….. ………………………….. ………… 32
4.2.1. Alegem Funcția Ferestrei care dorim să o implementăm ………………………….. ………………….. 33
4.2.2.Implementarea Transformatei Fourier pe termen scurt ………………………….. ……………………… 33
4.3. Funcția Inversă a Transformatei Fourier pe termen scurt ………………………….. ……………………….. 36
4.4. Funcția de reeșantionare ………………………….. ………………………….. ………………………….. ………….. 37
4.5. Vocoderul de fază ………………………….. ………………………….. ………………………….. ………………….. 38
4.5.1. Pitch ………………………….. ………………………….. ………………………….. ………………………….. …. 39
4.5.2. Scalare în timp ………………………….. ………………………….. ………………………….. ………………… 39
4.6. I nterfața grafică ………………………….. ………………………….. ………………………….. ……………………… 40
2
4.6.1.Meniu ………………………….. ………………………….. ………………………….. ………………………….. … 40
4.6.2. Info ………………………….. ………………………….. ………………………….. ………………………….. …… 42
4.6.3.FinalForm ………………………….. ………………………….. ………………………….. ……………………….. 43
4.6.3.1. Panel 1 ………………………….. ………………………….. ………………………….. ………….. 43
4.6.3.2. Panel 2 ………………………….. ………………………….. ………………………….. ………….. 45
4.6.3.3. Panel 3 ………………………….. ………………………….. ………………………….. ………….. 52
4.7. Funcț ii adiționale ………………………….. ………………………….. ………………………….. …………………… 53
4.8. Teste și rezultate ………………………….. ………………………….. ………………………….. ……………………. 54
Capitolul 5. Concluzii și dezvoltări viitoare ………………………….. ………………………….. ……….. 60
5.1. Concluzii ………………………….. ………………………….. ………………………….. ………………………….. …. 60
5.2. Dezvoltăr i viitoare ………………………….. ………………………….. ………………………….. …………………. 60
Bibliografie. ………………………….. ………………………….. ………………………….. ……………………….. 62
3
Capitolul 1. Introducere
Variațiile de presiune din aer care cad pe tamburul urechii reprezintă sunetul. Sistemul
auditiv u man, poate recepta sunete în do meniul de frecvență de 20 Hz până la 20 kHz. Intervalul
de intensitate auditivă este d e aproximativ 120 dB [2].
Semnalul audio este o reprezentare a sunetului, al cărui proprietăți se schimbă relativ
încet odată cu timpul. Semnalul poate fi:
a) Semnal analogic – o intensitate electrică.
b) Semnal digital – numere binare.
Semnalele sonore sunt clasificate în:
Sunete de mediu,
Sunete artificiale,
Vorbire,
Muzică.
Sunetul capturat de microfon este o formă a timpului de variație a presiunii aerului în
câmpul sonor al microfonului. Un semnal audio digital este obținut prin pr eluarea și cuantificarea
corespunzătoare a ie șirii electrice a microfonului.
Orice mostră de frecvență de peste 40 kHz este suficientă pentru a capta întreaga gamă de
frecvențe, deși rata p e scară largă este de 44.100 Hz [2].
Proprietățile temporale ale unui sunet constau în durata sunetului și în orice schimbare de
amplitudine( creșterea sau scăderea amplitudinii formei de undă).
Proprietăți le spectrale ale sunetului sunt reprezentate de componentele de frecvență și de
puterea lor relativă.
Aceste două p roprietăți sunt importante pentru percepția și cunoașterea sunetului.
Sunetele sunt caracterizate prin: înălțime, zgomot, durată și timbru.
Calitatea percepută a sunetului este influențată de faptul că un sunet prezintă proprietăți
spectrale ca tonul sau z gomotul.
Formele de undă audio pot fi:
a) Periodice: sunete complexe care cuprind o frecvență fundamentală și o serie de prelungiri sau
multipli ai acesteia. Amplitudinile și fazele relative ale componen telor de frecvență
influențează timbrul.
4
b) Aperiodice: sun t alcătuite din sunete nearmonice sau din zgomote în formă de frecvență.
Calitatea percepută a sunetului este influențată de faptul că acesta prezintă proprietăți
spectrale ca tonul sau zgomotul. Pe de altă parte, muzica, fiind o secvență melodică are note de
înaltă tonalitate și o frecvență și o durată care variază într -o sferă largă.
Practic, semnalele sonore sunt stimuli fizici care sunt procesați de către sistemul auditiv
pentru a genera senzațiile psihice din creier. De aceea , este important ca propri etățil e acustice ale
sunetului să fie cele care sunt importante și care pot fi recunoscute de către om. Sistemul auditiv
uman efectuează analiza frecvențelor sonore pentru a menține funcțiile cognitive de nivel
superior. Toate aceste senzații declanșate de sistemul uman sunt legate de proprietăț ile spectrale
sau cele temporale ale sunetului [2].
Parametrii (sau caracteristicile) semnalului rezultă prin analizarea unor segmente scurte
ale acestuia, și care se repetă o data la un in terval de timp bine determi nat, denumită „ analiză de
scurtă durată” , iar pa rametrii obținuți sunt denumiți „parametrii de scurtă durată”.
Aceste caracteristici se pot referi la un model de semnal care este sub bază. Sunetele
vorbirii, spre exemplu, sunt analizate cu ajutorul unui model de filtru -sursă a producerii.
Acest model de filtru de sursă poate fi utilizat și în producția sunetelor pentru
instrumentele muzicale, unde sursa este realizată cu ajutorul unui obiect vibrant, iar filtrul este
așezat la baza corpului de rezonanță a instrumentului. Sunetele din muzică, pot fi mai ușor
modelate datorită caracteristicilor semnal ului alcătuite din linii sinusoid e continue, tranzitorii și
zgomotoase.
5
Capitolul 2. Tehnologii folosite
2.1. Matlab
Matlab este un limbaj de programare dezvoltat în limbajul C de cei de la MathWorks si
este folosit pentru calculul numeric. Creatoru l limbajului este Clever Moler, președintele
departamentului de informatică la Universitatea din New Mexico. A început să dezvolte limbaj ul
MATLAB în anul 1970 și a făcut un parteneriat cu Jack Little și Steve Bangert după care au
înființat MathWorks în anul 1984 [17].
Variabilele în Matlab sunt definite utilizând operatorul „=” și valorile le putem atribui
fără să declarăm tipul acestora.
Un vector este definit când folosim sintaxa „: :” ,exemplu 1:3:8, în care matricea începe
de la valoarea inițială „1”, crește cu pasul „3” și se va opri la valoarea maximă „8” sau mai mic
de „8” pentru a evita depășirea valorii maxime.
În cazul în care valoa rea pasului nu este specificată , aceasta va fi setată implicit „1”.
6
Matrice le în schimb sunt definite prin separarea elementelor de pe un rând pri n spațiu gol
sau prin virgulă, iar în momentul în care am terminat de scris valorile de pe un rând vom folosi
punct virgulă „ ;” care ne indică sfârșitul rândului. Lista elementelor va fi pusă între paranteze
pătrate.
Când dorim să creăm o funcție în Matlab ,numele fișierului „.m” trebuie să fie la fel cu
numele funcției pe care o vom crea.
În Matlab putem folosi și programarea orientată p e obiecte, putem folosi clase, moștenire ,
moșteniri virtuale . Sintaxele și apelurile sunt diferite faț ă de alte limbaje de programare . Matlab
conține clase de valori și clase de referință , în cazul în care o clasă poate manipula ca o super –
clasă. Un apel la o metodă poate modifica orice membru al obiectului doar în cazul în care
obiectul este o instanță a unei clase referință.
7
În Matl ab putem crea o interfață grafică prin GUIDE . Acesta ne pune la dispoziție un set
de instrumente pentru a personaliza aplicația dorită .Folosim GUIDE Layout Editor unde pute m
crea interfața dorită de noi, după care GUIDE ne va genera automat codul MATLAB u nde vom
putea modifica programul în funcție de cerințele dorite.
8
2.2. Audacity
Audacity este un program gratuit care a fost dezvoltat de Dominic Mazzoni și Roger
Dannenberg la universitatea „Carnegie Mellon ” [22]. În Audacity putem înregistra sau edita un
semnal audio într -o interfață translatată în mai multe limbi. Putem folosi Audacity pentru :
A înregistra un fișier audio direct în diferite frecvențe
Pentru a converti casetele în înregistrari digitale
A edita fișiere audio W AV ,MP2 ,MP3
Schimba diferite efecte precum schimbarea de pitch a unui semnal [23].
9
Capitolul 3. Considerații teoretice
3.1. Transformata Fourier
Un semnal poate fi reprezentat în două domenii, poate fi reprezentat în domeniul timp
precum și în domeniu l frecvență. Transforma Fourier transformă semnalul din domeniul timp în
frecvență, dar și invers. Daca modificăm un semnal în timp, acesta se va modifica și în domeniul
frecvență.
Sunt mai multe formule de calcul al transformatei Fourier, ce diferă între ele din cauza
amplitudinii rezultate , scalarea sau semnul frecvenței.
Una din formulele cele mai utilizate este:
Argumentul ξ este o frecvență , x este o dimensiune temporală sau spațială.
Alte operații pe care le putem folosi sunt scalarea, schimbarea, adunarea. Aceste opera ții
matematice sunt proprietăți le Transformatei Fourier. Dacă se va modifica ceva matematic într -un
domeniu, se va modifica automat și în celălalt domeniu.
Proprietăți ale Transformatei Fourier:
a). Liniaritatea . Transformata Fourier este o transformată liniară care conține
proprietăț ile de adunare și omogenitate.
10
Figura 1.
În figura 1 este reprezentată omogenitatea. Omogenitatea este că, atunci când modificăm
amplitudinea într -un domeniu acesta se va schimba automat și în celălalt domeniu.
În matematic ă, dacă x[] și X[] sunt Transformate Fourier, atunci kx[] și kX[] sunt tot
Transformate Fo urier pentru orice constantă k [13].
11
Figura 2.
În figura 2 este reprezentată adunarea a două semnale. Adunarea în Transformata Fourier
înseamnă că adunarea făcută în domeniul timp se va produce și în domeniul frecvenței. Spre
exemplu avem semnalul x1 și x2. Aceste două semnale după ce le adunăm vor produce cel de -al
treilea semnal x3. Fiecare semnal are realizat spect rul în frecvență. Cele două semnale, x1 și x2,
adunate formează domeniul timp al celui de-al treilea semnal, la fel și cu reprezentare a în
domeniul frecvență. Spectre le de frecvență sunt adunate în fereastra dreptunghiulară [13].
b). Caracteristicile Fazei
Putem aduce o modificare în timp printr -o mutare a „s” eșantioane. În urma modificării în
timp, magnitudinea nu o să se schimbe și se va adăuga un termen liniar la fază.
12
Figura 3
Figura 3 ne arată cum se comportă faza în momentul în care mutăm la stâng a sau la
dreapta domeniul reprezentat în timp. Magnitudinea sau alt termen folosit, amplitudinea, nu se
modifică.
Atunci când mutăm la dreapta semnalul în timp avem o scădere în pantă. Atunci când
mutăm la stânga semnalul în timp avem o urcare în pantă. C e îi de reținut este că dacă facem o
mutare în timp ne va modifica rampa fazei [13].
13
Figurile b și f ne arată un caz unic în care faza este zero. Acest lucru se întâm plă când
semnalul reprezentat în domeniul timp este simetric în jurul eșantionului zero. Transformata
Fourier Discretă vede do meniul în timp fiind circulară [13].
3.1.1.Transformata Fourier Discretă (DFT)
Figura 1
Transformata Fourier discretă schimbă „N” puncte ale unui semnal de intrare în N/2+1
puncte pentru un semnal de ieșire. Semnalul de intrare este semnalul care urmează să fie
prelucrat, semnalul de ieșire conține amplitudinea de cosinus, respectiv sinus.
Semnalul de intrare este reprezentat în domeniul timp pentru c ă tipul de semnal intrat în
DFT e ste format din eșantioane c are sunt preluate la un interval de timp.
În analiza Fourier termenul de „domeniu timp” se referă la un semnal în timp pe care
urmează să îl descompună. Termenul de „domeniu frecvență” este folosit pentru a descrie
amplitudinea de cosinus, respectiv sinus. Cu alte cuvinte domeniul frecvență conține aceeași
informație ca și domeniul timp, singura diferență este că sunt sub altă formă.
Dacă știm semnalul în domeniul timp, putem să calculăm semnalul reprezentat în
domeniul frecvență cu ajutorul transformatei Fourier discretă. Dacă cunoaștem semnalul în
domeniul frecvenței, putem calcula semnalul în domeniul timp cu ajutorul inversei a
transformatei Fourier discretă, denumită și IDFT.
Numărul de eșantioane din domeniul timp sunt reprezentate de variabila „N” ca re este o
variabilă pozitivă și care este o putere a lui doi. Se alege „N” ca și o putere a lui doi deoarece
14
algoritmul principal și eficient este algoritmul Transformatei Fourier Rapide, „N” reprezintă
dimensiunea FFT.
Sinusul și cosinusul folosit în DFT sunt funcțiile de bază ale Transformatei Fourier Discretă.
Semnalul de ieșire al Transformatei sunt un set de variabile care reprezintă amplitudinea. [4].
Ck este unda cosinusului pentru amplitudine, sk este unda sinusului pentru amplitudine.
Figura2 .
În figura 2 avem un exemplu a l Transformatei Fourier Discretă cu dimensiunea „N” de 32
de puncte , cu 17 unde de cosinus și 17 unde de sinus pentru funcțiile de bază. Parametrul k
15
setează frecvența la fiecare sinusoid. În acest caz particular c1 reprezint ă unda cosinusului făcută
la un ciclu în N puncte, c5 este unda cosinusului care este realizată în cinci ciclii complete în N
puncte. Acestaeste un exemplu care ne ajută să înțelegem funcțiile de bază.
3.1.2 . Inversul Transformatei Fourier Discretă (IDFT)
Inversul Transformatei Discrete (IDFT) este reprezentată de formula
[13]
Semnalul de ieșire x[i] este format din adunarea a N/2+1 unde de cosinus și N/2 +1 unde
de sinus. Amplitudini le sunt salvate într -o matrice Im, amplitudinea sinusului, respectiv Re ,
amplitudinea cosinusului. Ecuația înmulțește amplitudini le utilizând funcțiile de bază pentru a
crea un set de unde cos, sin. Adunând aceste valori ne oferă semnalul în domeniul timp.
3.1.3 . Transformata Fourier rapidă(FFT)
Transformata Fourier Rapidă este un algoritm care transformă un semnal de intrare din
domeniul timp în domeniul frecvență. Componentele domeniului frecvență sunt oscilații
sinusoidale la o frecvență cu amplitudinea și faza.
Algoritmul FFT calculează Trans formata Fourier Discretă a unui semnal, după care
analiza Fourier face conversia din domeniul timp în domeniul frecvenței, dar și invers. FFT este
mai rapidă decât DFT pentru că reduce complexitatea Transformatei Fourier Discretă de la n^2
la n log n [14 ].
Transformata Fourier Rapidă calculează DFT și rezultatele calculate vor fi la fel,
diferența dintre cele două este ca FFT este mai rapidă. Transformata se bazează pe Transformata
Fourier Discretă complexă.
FFT prima dată descompune punctele semnalului afe rent în domeniul timp. Al doilea pas
este de a calcula spectrul de frecvență corespunzătoare punctelor din semnal. La sfârșit spectrele
create a punctelor sunt sintetizate într -un singur spectru de frecvență.
16
Figura 1.
În figura 1 este reprezentat un exemplu în care punctele dintr -un semnal din domeniul
timp sunt descompuse. Un semnal format din 16 puncte este descompus în 4 stagii separate. În
primul stagiu descompune cele 16 puncte ale semnalului în două semnale alcătu ite din 8 puncte.
Continuă până când sunt 16 semnale alcătuite dintr -un singur punct.
Următorul pas este de a găsi spectrul frecvenței al unui singur punct al semnalului din
domeniul timpului. Spectrul frecvenței a unui punct din semnal este egală cu punc tul în sine.
Ultimul pas este de a combina toate spectrele aferente punctelor pentru a forma spectrul
întregului semnal. Aici algoritmul devine greu, deoarece n u putem să facem o scurtătură câ nd ne
întoarcem la primii biți.
Figura 2
17
În figura 2 este pre zentat cum două spectre de frecvență, compuse din 4 puncte, sunt
combinate într -un singur spectru de frecvență compus din 8 puncte. Operația de schimbare în
domeniul frecvenței trebuie să corespundă proceduri i de a combina 4 puncte din semnal prin
intercal are din domeniul timpului.
Cel mai folosit algoritm FFT este algoritmul Cooley -Tukey. Acest algoritm descompune
Transformata Fourier Discretă de orice dimensiune compusă din N=N1N2 în mai multe
transformate de dimensiuni N1 și N2, împreună cu multiplicări le O(N) prin rădăcini complexe.
Ele sunt numite factori twiddle [8].
Transformata Fourier Rapidă (FFT) este folosită în procesarea semnalelor și prelucrarea
imaginilor. A făcut ca lucrul în domeniul frecvențelor să fie realizat în mod egal, ca și cum am
lucra în domeniul temporal. [ 3]
Aplicațiile care folosesc FFT sunt:
Integrale rapide și multiplicare de polinoame;
Algoritmi de filtrare
Algoritmi rapizi pentru cosinusuri discrete sau transformări de sinus
Pentru a rezolva diferite ecuații
3.1.4 . Inversul Transformatei Fourier rapidă(IFFT)
Inversul Transformatei Fourier Rapidă convertește un semnal din domeniul frecvenței într -un
semnal în domeniul timp. Dacă X[m] reprezintă semnalul în funcția reprezentată în domeniul
frecvenței și x [n] este funcția din domeniul timp, atunci definiția Transformatei Fourier Rapidă,
dar și inversul acesteia este :
Sunt patru metode de implementare a inversului Transformatei Forier Rapide :
18
Prima metodă implică crearea inversului Transformatei Fourier R apide folosind FFT
înaintată și a fost propusa ca o ”povestire” în 1988 [7].
A doua metodă de a calcula IFFT este similară primei metode. Această metodă are un
avantaj, spectrele semnalului de intrare sunt conjugate simetric.
A treia metodă evită inve rsarea datelor ce aparțin spectrelor semnalului de intrare.
A patra me todă se folosește de o conjugare complexă și este reprezentată prin :
19
3.1.5 . Transformata Fourier pe termen scurt (STFT)
Transformata Fourier pe termen scurt ( STFT ), este o serie a transformatei Fourier și
este folosită pentru a determina frecvența și faza secțiunilor locale ale unui semnal ce se schimbă
în timp. În practică, procedura de calcul al STF T este de a împărți un semnal din domeniul timp
mai lung în segmente mai scurte de lungime egală și apoi de a calcul a transformata Fourier
separat pe fiecare segment mai scurt. De aici rezultă spectrul Fourier pe fiecare segment mai
scurt. În cazul timpului continuu, funcția de transformare este î nmulțită cu o funcție
fereastră care este diferită de 0 doar pentru o perioadă scurtă de timp. Transformata Fourier a
semnalului rezultat este luat ca o fereastra de -a lungul axei de timp, rezultând reprezentare
bidimensională a semnalului.
Formula matema tica este :
w ( t ) este funcția de fereastră , de obicei , o fereastră de Hann sau fereastra
Gaussian centrată în jurul lui zero, iar x ( t ) este semnalul care trebuie să fie transformat . X este
în esență transformarea Fourier ,o funcție complexă reprezentând faza și magnitudinea
semnalului în timp și frecvență. Deseori faza utilizează de -a lungul uneia sau ambelor axe de
timp, τ și axei de frecvență, ω, pentru a suprima orice discontinuitate de salt a rezultatului fazei
STFT. Indice le de timp τ est e considerat în mod normal a fi " timp lent " și de obice i nu este
exprimat la fel de mare ca timpul t [20].
Presupunem că avem un semnal și dorim să aflăm spectrul lui în frecvență. Pentru a afla
spectrul în domeniul frecvenței , fiecare lungime o vom înmu lți cu o fereastră de „N” puncte și
vom realiza Transformata Fourier Rapidă.
20
Figura 1.
Vom defini Transformata Fourier pe termen scurt ca și :
„k” este indexul care arată frecvența
„l” este indexul care arată timpul .
Aplicând transformata Fourier discretă, indexul „k” o să fie distribuit frecvenței „k*Fs/N”
unde Fs este rata de eșantionare a semnalului. Putem să spunem că X[k,l] este magnitudinea
frecvenței în timp cu pasul ratei de eșantionare T= 1/Fs.
Suntem interesați să calculăm magnitudinea tr ansformatei pe termen scurt. Pentru că
X[k,l] este o funcție alcătuită din două variabile, una reprezentată în timp, cealaltă reprezentată
în frecvență, graficul lor este un grafic tri -dimensional și este reprezentat drept imaginea asociată
valorii nivelul ui de intensitate sau de culoare.
Deși la baza implementării stă transformata Fourier Discretă, ne lovim de probleme
legate de funcțiile ferestrei, lobul principal și lobul următor.
Funcțiile ferestrei sunt funcții matematice care atribuie valori de zero în afara unui
interval ales. De exemplu o funcție care este constantă în interval și zero în afara intervalului este
o fereastră dreptunghiulară. O altă funcție care este înmulțită cu o funcție fereastră, valorile din
afara intervalului sunt tot zero, dar valoril e din interval sunt suprapuse [15].
21
Figura 2.
În figura 2 sunt prezentate câ teva funcții ale ferestrelor ce se pot aplica pe Transformata
Fourier pe termen scurt, respectiv și pe inversul acesteia.
a) Fereastra dreptunghiulară este cea mai simplă fereastră pe care o putem implementa,
vom înlocui toate valorile a celor N puncte cu zero, v a face afișarea bruscă de -a
lungul formei. Alte ferestre sunt implementate pentru a diminua aceste schimbări
bruște și n e va reduce scurgerea ferestrei [21].
b) Fereas tra „Hann” a fost denumită după ”Julius von Hann”. Este o funcție discretă și
este o combinație liniară a ferestrei dreptunghiulară.
c) Fereastra „ Hamming” a fost propusă de Richard W. Hamming. Fereastra
„Hamming” face o trecere zero la frecvența 5*pi/(M -1), anulea ză primul lob al
ferestrei Hann [12].
d) Fereastra triunghiulară este o convoluție a două ferestre dreptunghiulare cu lățimea
de N/2. Transformata Fourier rezultată sunt valori pătratice ale transformării ferestrei
dreptunghiulare cu lățimea jumătate .
e) Fereastra „ Blackman -Harris” este o ge neralizare a ferestrei „ Hamming” care este
produ să de o adăugare a unei funcții pentru a minimiza nivelurile [18].
f) Fereastra „ Gaussiană” este o funcție ca re se extinde la infinit, de ace ea trebuie să fie
tăiată la capet ele ferestrei deoarece ea însăși este o fereastră a unei ferestre cu
capetele zero [19].
Putem aplica Transformata Fourier pe termen scurt în timpul discret, dar și în timpul
continuu.
22
În timpul discret, datele sunt transformate în ferestre. Pe fiecare fer eastră este aplicată
transformata Fourier, rezultatul este pus într -o matrice, în matrice sunt salvate magnitudinea și
faza fiecă rui punct din timp și frecvență [10].
Semnalul este x[n] iar w[n] este fereastra. Transformata Fourier pe termen scurt este
calculată folosind FFT, astfel variabilele sunt discrete și cuantizate.
În timpul continuu avem nevoie doar de funcția ferestrei pe care să o calculăm. Calculul
transformatei Fourier poate fi văzut ca și o sumă a fazelor a tuturor punctelor calculate cu STF T.
3.1.5.1. Umplerea cu zero
Mulți algoritmi DFT funcționează pentru un număr finit de valori ”N” care sunt puteri ale
lui doi. O soluție este umplerea la sfârșitul semnalului cu zero pentru a ajunge la următoarea
secvență. Nu sunt adăugate date noi la intrarea algoritmului DFT, numărul coeficienților
corespunzători frecvenței a crescut. Explicația pentru asta este că dacă umplem cu zero într -un
domeniu, corespunde interpolăr ii din celălalt domeniu aferent [16].
3.1.6 . Inversul transformatei Fourier pe termen scurt (ISTFT)
Inversul Transformatei Fourier pe termen scurt ne permite să transformăm înapoi
semnalul din domeniul frecvență în domeniul timp, se folosește de inversul Transformatei
Fourier Discretă. Această metodă este realizată prin reconstruc ția ”OLA” care este acronimul de
la ”overlap -add” [1].
Cu această metodă semnalele pot fi adunate, în domeniul frecvență, în magnitudine și în
fază, după care sunt modificate pentru a elimina zgomotul au o legătură. Metoda este neliniară,
modificările depi nd de semnalele aferente. Sunetul după reconstrucție nu este distorsionat.
Ca să folosim metoda ”overlap -add” trebuie să verificăm dacă fereastra aleasă
îndeplinește condiția ”COLA” (constant overlap -add) la dimensiunea saltului ”R”.
23
Această proprietate este foarte utilă deoarece ne asigură că semnalul original poate fi
reconstruit cu ferestre individuale printr -o simplă adunare. Astfel IDTFT devine:
Inversul Transformatei Fourier pe termen scurt poate fi calculată cu ajutorul inversului
Transformatei F ourier Discretă realizată cadru cu cadru și adunând la sfârșit rezultatele.
Dacă dimensiunea ferestrei nu este specificată, trebuie să luăm în considerare raportul
suprapunerii din care face parte fereastra. De exemplu fereastra ”Hann” are o suprapunere de
50% în ”COLA”.
3.3. Vocoder de fază
Vocoderul de fază este o tehnică pentru modificarea în timp și dimensiune a
sunetului. Vocoderul a fost dezvoltat începând de la metoda de codare a vocii destinate în
comprimarea datelor. Cuvântul „vocoder” vine de la termenul inițial „coder vocal”. El a fost
introdus în anul 1966 de către Flanagan și Golden. În ultimul timp i s -a atribuit o atenție sporită
în analiza spectrală. Pentru a înțelege ce face putem să ne gândim la comprimarea bazei în timp a
unei spec trograme pentru a schimba caracteristicile temporale a unui sunet de voce și păstrează
caracteristicile spectrale scurte [9].
24
3.3.1. Procedura inițială
Vocoderul de fază se bazează pe Transformata Fourier pe termen scurt pentru a face
schimbarea din semnal în spectru și vice -versa.
O sinusoidă cu frecvența fsk/N îndeplinește k/N ciclii pe un eșantion de unde rezultă că
faza de propagare dintre două cad re adiacente în F eșantioane o să fie e 2πkF/N. Dacă Xm[k]
rezultă dintr -un sinusoid la care frecvența este fsk/N rezultă cp Xm+1[k] este dată de formula:
Unde „k” indică faptul ca numărul trebuie să facă parte din intervalul [0, 2π).
3.3.2.Scalare î n timp
Este posibil să încetinim un sunet redând semnalul la o rată de eșantionare mai mică , sau
să îl redai la o viteză mai mare redând semnalul cu o rată de eșantionare mai mare, dar acest
lucru face ca pitch -ul să extindă semnalul în timp. Vocoderul de fază face acest lucru fară a
modifica pitch -ul sau schimbă pitch -ul fără a încetinii sunetul.
Pentru a modifica durata unui semnal, păstrând în același timp conținutul său spectral,
schimbăm mărimea hopp -ului F înainte de inversul transformatei Fouri er pe termen scurt. Dacă
R1 și R2 sunt dimensiunile hopp -ului pentru STFT și ISTFT, atunci setarea R2 = 2R1 va dubla
efecti v durata semnalului [5 ].
25
3.3.3.Pitch Shift
Pentru a modifica pitch -ul se combină tehnica de la scalarea în timp și tehnica
reeșantionării. Pentru a modifica pitch -ul cu un factor B folosim prima dată vocoderul de fază
pentru a modifica scalarea în timp a semnalului în fucție de B, după care semnalul care reiese din
scalarea în timp o să fie reeșantionat la o perioadă M care es te perioada de eșantionare inițială.
Semnalul de ieșire o să fie de aceeași durată cu semnalul inițial și se va modifica doar frecvența
care este extinsă cu fact orul B în timpul reeșantionării [6].
3.4. Amplitudine
Amplitudinea este deplasarea maximă a unei oscilații sinusoidale. Ea este valoarea
maximă a unei variabile periodice . Termenul de amplitudine este folosit pentru a face referire la
magnitudinea unei oscilații. De exemplu amplitudinea unui sinusoid „sinusoid = A * sin(w*t)”
este valoarea absolu tă a lui „A”.
Amplitudinea este o variabilă care reprezintă o oscilație. Ne oferă creșterea fizică din
punctul zero până la valoarea maximă pozitivă sau negativă. Este exprimată într -o cantitate fizică
precum tensiunea.
Este alcătuită din valori instantan ee, valori maxime. Amplitudinea este deplasarea unui
vârf din valoarea medie. Prin semnalele audio, aceasta este măsurată ca deplasarea sunetului în
aer și ca amplitudine a sunetului , este exprimată ca și intensitatea sunetului. Schimbarea
amplitudinii nu modifică pitch -ul sau invers.
Amplitudinea Vârf -la-Vârf:
Este schimbarea dintre cel mai înalt vârf și cel mai mic vârf. Cel mai mare vârf conține
valoarea maximă a amplitudinii, cel mai mic vârf conține valoarea minimă a acesteia.
Amplitudinea unui sunet audio se referă la amplitudinea presiunii aerului și câteodată se
referă la amplitudinea deplasării aerului sau diafragma unui difuzor. Logaritmul amplitudinii este
măsurat de obicei în decibeli ”dB”. ”Loudness” este legat între amplitudine și intensitate a
sunetului, este unul dintre cele mai im portante calități ale sunetului [11].
Pentru a putea modifica amplitudinea unui semnal audio trebuie să ne folosim de factori
logaritmici pentru a dubla amplitudinea semnalului cu ajutorul dB.
26
Decibelul este o măsu ră logaritmică și se folosește în muzică, fizică. Este folosit pentru a
schimba valori absolute în amplitudine, putere, volum.
Figura 1.
În figura 1 este reprezentat o scară în care ne arată rapoartele de putere, amplitudine și
decibeli.
Pentru a dubla amplitudinea unui semnal audio este îndeajuns să adunăm 6dB în scara
decibel și după să transformăm cu ajutorul formulei
După ce am transformat amplitudinea putem înmulți semnalul nostru cu noua amplitudine
și ne va rezulta un semnal cu amplitudinea dubl ă. Conversia din amplitudine în decibeli se
realizează cu ajutorul formulei.
27
În momentul în care dublăm amplitudinea, automat sunetul va fi mai tare, dacă micșorăm
amplitudinea sunetul se va auzi mai încet. Amplitudinea unui semnal conține un număr de
energie. O amplitudine mare conține o gamă largă de energie, o amplitudine mică are o gamă
mai mică de energie. Acest conținut de energie se mai numește și intensitatea sunetului. Sunetele
cu o intensitate mare o să se audă tare. Unitatea de măsură a intens ității este decibelul.
În această figură este reprezentat creșterea de amplitudi ne, durata semnalului în timp
rămâne neschimbată, pitch -ul nu se modifica. Ce se va modifica este amplitudinea, intensitatea
semnalului audio, precum și volumul acestuia.
28
Capitolul 4. Aplicația
În această lucrare de licență am realizat un vocoder de fază implementat în limbajul de
programare Matlab. Cu o i nterfață grafică simplă și funcții bine stabilite, această aplicație ne
permite să modificăm parametrii vocii dintr -un semnal audio, dar și modificarea volumului prin
modificarea amplitudinii.
În această diagramă este exemplificat modelul de apel al funcțiilor pentru a ajunge la
rezultatul dorit.
29
4.1. Funcția principală
Am început să abordez aplicația gândindu -mă la funcțiile pe care trebuie să le folosesc și
ordinea în care trebuie apelate pentru a ajunge la rezultatul dorit. De aceea pentru nu a greși
ordinea apelării funcțiilor am decis să creez o funcție principală în care inițializez parametrii ce
urmează a fi folosiți.
Unde „x” reprezintă semnalul audio , „r” reprezintă pasul de eș antionare cu care vom
calcula noul timp în funcția principală , „n” reprezintă dimensiunea ferestrei pentru transformata
Fourier rapidă .
În cazul în care dimensiunea ferestrei transformatei Fourier nu este specificată aceasta va
fi atribuită implicit „1024”.
Variabila „hop” reprezintă o suprapunere a ferestrei de 25% pentru a realiza o
reconstrucție cât mai netedă.
După ce am inițializat fiecare variabilă putem să începem rutin a propriu zisă, adică să
apelăm funcțiile în ordine pentru a ajunge la rezultatul dorit. Prima data se va apela funcția de
Transformare a Teoremei Fourier pe termen scurt pentru a calcula teorema pe semnalul i nițial cu
dimensiunea ferestrei de „1024” cu o suprapunere de 25% pentru a trece din domeniul de timp în
domeniul frecvență.
30
Unde variabila „scf” re prezintă scara de magnitudine pe care o voi folosi în calculul
Transformatei Fourier pe termen scurt în fu ncție de scara de magnitudine, iar ulterior îl punem
într-o variabilă „X”.
După ce calcul ăm STFT va trebui să aflăm noul timp în funcție de pasul de eșantionare
ales. Pentru a face asta trebuie să creăm o matrice alcătui tă din lungimea semnalului după ce
aplicăm STFT, noul timp este aflat prin parsar ea matricei cu pasul de eșantionare pana la „(end –
2)” pentru a prelua toate valorile din matrice.
Acum că am aflat noul timp putem trece la pasul de reconstrucție a semnalului în funcție
de noul timp unde o să realizez interpolarea matricei Transformatei Fourier pe termen scurt.
Pentr u fiecare valoare a noului timp , spectrul magnitudi nii din coloană este interpolat iar
diferența de fază dintre coloana succesivă și coloana curentă este calculată. În urma acestora vom
crea o nouă matrice în ca re vom introduce valoarea pentru fiecare ciclu.
31
Notațiile și variabilele sunt :
„b” este matricea Transformatei Fourier pe termen scurt a semnalului generat de
spectru
„t” este vectorul de timp creat în urma transformării în eșantioane
„hop” este dimensiunea ferestrei alese
„N” este dimensiunea transformatei Fourier
„dphi” este diferența de fază dintr -o sinusoidă din centrul frecvenței a unui ciclu
din al „N” punct al dimensiunii transformatei
„N./(1:(N/2))” este lungimea ciclului al unei sinusoide
„c” este o matrice creată unde vom introduce valorile calculate
32
Apelul funcției care se face este următorul :
Variabil a „X” este transformata Fourier , „t” este noul timp calculat în funcție de pasul de
eșantionare ales, „hop” este suprapunerea ferestrei .
După ce am făcut și recon strucție urmează ultimul pas, acela de apelare a funcției de
calcula re a inversul ui Transformatei Fourier pe termen scurt în care vom face trecerea de la
frecvență în timp și o vom a dăuga înapoi în formă.
Aceasta se fa ce prin apelarea funcției „istft” reprezentată prin :
„X2” este semnalul nostru după reconstrucție
„n” este dimensiunea transformatei Fourier
„hop” este suprapunerea ferestrei transformatei Fourier
„y” este semnalul nostru returnat după prelucrările f ăcute
4.2. Funcția Transformatei Fourier pe termen scurt
Începem prin a aplica Transformata Fourier rapida pe ferestrele semnalului, după care
începem cu implementarea transformatei Fourier pe termen scurt și implementarea funcțiilor
ferestrei.
Spre exemplu fereastra dreptunghiulară ne oferă o imagine bună frecvenței, dar are un
interval mic. Fereastra dreptunghiu lară este o fereastră simplă precum cea triunghiulară.
Cele mai multe alegeri pentru analiza spectrală sunt ferestrele Hamming și Hann, ele ne
oferă o frecvență foarte bună și împreună ne oferă o distanță dinamică mare. Amplitudinea
zonelor laterale scade mai rapid cu fereastra Hann, la fereastra Hamming în sc himb ne crește
ampl itudinea mai repede. O altă fereastră este fereastra Gaussiană ca re este apropiată de fereastra
Hann, dar ne oferă o frecvență puțin mai bună cu o distanță dinamică mai mică
33
4.2.1. Alegem Funcția Ferestrei care dorim să o implementăm
Ca să alegem funcția de fereastră pe care dori m să o implementăm, prima dată, trebuie să
ne asigurăm că fereastra este deschisă. Deși propriet ățile ferestrelor sunt diferite , primul lucru pe
care trebuie să îl luăm în considerare este acel a că fereastra pe care o alegem depinde de
caracteristicile pe care le are semnalul de intrare.
Ultima fereastră este fereastra Blackman -Harris care ne oferă o frecvență mică și ne poate
face o suprapunere de până la 75%.
În următorul tabel vă prezint funcțiile ferestrelor:
Fereastra pe care am ales să o folosesc este fereastra Hann.
4.2.2 .Implementarea Transformatei Fourier pe termen scurt
Putem să implementăm Transformata Fourier direct din funcție, însă modul de tratare a
primei ferestre și a ultimei fe restre este puțin mai complicat și trebuie analizat mai mult. Pentru a
obține primul și ultimul cadru trebuie să aplicăm o fereastră „G” care are o dimensiune mai mică .
Prin formarea unei matrice de ze ro atâ t la sf ârșit cât și la început ajungem la obținerea primului
și ultimului cadru.
34
În aplicație defi nirea funcției este urmă toarea :
Unde „x” reprezintă semnalul in ițial ce urmează a fi prelucrat , „f” și „w” sunt
dimensiunile transformatei Fouri er, „h” este suprapunerea transformatei și „sr” este rata de
eșantionare.
În cazul în care nu sunt specificate toate argumentele de intrare variabilele se vor
inițializa default.
Această funcție va returna cadre transformate cu „STFT” ale semnalului inițial. Fiecare
rezultat este un punct din Transfor mata Fourier Rapidă și următorul cadru este un ofset de „h”
puncte pana la sfârșitul semnalului audio. Datele sunt f ăcute cu funcția ferestrei Hann , sau
dreptunghiulară dacă dimensiunea transformatei este „0”.
35
După ce am crea t matricea d , vom începe să îi atribuim valorile transformatei Fourier Pe
Termen Scurt pe semnalul in ițial.
În caz că nu vom avea un argument de ieșire , vom afișa spectrograma semnalului a primei
ferestre, altfel vom returna semnalul prelucrat.
36
4.3. Funcția Inversă a Transformatei Fourier pe termen scurt
În această funcție vom realiza inversul Transformatei Fourier pe termen scurt pentru a
transforma semnalul prelucrat din frecvență înapoi în timp și introdus înapoi în formă.
Unde „d” reprezintă semnalul prelucrat, „f” și „w” sunt dimensiunile transfor matei
Fourier , „h” este suprapunerea transformatei.
În cazul în care nu este dat argumentul de intrare variabilele se vor inițializa default.
Inversul Transformatei face o suprapunere a resintezei făcute de „STFT” în semnalul
declarat. Fiecare coloană a semnalului este preluată ca un rezultat al unui punct „fft”, după care
fiecare cadru succesiv este echilibrat de punctele dimensiunii de suprapunere „h”. Fereastra
folosită este fereastra „Hann”, sau fereastra dreptunghiulară dacă dimensiunea transformatei este
zero. Se măsoară ieșirea pentru funcția ferestrei „Hann” cu o suprapunere de 25%.
37
4.4. Funcția de reeșantionare
Această funcție a fost implementată special pentru faza de Pitch , deoarece după ce se va
aplica funcția principală cu un pas de eșantionare se va face doar o schimbare de lungime/durată
a semnalului audio. Pentru a rămâne doar pitch -ul fără să modificăm durata semnalului, în
funcția de eșantionare vom apela o funcție pr e-definită din MATLAB numită „resample”.
Puteam să apelez și din programul principal funcția resample, dar , deoarece parametrii
funcției trebuie să fie două numere întregi care împărțite trebuie să fie egale cu pasul de
eșantionare, am făcut această funcți e de reeșantionare pentru că pasul de eșantionare poate să fie
și un număr double. Sintaxa funcției este următoarea:
38
„x” este semnalul audio
„v” este parametrul dat de noi de la tastatură , pasul de eșantionare
Preiau valoarea parametrului care este de tip double și îi fac o conversie în string, preiau
toate valorile după virgulă, calculez lungimea stringului după care calculez par ametrul „n” prin
„10^length(g)” , care este cel de -al treilea parametru al funcției resample. Pentru a putea prelua
cifrele de după virgulă și pentru a forma un număr întreg vom afla cel de -al doilea parametru al
funcției resample prin înmulțirea valorii „v” cu cel de -al treilea parametru „n”.
Funcția resample are următoarea sintaxa:
Această funcție reeșantionează semnalul de intrare „x” la „p/q” ori ra ta de eșantionare
inițială (sr) , astfel dacă semnalul prelucrat de funcția principală are o rată de eșantionare diferită,
cu această funcție o să modificăm rata de eșantio nare la cea originală.
4.5. Vocoderul de fază
Am ajuns în faza în care am inițializat vocoderul de fază, cu ajutorul acestui vocoder vom
putea realiza modificare a în timp a unui semnal audio , dar și modificare de pitch a vocii. Acestea
se realizează cu ajutorul transformatei Fourier pe termen scurt în ca re transformăm semnalul din
timp în frecventă, urmat de interpolare și reconstrucție unde creăm o matrice a spectrului
modificat interpolând magnitudinea și vom calcula faza pe toată durata semnalului. După vom
39
aplica inversul transformatei Fourier pentru a transforma semnalul prelucrat din frecvență înapoi
în timp și îl vom adăuga înapoi în formă.
4.5.1. Pitch
Pitch -ul unui semnal audio se poate modifica foarte ușor prin modificarea ratei de
eșantionare a semnalului original. De exemplu avem un semnal audio cu o rată de eșantionare de
„16000” pe secundă. Prin redarea acestui semnal la o rată de eșantionare diferită se va modifica
atât pitch -ul cât și durata semnalului în timp, noi în aplicația prezentată nu dorim acest lucru.
Pentru a realiza o schimba re a pitch -ului fără să modificăm durata în timp vom utiliza
vocoderul de fază pentru a modifica timpul, urmat de o reeșantionare a semnalului prelucrat
pentru a aduce semnalul la aceeași durată de timp ca și semnalul original.
Astfel avem o modificare a pitch -ului fără să modificăm durata semnalului în timp.
Codul în care sunt apelate metodele este următorul:
„y” este semnalul nostru original
„pitch1” este valoarea pasului de la tastatură
„e” semnalul modificat
„f” semnalul final cu mod ificare de pitch
Ne mai rămâne o problemă, alegerea intervalului în care trebuie să dăm valoarea pentru
pitch, deoarece se pot produce distorsiuni în voce și nu o să mai fie clară. De aceea am ales
intervalul [0.5;1.5].
4.5.2. Scalare în timp
Modificare a duratei se poate face ca și la pitch. Putem schimba durata prin m odificarea
ratei, dar ajungem la aceeași problemă, se va modifica atât durata semnalului cât și pitch -ul. Noi
nu dorim acest lucru pentru că vrem să modificăm durata fără să modificăm pitch -ul.
40
Putem să lungim semnalul, sau să scurtăm semnalul, prin utilizarea vocoderului, până la
urmă acesta este rolul lui. Prin apelarea funcției principale se va produce o modificare în timp
pentru că se face o modificare a mărimii „hop -ului” între transfor mata Fourier pe termen scurt și
inversul acesteia. Pentru a vedea unde se modifică semnalul în timp dintre cadre, fazele
coeficienților transformatei sunt din fiecare cadru și sunt adaptate corespunzător.
Corpul în care este apelată metoda este :
„y” s emnalul original
„lungime1” este valoarea citită de la tastatură
„g” semnalul modificat
Aceeași problemă ca și la pitch, deducerea intervalului în care trebuie să dăm valoarea
pentru lungime, deoarece și aici se pot produce distorsiuni în voce cât și în ti mp, iar semnalul nu
o să mai fie clar. De aceea am ales intervalul [0.5;3].
4.6. Interfața grafică
Am dezvolt at o interfață grafică foarte uș or de folosit și cât mai extensibilă . Am început
prin a cr ea o interfață grafică principală în care am setat coordonatele de tip grid, după care am
început să adaug elementele necesare. Aplicația constă în crearea a trei interfețe grafice.
Interfața „Meniu”
Interfața „meniuInfo”
Interfața „FinalForm”
4.6.1.Meniu
Din meniu putem selecta ce dorim să facem mai depa rte: să începem prelucrarea
semnalelor, să alegem informații generale și ultima variantă să ieșim din aplicație.
41
Am început prin a seta coordonatele axelor de tip grid după care am încărcat și setat
imaginea de fundal. Imaginea de fundal este salvată în folderul curent al aplicației și se numește
„audios1” și este în formatul „.jpg”.
La apăsarea butonului „Proiect” se va închide registrul curent și se va deschide interfața
„FinalForm”.
La apăsarea butonului „ Info” se va închide registrul curent și se va deschide interfața
„meniuInfo ”.
42
La apăsarea butonului „ Close ” se va închide registrul curent și va ieși din program.
4.6.2. Info
Info ne oferă de talii despre autorul aplicației și titlul lucrării . Ne permite și întoarcerea la
meniul principal .
43
4.6.3.FinalForm
Aceasta este interfața aplicației unde vom aplica cerințele proiectului. Am început prin a
seta coordonatele axelor de tip grid după care am încărcat și setat imaginea de fundal. Imaginea
de fundal este salvată în folderul curent al aplicației și se numește „audios” și este în formatul
„.jpg”.
Am ales să folosesc trei panel -uri deoarece este mai ușor de aranjat și de manipulat
formele.
4.6.3.1. Panel 1
Primul panel creat constă în încărcarea fișierului audio și ne permite prelucrări precum
afișarea duratei în secunde, afișarea semnalului în frecvență , să ne întoarcem la meniu și redarea
acestuia.
Vom explica următorul set de butoane:
„Incă rcare” se va deschide o fereastra care ne permite să preluăm calea fișierului audio și
se va adăuga într -o varia bilă detalii despre melodie cum ar fi r ata de eșant ionare pe o secundă ,
numărul total de eșantioan e, durata și câți biți pe eșantion. Vom pune în variabila „sr” numărul
de eșantioane într -o secundă pe care o are semnalul nostru, iar în „y” este semnalul audio.
Variabilele „sr” și „y” le -am făcut globale pe ntru a putea fi utilizate de celelalte obiecte din
aplicație .
44
Durata semnalului va fi afișa tă în graficul „semnalTimp” , timpul semnalului audio va fi
afișat în secunde . După ce preiau variabilele „y” și „sr” vom cr ea un vector începând de la zero
până la sfârșitul semnalului cu pasul „1/numărul de eșantioane într -o secundă”. După ce am creat
vectorul semnalului apel ăm funcția „plot” care ne va cr ea o schiță în axa „semnalTimp”.
„Redare” n e va reda fișierul audio după un apel al funcției im plementate în matlab
„sound” care ne va reda semnalul audio la rata de eșantionare „sr”.
Spectrul semnal ului în domeniul frecvență este realizat cu ajutorul tra nsformatei Fourier
Rapidă care ne va calcula trecerea din domeniul timp în domeniul frecvență. Începem pr in
45
aplicare a transformatei Fourier rapidă pe semnal, după vom prelua amplitudinea maximă și vom
aplica „fftshift” care ne va aranja matricea creată prin mutarea fre cvenței zero în centrul matricei .
„Meniu” închide interfața curentă și va deschide inter fața „Meniu”.
4.6.3.2. Panel 2
Acesta este cel de -al doilea panel în care vom alege cu ajutorul unui „pop -up menu” ce
dorim să aplicăm pe semnalul nost ru. Avem patru variante de ales: să modificăm pitch -ul, să
modificăm amplitudinea, să schimbăm lungimea, sau să le aplicăm pe toate trei deodată.
46
În funcție de alegerea noastră, în panel vor fi vizibile butoanele , slider -urile și casetele
text aferente alegerii făcute.
47
Funcțional itatea butoanelor este următoarea :
„Pitch” după ce se va prelua valoarea pentru modificarea de pitch dintr -un edit textBox ,
acest editTextBox poate fi actualizat cu ajutorul unui slider, se va verifica dacă face parte din
intervalul [0.5;1.5] pentru a nu avea distorsiuni de voce. Dacă valoarea nu face parte din interval
48
va ap ărea un mesaj de eroare că valo rile permise fac parte din [0.5;1.5] și cel de -al treilea panel
nu va fi disponibil. Dacă valoarea face parte din interval cel de -al treilea panel va fi disponibil și
vom putea analiza semnalul prelucrat , se va afișa spectrul semnalului în domeniul frecvență,
respectiv semnalul în domeniul timp .
„Amplitudine” vom prelua valoarea di ntr-un slider cu valoarea minimă zero și valoarea
maximă „4 ”. După ce am preluat valoarea din slider, vom amplifica amplitudinea maximă a
semnalului cu valoarea dată de noi prin slider . Se va afișa spectrul semnalului în domeniul
frecvență, respectiv semnalul în domeniul timp în cel de -al treilea panel .
49
„Lungime” după ce dăm valoarea pentru modificarea lungimii într -un edit textBox, acest
editTextBox poate fi actualizat cu ajutorul unui slider, se verifică dacă face parte din intervalul
închis [0.5;3.0] pentru a nu avea distorsiuni de voce. Dacă valoarea nu face pa rte din interval va
apărea un mesaj de eroare că valo rile permise trebuie să aparțină intervalului [0.5;3] și cel de -al
treilea panel nu va fi disponibil. Dacă valoarea este bună, cel de -al treilea panel va fi disponibil și
vom putea analiza semnalul prelu crat, se va afișa spectrul semnalului în domeniul frecvență,
respectiv semnalul în domeniul timp .
50
„Aplicare” acesta este cazul în care vom alege din „pop -upMenu” să aplicăm toate
metodele deodată. Se vor verifica valorile introduse în editTextBox aferent e pitch -ului, respectiv
lungimii dacă fac parte din intervalele definite lor. După ce se vor prelua valorile date de noi,
pentru a aplica toate metodele și să ajungem la un rezultat dorit, metodele trebuie apelate în
următoarea ordine:
51
Pitch
Lungimea
Amplitudinea
Se face Pitch prima dată pentru că, dacă modificăm semnalul în timp și după facem
„reeșantionare” se va produce doar o schimbare de Pitch, nu de lungime. Odată realizată
schimbarea de pitch, putem să facem o scalare în timp a semnalului modifi cat. La sfârșit vom
amplifica amplitudinea maximă a semnalului cu valoarea amplitudinii preluată din slider.
52
4.6.3.3 . Panel 3
Ultimul panel este la fel ca și primul în care ne permite analiza semnalului după
prelucrare.
Funcționalitatea butoanelor :
Durata semnalului în timp va fi afișa t în graficul „semnalTimp”, timpul semnalul ui audio
va fi afișat în secunde. După ce preiau semnalul prelucrat și „sr” vom cr ea un vector începând de
la zero până la sfârșitul semnalului cu pasul „1/numărul de eșantioan e într -o secundă”. După ce
am creat vectorul semnalului apelăm funcția „plot” care ne va cr ea o schiță în axa
„semnalTimp Prelucrat ”.
SemnalFrecvPitch ne va afișa spectrul semnal ului în dom eniul frecvență cu ajutorul
trans formatei Fourier Rapidă care ne va calcula trecerea din domeniul timp în domeniul
frecvență. Începem prin aplicarea transformatei Fourier rapidă pe semnal ul prelucrat , după vom
prelua amplitudinea maximă și vom aplica „fftshift” care ne va aranja matricea creată prin
mutarea fre cvenței zer o în centrul matricei .
„Redare” ne va reda fișierul audio după cu un apel al funcției implementate în matlab
„sound” în care ne va reda semnalul audio prelucrat la rata de eșantionare „sr”.
La pornirea interfeței „FinalForm” vor fi afișate doar primul și c el de -al doilea panel, al
treilea panel va fi afișat numai după aplicarea metodei pe care o vom alege .
53
4.7. Funcții adiț ionale
Funcțiile adiționale pe care le -am folosit sunt funcțiile implementate de Matlab.
a) ”Plot” este o funcție care cre ează o schiță 2 -D a semnalului ”y” care corespunde
valorilor lui ”x”. Dacă cele două semnalele sunt vectori, atunci trebuie să fie de
lungime exactă. Sintaxa ei este .
Am folosit această funcție pentru a realiza graficul semnalului nostru atât în
domeniul timp cât și în domeniul frecvență.
b) ”Audioread” este funcția care citește numărul de eșantioane a unui semnal audio ,
numele cu extensia aferentă și rata de eșantionare pe secundă ”Fs”.
54
c) ”Sound” transmite către difuzor semnalul audio format din eșantioa ne la o rată de
eșantionare pe secundă ”Fs”.
d) ”Resample” reeșantionează semnalul de intrare după ce a fost prelucrat, cu
raportul dintre două valori pentru a aduce semnalul la rata de eșantionare
originală. Dacă semnalul de intrare este o matrice, ”resamp le” va trata fiecare
coloană a semnalului ca și o coloană independentă. Cele două valori trebuie să fie
întregi și pozitive.
e) ”Linspace ” returnează un vector format din puncte cu o spațiere între ele. El este
similar operatorului ”:” din matlab, dar ne oferă control direct asupra numărul ui
de puncte.
4.8. Teste și rezultate
În programul Matlab cu ajutorul limbajului de programare aferent(matlab) am dezvoltat o
aplicație prin care putem modifica anumiți parametrii ai vocii. Acest program ne permite :
a) Modificarea vocii ca să fie mai înaltă sau mai joasă prin aplicarea funcțiilor
transformatelor Fourier și inversul acestora, urmat de a pelul unei funcții implementate
în Matlab pentru a aduce semnalul la același număr de eșantioane ca și semnalul
original.
Figura 4.8.1.
55
Figura 4.8.2.
În figura 4.8.1. se observă semnalul original în domeniul timp și în domeniul
frecven ță, iar figura 4.8.2. reprezintă semnalul preluc rat cu modificarea vocii pentru a
fi mai înaltă. Modificarea s -a produs în urma introducerii unei valori care ajută la
calcula rea noului timp, urmat de reeșantionarea semnalului pentru a -l aduce la același
număr de eșantioane cu semnalul original.
Pentru a modifica vocea să fie mai înaltă va loarea pe care trebuie să o introducem
trebuie să fie mai mică decât ”1”, valoarea ”1” fiind valoarea originală a semnalului.
Dacă dorim să avem vocea mai joasă valorile introduse trebuie să fie mai mari decât
”1”.
Funcția de reeșant ionare primește ca și parametru – semnalul prelucrat și alți doi
parametrii , aceștia t rebuie să reprezinte două numere întregi , iar împărțite unul la
celălalt trebuie să fie egale cu valoarea pe care o vom da de la tastatură. În cazul în
care, numerele nu c orespund cerințelor de mai sus, va apărea o eroare care aparține
funcției de reeșantionare. Mai exact:
b) Scalarea în timp a semnalului original păstrând caracteristicile vocii. Lungesc sau
scurtez semnalu l în timp fără a modifica vocea . Acest lucru îl rea lizez cu ajutorul
funcțiilor Fourier și inversul acestora pentru a -l adăuga înapoi în formă, pentru a
aduce semnalul înapoi din domeniul frecvență în domeniul timp.
56
Figura 4.8.3.
În figura 4.8.3. este prezentat semnalul prelucrat cu o scalare în timp mai scurtă.
Modificarea s -a produs în urma preluării unei valori dintr -un slider, această valoare
este afișată într -un text editabil și poate fi modificată prin introducerea unei noi valori
în acest t ext editabil. După introducerea și preluarea valorii se va calcula noul timp
după aplicarea transformatelor Fourier. Dacă dorim ca lungimea semnalului să fie mai
lungă , valoarea introdusă trebuie să fie mai mică decât valoarea inițială a semnalului
care es te ”1” , dacă dorim să scurtăm durata semnalului valoarea introdusă trebuie să
fie mai mare decât valoarea inițială .
Erorile ce au apărut în această secvență : atunci când am vrut să lung esc sau să sc ad
lungimea semnalului au apărut distorsiuni și vocea nu mai era clară . Pentru rezolvarea
erorii am stabilit un interval în care se vor atribui valorile necesare, conform
caracteristicilor, pentru a nu distorsiona semnalul.
c) Schimbarea volumului . Acest lucru este realizat prin multiplicarea semnalului cu
transformările logaritmice aferente amplitudinii. Un semnal original la amplitudinea
inițială are ”1 dB”, pentru a dubla semnalul trebuie să îi adăugăm 6dB . Vom
transforma cu o funcție logaritmică decibelii și îi vom înmulți cu semnalul original.
Figura 4.8.4.
Figura 4.8.4. reprezintă semnalul prelucrat după dublarea amplitudinii originale.
Modificarea amplitudinii se preia dintr -un slider sau un text editabil. Valorile care
sunt preluate reprezintă cu cât vrem să amplificăm semnalul, sau să diminuăm
57
semnalul. Din slider putem să alegem să dublăm, să triplăm, să îl facem de patru ori
mai mare sau să înjumătățim amplitudinea semnalului. În momentul în care am ales
să dublăm amplitudinea semnalului se va aplica o transformare logaritmică din
decibeli și va fi înmulțită cu semnalul original.
d) Afișarea graficului în domeniul timp a semnalului . Îl voi afișa în timp după ce preiau
semnalul și rata de eșantionare. Se va crea un vector de la zero până la sfârșitul
semnalului. Prin apelarea funcției ”plot” va fi afișa t graficul funcției pe o axă .
Figura 4.8.5.
În figura 4.8.5. este prezentat graficul semnalului prelucrat în domeniul timp. Pentru a
afișa graficul se vor seta axele în care dorim să afișăm semnalul.
e) Afișarea graficului în domeniul frecvență a semnalului se va realiza prin folosirea
Transformatei Fourier Rapidă , care calculează schimbarea semnalului din domeniul
timp în domeniul frecvență. Preluăm valorile absolute și vom face un ”fftshift” care
ne aranjează matricea prin mutarea fre cvenței zer o în centrul matricei .
58
Figura 4.8.6.
În figura 4.8.6. se observă graficul semnalului prelucrat în domeniul frecvență. Pentru
a afișa graficul se vor seta axele în care dorim să afișăm semnalul după aplicarea
Transformării Fourier Rapidă.
f) Afișarea graficului în domeniul frecvență pe anumite zone din semnalul audio , o
realizez prin ajutorul unui slider căruia îi voi atribui valoarea maximă să fie durata
semnalului în secunde. Dacă doresc să afișez graficul semnalului la un anumit
moment, voi calcula la ce eșantion se află semnalul prin înmulțirea numărului total de
eșantioane al semnalului cu secunda la care se află graficul.
Figura 4.8.7.
59
Figura 4.8.8.
În figura 4.8.7. se observă spectrul semnalului în domeniul frecvență, în timp ce în
figura 4.8.8. este reprezentat spectrul semnalului în domeniul frecvență la momentul
”1.53 s”. Pentru a calcula spectrul semnalului în momentul de timp pe care îl alegem
vom prelua valoarea din slider, sau introdusă cu ajutorul unui text editabil și o vom
înmulți cu rata de eșantionare ”SampleRate” pentru a afla eșantionul la care se află
semnalul la momentul ales. Vom crea un semnal nou în care vom modifica semnalul
origin al să fie preluat în intervalul (ValEșantion – 2000 , ValEșantion + 2000) pentru a
realiza spectrul în momentul respectiv. După ce am preluat eșantioanele pe care dorim
să realizăm spectrul, vom aplica FFT pentru a transforma din domeniul timp în
domeniul frecvență.
60
Capitolul 5. Concluzii și dezvoltări viitoare
5.1. Concluzii
Aplicația pe care am creat -o este utilă în domeniul electronic, în special cel muzical.
Aceasta ne permite modificarea parametrilor vocii, modificarea în timp a unui fișier audio, dar și
modificarea volumului acestuia. Putem analiza în două domenii, respectiv timp și frecvență și să
urmărim în același timp modificările făcute.
Pentr u realizarea acestei aplicații am folosit limbajul de programare Matlab în care am
reușit să îmi îndeplinesc obiectivele propuse, cum ar fi: modularea vocii în grosime, schimbarea
duratei fișier ului audio, crearea unei interfe țe ușor de utilizat de către o ricine se ocupă de
domeniile din care face parte aceasta.
În dezvoltarea acesteia a trebuit să mă folosesc de transformările Fourier pentru
schimbarea duratei fișierului audio, și pe lângă transformările Fourier să mă folosesc de
algoritmul reeșantionării unui semnal pentru modificarea vocii. Pentru modificarea volumului a
trebuit să mă folosesc de transformările logaritmice pe scara decibelică.
Prin realizarea acestui pr ogram mi -am dezvoltat capacităț ile de programare personale și
cunoșt ințele în domeniul electronic. Am învățat cum să structurez codul unui program și să fiu
mult mai organizat în implementarea unor metode.
În concluzie, sunt mândru că am reușit să implementez ce mi -am dorit și am atins
obiectivele propuse. Experiența pe care am dobândit -o în realizarea acestei aplicații cu sigura nță
mă va ajuta în viitor.
5.2. Dezvoltări viitoare
Sistem de autentificare . Acestei aplicații îi poate fi dezvoltat un sistem de autentificare
care îi va permite utilizator ului să aibă propriul cont și propriul profil. M -am gândit că aș putea
crea o bază de date în care să salvez informaț ii despre fiecare cont de u tilizator precum: nume,
detalii personale, poz a, proiecte, etc. Pentru a realiza acest lucru avem nevoie și de un adao s la
interfața grafică care să facă legă tura inițială intre aplicație si baza de date.
61
Salvarea fișierului audio. Dacă utilizatorul dorește să salveze fișierul în urma
modificărilor dorite, putem adăuga un buton la interfață pentru a salva semnalul ca și un f ișier cu
extensia ”.wav”. Pentru acest lucru se va face un apel al metodei ”audiowrite”, aceasta este o
funcție pre-definit ă de Matlab în care va salva pe hard -disk-ul utilizatorului un fișier audio cu
extensia corespunzătoare cu o rată de eșantionare folo sită în cadrul prelucrărilor aferent e.
62
Bibliografie.
[1] Allen J.B. – Short time spectral analysis, synthesis, and modification by discrete
Fourier transform, 1997.
[2] Bhanu Prasad, S.R.M. Prasanna. – Speech, Audio, Image and Biomedical Signal
Processing using Neural Networks, Editura Springer, Berlin, 2008.
[3] Chu Eleanor, George Alan. – Inside the FFT Black Box:Serial and Parallel Fast Fourier
Transform Algorithms, Editura CRC Press, 1999.
[4] D. Sundararajan .- The Discrete Fourier Transform: Theory, Algorithms and
Applications, Editura World Scientific, 2001.
[5] Dolson M. – The phase vocoder: A tutorial. C omputer Music Journal, Editura The MIT
Press, 1986.
[6] Dolson M., Laroche J. – New phase -vocoder techniques for pitch -shifting,
harmonizing and other exotic effects. Editura IEEE, New York, 1999/
[7] Duhamel P. – On computing the Inverse DFT, 1998.
[8] Gent leman, W. Morven; Sande G. – Fast Fourier transforms for fun and profit, 1996.
[9] J. L. Flanagan, R. M. Golden, "Phase Vocoder," Bell System Technical Journal,
November 1966, 1493 -1509.
[10] Jacobsen Eric, Lyons Richard. – The sliding DFT, Editura IEEE, 200 3.
[11] Malcolm Russel Ward. – Electrical Engineering Science, Editura McGraw -Hill, 1971.
[12] Otnes Enochson, Loren D. – Programming and Analysis for Digital Time Series Data,
Editura Shock and Vibration Information Center, 1968.
[13] Steven W. Smith. – The Scientist and Engineer's Guide to Digital Signal Processing,
Editura California Tehnical Pub, California, 1999.
[14] Van Loan Charles. – Computational Frameworks for the Fast Fourier Transform,
Editura SIAM, 1992.
[15] Weisstein Eric W. – CRC Concise Encycl opedia of Mathematics, Editura CRC Press,
2003.
[16] Smith, J.O. WAVE PCM soundfile format. Ccrma.standford.edu, 2009.
[17] Matlab https://www.mathworks.com/help/matlab/index.html
[18] Blackman -Harris Window Family. Ccrma.stanford.edu.
[19] Gaussian Window and Transform. Ccrma.standford.edu.
63
[20] Short Term Fourier Transform
https://en.wikipedia.org/wiki/Shorttime _Fourier_transform
[21] Window Function https://en.wikipedia.org/wiki/Window_function
[22] Audacity https://en.wikipedia.org/wiki/Audacity_(audio_editor)
[23] https://www.audacityteam.org/about/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Conducator științific : Lector dr.ing. Mihai Neghină Îndrumător: Lector dr.ing. Mihai Neghină Absolvent: Stanciu Liviu Gabriel Specializarea… [628901] (ID: 628901)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
