Sunteți pe pagina 1din 59

REZUMAT

Aceast lucrare are ca scop propunerea unui algoritm viabil de procesare digital a semnalelor i implementarea lui pe un sistem cu FPGA (Field Programmable Gate Array). Cteva tehnici de modificare ale timbrului vocal sunt explorate i prezentate. n final s-a ales realizarea unei tehnici proprii care a fost simulat i funcioneaz. Algoritmul const n decimarea semnalului folosind un raport intrare/ieire egal cu trei i apoi interpolarea acestuia cu un raport ieire/intrare tot de trei, dar eantioanele lips fiind nlocuite cu zerouri. Simulrile au fost realizate utiliznd Simulink cu blocuri de la Xilinx. Rezultatul final este implementarea unui sistem de sine stttor care are capacitatea s eantioneze vocea la 8Khz , apoi o int roduce ntr-o memorie iar ulterior aceasta poate fi auzit n boxe. Toate aceste procese se realizeaz n timp real. Din pcate algoritmul pentru modificarea timbrului nu a putut fi implementat hardware, acesta funcionnd doar n simulare. Pentru realizarea prii hardware a proiectului s-a folosit: o plac de dezvoltare Basys2, un convertor digital-analog i anume PmodDA2, un convertor analog-digital i un microfon - anume PmodMIC, un modul de conectare cu mufe RCA i difuzoare multimedia. Lucrarea este un succes educaional deoarece s-au dobndit cunotine variate n domeniul dezvoltrii FPGA-urilor i al procesrii digitale a semnalelor. n plus s-a ctigat o vast experien n lucrul cu software-urile "System Genererator for DSP" i "Xilinx ISE 12.1 ". Pe viitor proiectul poate fi extins n primul rnd prin implementarea algoritmului de modificare a timbrului, dar i n alte direcii cum ar fi folosirea portului VGA pentru afiarea spectrogramei vocale.

CUPRINS
CAPITOLUL I - Introducere.......................................................................................................3 CAPITOLUL II - Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie..................................................................................................................6 2.1 Prezentarea plcii.........................................................................................................6 2.2 Schema bloc i caracteristicile de baz ale plcii......................................................7 2.3 Sursele de alimentare ale plcii..................................................................................8 2.4 Configurare, oscilatoare i circuite I/O......................................................................9 2.5 Conectori de extensie.................................................................................................10 2.6 Definirea pinilor pentru Basys2................................................................................11 2.7 Modulul PmodDA2....................................................................................................12 2.8 Modulul PmodMIC....................................................................................................13 2.9 Modulul CON4...........................................................................................................14 CAPITOLUL III - Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP.......................................................................................................................15 3.1 Mediul Xilinx ISE Design Suite 12.1 - Crearea unui proiect nou.........................15 3.2 Mediul de programare i simulare System Generator for DSP............................20 3.2.1 Setul de blocuri din System Generator.....................................................20 3.2.2 Crearea vectorilor de intrare folosind Matlab.........................................22 3.2.3 Iniializarea memoriilor RAM i ROM....................................................22 3.2.4 Generarea codului HDL i a bitstream-ului.............................................23 CAPITOLUL IV - Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal.......................................................................................................................24 4.1 Modificarea timbrului n domeniul frecven.........................................................24 4.2 Modificarea timbrului n domeniul timp.................................................................25 4.2.1 Algoritmul lui Lent.....................................................................................25
1

4.2.2 Algoritmul SOLA........................................................................................26 4.3 Soluia personal a algoritmului..............................................................................27

CAPITOLUL V - Implementarea algoritmului pentru modificarea timbrului vocal n FPGA.............................................................................................................................................30 5.1 Schema proiectului n Xilinx ISE i simularea acesteia.........................................30 5.2 Componenta VHDL DA2RefComp..........................................................................32 5.3 Componenta VHDL PmodMICRefComp...............................................................34 5.4 Componenta memorie LogiCORE IP......................................................................36 5.5 Componenta clock_8k...............................................................................................38 5.6 Componenta numarator............................................................................................38 5.7 Componenta controler...............................................................................................39 5.8 Componenta clock_mic.............................................................................................39 5.9 Componenta clk_da2.................................................................................................40 5.10 Schema fizic a proiectului.....................................................................................40 CAPITOLUL VI - Calculul economic i fiabilitatea software.................................................42 6.1 Generaliti asupra costului de producie...............................................................42 6.2 Costul de implementare al proiectului.....................................................................43 6.2.1 Calculul cheltuielilor directe(Cdir).............................................................43 6.2.2 Calculul cheltuielilor indirecte...................................................................44 6.3 Fiabilitatea software..................................................................................................45 6.3.1 Principii de baz..........................................................................................45 6.3.2 Clasele de fiabilitate....................................................................................45

CAPITOLUL VII - Concluzii.....................................................................................................47 7.1 Sumar al realizrilor i a fiierelor rezultate..........................................................47 7.2 Idei viitoare de extindere a proiectului....................................................................48

ANEX.........................................................................................................................................49 BIBLIOGRAFIE
2

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Introducere

Capitolul I Introducere
Obiectivul acestui proiect este de a modifica timbrul vocal n timp real i de a -l

implementa ntr-un Field Programmable Gate Array (FPGA) i anume pe o plac Basys2. FPGAurile (care conin componente de logic programabil - blocuri logice) sunt din ce n ce mai populare n implementarea aplicaiilor pentru procesarea semnalelor. Proiectul pune accent att pe propunerea unui algoritm viabil de procesare a semnalului ct i pe implementarea acestuia pe un sistem fizic cu FPGA. Cu toate c implementarea hardware final (cu tot cu algoritmul pentru modificarea timbrului) nu a fost realizat, cunotinele dobndite despre procesarea vorbirii i dezvoltarea circuitelor ntr-un FPGA fac acest proiect un succes educaional. n general procesarea digital a semnalelor n timp real este realizat utiliznd fie microprocesoare dedicate fie circuite integrate dedicate acestei aplicaii (ASICs - application specific integrated circuits). Microprocesoarele specializate n DSP(digital signal processing) implic costuri mici de implementare i producie, dar performana acestora este limitat de capacitatea de procesare a chip-ului per ciclu i de viteza maxim a ceasului. Pentru c un singur microprocesor poate s realizeze doar o instruciune la un moment dat, aceast tehnologie se poate dovedi a fi inadecvat pentru aplica ii care au nevoie de filtre de ordin mare sau de viteze mari ale transferurilor de date. Pentru o performan ridicat i un consum mic, inginerii n procesarea digital a semnalelor s-au orientat ctre ASIC-uri - n care un sistem digital este format din pori logice care pot fi interconectate este implementat pe un chip foarte mic din siliciu utiliznd tehnologia de fabricaie VLSI (Very Large Scale Integration). Avantajul ASIC-urilor este c chip-ul ofer procesare paralel deoarece conine mai mu lte multiplicatoare, sumatoare i functii logice care funcioneaz simultan, n comparaie cu un singur ALU coninut ntr -un microprocesor. Cu toate acestea proiectarea i fabricarea unui ASIC necesit iniial multe resurse inginereti, fcnd aceast opiune nepractic pentru aplicaiile care doresc a avea un cost redus sau un volum mic. n plus ASIC-urile odat fabricate nu mai pot fi reconfigurate.

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Introducere

Noile imbuntiri n tehnologia FPGA-urilor au introdus multiple opiuni pentru aplicaiile de procesare digital a semnalelor care necesit performane nalte i costuri mici de dezvoltare si realizare. Un FPGA este un circuit integrat de uz general care poate fi programat de ctre utilizator i nu de ctre productor cum se ntmpl la alte circuite de acest gen. Spre deosebire de un ASIC(Application Specific Integrated Circuit), care ndeplinete aproape aceleai funcii, un FPGA poate fi reprogramat chiar i dup ce a fost deja integrat ntr-un sistem. FPGA-ul este programat prin descrcarea unui program de configurare denumit "bitstream" n memoria RAM static integrat. Ca i codul obiect pentru un microprocesor, acest "bitstream" este rezultatul procesului de compilaie care transform limbajul de niv el nalt n instruciuni n cod main. FPGA-urile ofer utilizatorului o gam larg de resurse configurabile cu care se pot implementa o multitudine de funcii aritmetice i logice. Aceste resurse includ : blocuri DSP(digital signal processing) dedicate, regitri, buffere tristate, multiplexoare, demultiplexoare. Circuitele FPGA sunt dispozitive cu performane foarte bune n procesarea datelor. Performanele DSP sunt derivate din capacitatea FPGA-ului de a construi arhitecturi paralele n constrast cu microprocesoarele sau procesoarele DSP, unde performanele sunt stabilite de viteza ceasului. Performana FPGA-ului este direct proporional cu paralelismul care poate fi implementat s ruleze un algoritm anume. O combinaie ntre frecvenele din ce n ce mai mari (100-200 Mhz cele uzuale n ziua de azi) i o arhitectur distribuit a memoriei d voie inginerului s exploateze la maximum paralelismul n diverse aplicaii. De exemplu, limea de band a memoriei unui FPGA care ruleaz la o frecven de 150 Mhz poate s fie de sute de terabytes pe secund [1, pag. 13]. Proiectul se axeaz pe procesarea audio, pentru aplicaiile practice ale acesteia i palpabilitate n testare i demonstrare. Se va studia modificarea timbrului vocal ca obiect de interes pentru procesarea digital a semnalelor. Modificarea timbrului vocal este un efect special n care timbrul unui semnal audio vocal este "ngroat" sau "piigiat" , durata semnalului audio rmnnd constant. Aplicaiile acestui efect pot fi regsite n CD playere, software pentru editare audio, instrumente pentru mascarea vocii i jucrii [2, pag. 3]. Mergnd i mai departe, procesarea vorbirii a fost aleas ca tem din cauza importanei curente n cmpul telecomunicaiilor i al multimedia.

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Introducere

Scopul acestui proiect este de a implementa un algoritm de modificare a timbrului vocal n timp real pe un FPGA. n mod egal se va avea n vedere o soluie efectiv i ct mai simpl de a implementa acest algoritm ntr-un FPGA utiliznd un limbaj de programare hardware de nivel inalt. Am ales s lucrez cu un FPGA n scopul de a ctiga experien ntr-un domeniu care atrage din ce n ce mai mult interes att n mediul academic ct i n cel industrial. Se vor analiza tehnici deja existente de modificare a timbrului vocal i se vor propune ca iva algoritmi potrivi i pentru implementarea hardware n FPGA. Ulterior voi analiza i Xilinx System Generator, un utilitar foarte bun n implementarea aplicaiilor pentru procesarea digital a semnalelor ntr-un FPGA i se va propune o solu ie ct mai eficient pentru implementarea hardware.

Obiective
Proiectul scoate n eviden att tehnica de modificare a timbrului vocal ct i implementarea hardware a acesteia. Obiectivele care se doresc atinse sunt urmtoarele: Ctigarea unei vaste experiene n domeniul dezvoltrii FPGA-urilor Mai multe tehnici de modificare a timbrului vocal trebuiesc explorate i simulate Un algoritm adecvat de modificare a timbrului vocal ar trebui implementat hardware i testat pentru performan Dobndirea experienei n programare i simulare cu noul soft oferit de Xilinx, anume System Generator pentru dezvoltarea acestui proiect

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

Capitolul II Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie
2.1 Prezentarea plcii
Placa de dezvoltare este o platform cu un pre redus realizat pentru proiectele de baz. Aceasta poate fi folosit att de ctre nceptori ct i de ctre utilizatorii avansai. Placa este construit n jurul unui FPGA Spartan-3E i a unui controler Atmel AT90USB2 i este ideal pentru proiecte de orice nivel de complexitate, pornind de la un circuit format din cteva pori logice pn la un procesor embedded. Placa este dotat i cu diferite porturi (VGA, PS/2 i conectori PMOD). Conectorii PMOD sunt n numr de 4 i ofer posibilitatea de a realiza proiecte i mai complexe prin conectarea la ei a diferite module (convertoare A/D i D/A, senzori, LCD, serial, ethernet i altele). Semnalele pe aceti conectori cu 6 pini sunt protejate mpotriva scurt circuitului si a electricitii statice asigurnd o durat lung de via a componentelor[3].

Fig.2.1 Placa Basys2

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

Basys2 FPGA Board este compatibil cu toate versiunile softului Xilinx ISE, inclusiv WebPack-ul care este oferit gratuit. Programarea si alimentarea plcii se face cu ajutorul portului USB deci nu este nevoie de o alimentare separat sau de cabluri suplimentare pentru programare.

2.2 Schema bloc i caracteristicile de baz ale plcii


Xilinx Spartan-3E FPGA cu 250.000 de pori logice i frecvene de lucru interne de 500Mhz+ Multiplicatoare pe 18 bii i memorie RAM dual-port de 72Kbits Port USB2 de mare vitez folosit pentru programare prin intermediul softului Adept Memorie Flash On-Board de 2Mbit XCF02 Frecvena oscilatorului setabil (25,50 i 100Mhz), plus nc un soclu pentru un al doilea oscilator Trei regulatoare de tensiune on-board (1.2V, 2.5V i 3.3V) 8 led-uri, 4 afioare cu 7 segmente, 4 butoane, 8 switch-uri, port PS/2 i port VGA 4 conectori cu 6 pini pentru ataarea diverselor circuite PMOD

Fig. 2.2 Placa Basys2 cu FPGA-ul Spartan3E Schem bloc de baz

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

2.3 Sursele de alimentare ale plcii


Placa Basys2 este alimentat de obicei printr-un cablu USB, dar de asemenea este oferit i un conector pentru baterii pentru a se putea folosi i orice alt surs extern de energie. Pentru a folosi alimentarea prin USB nu este nevoie dect s conectm cablul la plac i la un calculator, iar pentru a folosi o surs extern de energie trebuie s inem cont ca aceasta s ofere o tensiune ntre 3.5V - 5.5V pentru c un voltaj mai mare de 5.5V poate provoca daune iremediabile plcii. Semnalul de intrare are urmtorul tr aseu : ajunge la comutatorul ON/OFF (SW8), apoi la regulatorul de tensiune LTC3545 i la conectorii PMOD. LTC3545 produce sursa principal de tensiune de 3.3V, dar de asemenea alimenteaz i regulatoare secundare pentru tensiuni de 2.5V i 1.2V care sunt necesare pentru FPGA. Curentul total consumat de plac este dependent de configuraia FPGA-ului, frecvena ceasului i de conexiunile externe. n teste un circuit cu aproximativ 20K pori logice routate, un ceas de 50Mhz i toate ledurile luminate are nevoie de 100mA de la sursa de 1.2V, 50mA de la sursa de 2.5V i 50mA de la sursa de 3.3V. PCB-ul (printed circuit board) lui Basys2 este realizat pe 4 straturi, cele interioare fiind dedicate pentru alimentare i mas. FPGA-ul i celelalte circuite integrate de pe plac au lang ele condesatori din ceramic, plasate ct mai aproape de pinul de alimentare pentru un zgomot ct mai mic.

Fig. 2.3 Circuitele de alimentare ale plcii Basys2

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

2.4 Configurare, oscilatoare i circuite I/O


Dup alimentare placa Basys2 trebuie configurat pentru ca aceasta s poat funciona conform parametrilor specificai de ctre productor. n timpul configurrii se creaz un fiier cu extensia .bit care este ulterior salvat n memoria RAM a FPGA-ului pentru a defini i seta parametrii tuturor funciilor logice i interconexiunilor care se vor realiza n circuit. Exist posibilitatea de a scrie acest fiier i n memoria flash a plcii, dac acest fiier are o dimensiune de maxim 2 Mbit. Pentru a se programa placa, jumperul trebuie setat pe modul PC i trebuie s conectam cablul USB. Cu ajutorul softului Adept placa va fi recunoscut i se va putea programa fie FPGA-ul fie memoria flash. Led-ul de status va clipi (LD8) dac se efectueaz o programare cu succes.

Fig. 2.4 Circuitul de programare al Basys2

Placa Basys2 include un oscilator primar din siliciu care produce frecvene de 25, 50 sau 100 Mhz n funcie de poziia jumperului JP4. Se poate folosi i un oscilator secundar pe soclul IC6, oscilator care trebuie s fie n capsul DIP. Ca i circuite de ieire placa are 8 LED-uri i un display de 4 cifre, cu 7 segmente, format din LED-uri. Anodul LED-urilor este conectat printr-o rezisten astfel nct LED-urile s se
9

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

aprind doar cnd este programat un 1 logic la pinul corespunztor n FPGA. Un al noulea LED este folosit ca i indicator pentru alimentarea cu tensiune i pentru programare n felul urmtor : st aprins cnd placa este alimentat i clipete n timpul programrii.

Fig. 2.5 Circuitele pentru oscilatoare ale plcii Basys2

2.5 Conectori de extensie


Placa ofer i patru conectori cu 6 pini pentru module periferice. Fiecare conector are un pin de alimentare, unul de mas i 4 semnale unice de la FPGA. Aceti 4 pini au i diode pentru protecie mpotriva energiei electrostatice i rezistene n caz de scurt circuit. La aceti conectori se pot ataa diverse module cum ar fi : convertoare A/D i D/A, microfoane, amplificatoare pentru puni H etc.

10

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

Fig. 2.6 Circuitele pentru conectorii PMOD ale plcii Basys2

2.6 Definirea pinilor pentru Basys2


Exist mai multe tipuri de pini pe aceast plac. Avem pini care nu sunt disponibili pentru programator (GND, VDDO, etc.), pini pentru porturile de intrare/ieire, pini pentru date, pentru USB i pentru conectorii PMOD. Mai jo s avem un tabel cu aceti pini i schema detaliat a acestora.

11

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie Tabelul 2.1 Cheia tabelului de culori pentru definirea pinilor pentru placa Basys2

Culoare

Definiie pini FPGA Pini care nu sunt disponibili ptr utilizator Porturi I/O Porturi de date Semnalele pentru conectorii PMOD Semnalele pentru USB

Numr de pini ocupai 67 35 12 16 12

Fig. 2.7 Diagrama de definire a pinilor pentru Basys2

2.7 Modulul PmodDA2


Acest modul este un convertor Digital-Analog care convertete valorile digitale n voltaje analogice pe dou canale simultan cu o rezoluie de 12 bii. Modulul folosete un conector cu 6 pini i este ndeajuns de mic pentru a putea fi amplasat acolo unde semnalul reconstruit este necesar. Principalele caracteristici ale acestui modul : dou convertoare de la National Semiconductor DAC121S101 pe 12 bii un conector cu 6 pini tat i unul mam
12

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

dou canale de conversie simultane consum foarte mic dimensiuni foarte mici de numai 2cm x 2cm Acest modul este un convertor Digital-Analog care convertete valorile digitale n voltaje

analogice pe dou canale simultan cu o rezoluie de 12 bii. Modulul folosete un conector cu 6 pini i este ndeajuns de mic pentru a putea fi amplasat acolo unde semnalul reconstruit este necesar. PmodDA2 poate produce un semnal analogic care variaz ntre 0 i 3.3V dac este alimentat de la o surs de 3.3V. Este echipat cu dou convertoare DAC121S101 i funcioneaz cu ajutorul intefeei seriale SPI sau MICROWIRE pentru a produce semnalele de ieire. Cele dou convertoare sunt conectate n paralel pentru ca semnalele digitale s fie trimise ctre ambele simultan [4].

Fig. 2.8 Modulul PmodDA2 i schema bloc a acestuia

2.8 Modulul PmodMIC


Modulul este ideal n proiectele n care este nevoie de o intrare audio pentru plcile Digilent. Are un microfon preamplificat i un convertor analog -digital pe 12 bii. Convertorul suport o gam de frecvene ntre 10Khz i 20 Mhz [5]. Caracteristicile de baz ale acestui modul sunt: compandor de voltaj mic OnSemi SA575 convertor analog-numeric de la National Semiconductor ADC7476 pe 12 bii

13

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea plcii de dezvoltare Digilent Basys2 FPGA Board i a modulelor de conversie

dimensiuni reduse 2cm x 2.75cm conector cu 6 pini

Fig. 2.9 Modulul PmodMIC

2.9 Modulul PmodCON4


La acest modul se pot conecta echipamente audio deoarece are ca ieiri dou mufe RCA. Se poate folosi n proiectele n care este nevoie de o ieire audio. Principalele caracteristici ale acestuia sunt: conector cu 6 pini dou jack-uri audio RCA configuraie flexibil a pinilor i a ieirilor RCA cu ajut orul unor jumperi dimensiuni reduse 2cm x 2.75cm Pinii de la 1 la 4 se pot conecta la oricare dintre cele dou jack -uri. Pentru a face acest lucru trebuie s conectm jumperii pe dou din cele 4 linii de pini, un capt pe un pin J2 i unul pe J3. De exemplu pentru a conecta pinul 1 la iesirea J2 RCA, jumperul trebuie pus pe prima poziie pe pinul din mijloc i pe J2 [6].

Fig. 2.10 Modulul PmodCON4 i schema bloc a acestuia

14

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

Capitolul III Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP
3.1 Mediul Xilinx ISE Design Suite 12.1 - Crearea unui proiect nou
Xilinx ofer suita de programe ISE (Integrated Softaware Environment), ajuns n prezent la versiunea 12.1. Pe lng celelalte soft -uri folosite la realizarea i la sintetizarea circuitelor logice, ISE vine nsoit i de un simulator foarte fiabil denumit ISim. n continuare este prezentat acest mediu de programare. Software-ul poate fi descrcat de ctre oricine de pe site-ul firmei Xilinx. Cu toate c nu este o variant complet, softul este limitat la programe cu o lungime maxim de 50.000 de linii de cod, suficient pentru proiecte de complexitate mic i medie. Etapele de realizare a unui proiect nou n mediul ISE sunt urmtoarele : 1) Crearea proiectului - lansm n execuie programul Xilinx ISE Design Suite 12.1 i selectm din meniul File opiunea New Project. n fereastra aprut completm numele proiectului i direct orul n care acesta va fi creat dup care apsm pe butonul Next. La urmtorul pas vom selecta opiunile exact ca n figura 3.1, opiuni specifice plcii Basys2. Dup ce apsm iar pe Next apare fereastra Summary, care centralizeaz datele introduse pn acum. Dac totul este aa cum ne dorim, apsm butonul Finish i proiectul este creat. 2) Crearea fiierelor surs - urmtoarea etap const n crearea fiierelor surs pentru proiect. Cu ajutorul pachetului software ISE Design Suite, utilizatorul poate introduce n acelai proiect module realizate n diferite limbaje de programare hardware cum ar fi VHDL, Verilog,scheme logice i core-uri IP (Intelectual Property). Aceste core-uri sunt realizate automat n funcie de parametrii introdui n ferestrele de configurare i variaz de la crearea unui memorii RAM, ROM, FIFO pn la crearea unei arhitecturi complexe de microprocesor.

15

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

Fig. 3.1 Locaia noului proiect i setarea proprietilor plcii

Fig. 3.2 Fereastra de dialog "Select Source Type"

16

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

3) Sinteza - dup realizarea pailor 1 i 2, trebuie parcurs etapa de sintez (synthesis). n aceast etap limbajele VHDL, Verilog sau alte limbaje sunt compilate i verificate din punct de vedere al corectitudinii codului. De asemenea, n aceast etap, ISE poate genera pe baza codului scris n VHDL sau Verilog un simbol care va putea fi folosit n crearea unei scheme complexe [7, pag 37]. n figura 3.3 avem codul surs al unui program scris in limbajul VHDL.

Fig. 3.3 Ferestrele proiectului i editorul de text

4) Implementarea - urmtorul pas este cel de implementare a proiectului. La finalul acestui proces ntregul circuit proiectat se va regsi ntr -un fiier special cu extensia .bit. Fiierul care conine prototipul circuitului implementat va fi mutat n FPGA n vederea testrii funcionrii sale reale. n aceast etap se pot vizualiza i tipul precum i numrul de procente din resursele utilizate. n cazul n care folosim mai mult de 100% din resursele integratului software-ul ne va ateniona iar fiierul .bit nu va mai fi creat. Dac acest lucru se ntmpl atunci tot proiectul trebuie regndit , astfel nct acesta s fie realizabil din punct de vedere fizic [7, pag. 95].

17

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

Fig. 3.4 Raportul proiectului dup etapele de sintez i implementare

5) Asignarea pinilor - acest lucru poate fi fcut n mai multe moduri, pentru simplitate sa ales software-ul PlanAhead (figura 3.5), care este integrat n ISE Design Suite. Cu ajutorul lui putem atribui pinii I/O folosii n proiect. De asemenea putem vizualiza i legturile create ntre componentele logice din FPGA. De obicei acest lucru este realizat automat dar poate fi efectuat i manual pentru un control mai bun asupra ntrzierilor care pot aprea la propagarea semnalului prin porile logice [7, pag. 105]. 6) Programarea FPGA-ului cu fiierul .bit - pentru acest ultim pas avem nevoie de un soft care se gsete gratuit pe site-ul firmei Digilent i anume de programul Digilent Adept (figura 3.6). Acesta este o aplicaie puternic care permite configurarea i transferul de date cu dispozitivele logice de la Xilinx. Cu ajutorul lui se poate programa att FPGA-ul ct i memoria flash de pe plac [8].

18

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

Fig. 3.5 Asignarea pinilor si vizualizarea acestora folosind PlanAhead

Fig. 3.6 Software-ul Digilent Adept

19

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

3.2 Mediul de programare i simulare System Generator for DSP 3.2.1 Setul de blocuri din System Generator
System Generator este un utilitar de la firma Xilinx care permite folosirea mediului Matlab Simulink pentru realizarea i simularea proiectelor cu FPGA. Proiectele sunt realizate n mediul Simulink folosind blocuri specifice de la Xilinx. Toi paii ulteriori sunt efectuai automat, acetia incluznd sinteza i rutarea pentru a genera fiierul cu care va fi programat FPGA-ul. Setul de blocuri conine peste 90 de elemente care pot fi folosite la crearea unui sistem DSP complex. Cteva dintre cele mai uzuale blocuri sunt : sumatoare, multiplicatoare, regitri etc. Pe lng acestea avem i blocuri mai complexe : FFT, filtre, memorii. System Generator folosete i blocurile standard din Simulink [9, pag.12]. Sunt folosite dou blocuri numite "Gateway In" i "Gateway Out" pentru a defini grania dintre FPGA i blocurile folosite pentru simulare. Blocul "Gateway In" face conversia din virgul mobil n virgul fix.

Fig. 3.7 Blocuri din librriile System Generator

Fiecare proiect trebuie s conin cel puin un bloc (token) System Generator. Acesta nu este conectat la nimic dar este necesar pentru a realiza implementarea n FPGA. n proprietile
20

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

acestuia putem selecta placa pe care se va realiza implementarea, performana acesteia i ceasul sistemului.

Fig. 3.8 Blocurile Gateway In i Gateway Out i opiunile de configurare pentru acestea

Fig. 3.9 Blocul System Generator i opiunile acestuia

21

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

3.2.2 Crearea vectorilor de intrare folosind Matlab


Simulink este realizat peste Matlab, permind folosirea limbajului Matlab pentru generarea semnalelor de intrare i pentru analiza semnalelor de ieire. Se pot folosi blocurile "From Workspace" i "To Workspace" din Simulink cu o singur condiie: valorile trebuie s fie o matrice de forma n rnduri x 2 coloane [9, pag. 47]. Prima coloan reprezint valorile de timp ale simulrii iar a doua valorile de intrare. Aceasta este o metod la ndemn pentru a realiza vectori de intrare pentru proiectele realizate cu System Generator.

Matrice n linii x 2 coloane timp - 1:101 valori - sin(2*pi*[0:.01:1])

Fig. 3.10 Vector de intrare pentru generarea unui semnal

3.2.3 Iniializarea memoriilor RAM i ROM


Memoriile RAM i ROM pot fi iniializate cu un vector de mrime 1xn , unde n trebuie s fie egal cu mrimea memoriei. Matlabul este folosit pentru a seta valorea iniial a acestui vector, deci orice declaraie Matlab poate fi folosit din care s rezulte acest vector. Comenzile care pot fi folosite sunt urmtoarele: imread, auread, wavread, aviread and load [9, pag. 75].
22

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea mediilor de programare Xilinx ISE 12.1 i System Generator for DSP

System Generator ofer posibilitatea folosirii att a memoriilor single -port ct i a celor dual-port. Sunt suportate mrimi de maxim 64Kb. La implementarea lor, System Generator apeleaz compilatorul Xilinx pentru a crea o structur eficient a memoriei n hardware. Ambele tipuri de memorii suport iniializarea cu una din comenzile enumerate mai sus. Semnalul conectat la portul "address" a memoriei trebuie s fie un numr ntreg, fr semn.

Fig. 3.11 Iniializarea unei memorii cu un fiier .wav

3.2.4 Generarea codului HDL i a bitstream-ului


Dup realizarea schemei, fiierele pentru implementarea hardware pot fi generate apsnd butonul "Generate" dup cum se observ n figura 3.9, la proprietile blocului System Generator. O opiune este selectarea "HDL Netlist" ca i compilator i "Verilog" sau "VHDL" ca i limbaj de programare. Apsnd butonul "Generate" se vor crea fiierele necesare unui proiec t n mediul ISE. Alternativ n cmpul "Compilation" se poate selecta "Bitstream" i se va crea automat direct fiierul care l vom programa n FPGA.

23

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

Capitolul IV Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal
4.1 Modificarea timbrului n domeniul frecven
Cea mai simpl metod de a deplasa coninutul n frecven al unui semnal audio este folosirea modulaiei SSB (single sideband). Acest proces const n eliminarea frecvenelor negative a unui semnal vocal i modularea frecvenelor pozitive prin nmulirea cu o sinusoid complex. Dup aceasta semnalul real este reconstruit. Eliminarea benzii laterale inferioare nu d voie coninutului de frecven s schimbe benzile n timpul modulaiei. Banda inferioara lateral poate fi eliminat prin folosirea transformatei Hilbert, un tip de filtru trece tot[2, pag. 4]. Pentru orice semnal g(t), transformata Hilbert a acestuia notat (t) este definit dup cum urmeaz:
g( ) d t 1

(1)

n figura 4.1 avem o diagram bloc a unui schimbtor de frecven ce folosete operaii care pot fi implementate folosind Xilinx System Generator. Un filtru este folosit naintea intrrii n transformata Hilbert pentru a mpiedica frecvenele de la captul spectrului s intre in aliasing n timpul modulrii. Semnalul filtrat se ramific apoi, o parte ctre transformata Hilbert i o parte ctre o linie de delay egal n lungime cu filtrul Hilbert pentru a se asigura recombinarea semnalului n faz.

Fig.4.1 Schema bloc a unui schimbtor de frecven SSB

24

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

4.2 Modificarea timbrului n domeniul timp


O varietate de algoritmi de modificare a timbrului vocal n domeniul timp au fost dezvoltai de-a lungul anilor, cei mai simpli dintre ei presupun doar modificarea ratei originale de eantionare sau rularea semnalului mai rapid ori mai lent. Cu toate c aceste metode schimb timbrul audibil, ele nu reprezint cu adevrat tehnici reale deoarece durata semnalului nu mai este aceeai. 4.2.1 Algoritmul lui Lent Algoritmul lui Lent , descris n [10] sugereaz un algoritm eficient din punct de vedere computaional pentru alterarea vocii i a lungimii unui semnal eantionat dar n acelai timp menine i caracteristicile de baz ale semnalului original. Este de fapt o variant simplificat a tehnicii PSOLA (Pitch Synchronous Overlap Add). Dect s se foloseasc o tehnic OLA complex, ferestrele deplasate sunt pur si simplu adunate pentru a obine semnalul de ieire, care are proprietaile formantului (frecvena fundamental a unui sunet), forma i durata n timp ct i timbrul dorit. Algoritmul poate fi mprit n trei seciuni: un detector de timbru, un compandor i un schimbtor de timbru. Detectorul determin dinamic frecvena fundamental a sunetului de intrare utiliznd o metod brut dar eficient. Semnalul de intrare trec printr-un filtru IIR trece band de ordinul 4 cu o frecven central de 440 Hz i cu o laime de band de 200 Hz. Ieirea acestui filtru se ateapt s fie o sinusoid care reprezint frecvena fundamental a crei perioad este determinat folosind un detector de trecere prin zero. Deoarece o perioad a acestei sinusoide trece prin zero doar de dou ori, lungimea perioadei i frecvena fundamental pot fi determinate din locaia acestor treceri prin zero [2, pag. 5]. Compandorul va fi folosit pentru a modifica durata semnalului. Odat ce perioada frecvenei fundamentale este identificat, o fereastr de aceai lungime este aplicat pentru a identifica forma undei pentru fiecare ciclu. Dac se dorete nlarea timbrului, perioade individuale ale intrrii pot fi repetate la ieire iar dac se dorete diminuarea timbrului, perioade din semnalul original pot fi eliminate. Avantajul acestei metode este c anvelopa spectral nu se modific, aadar vom o obine o ieire de calitate bun.

25

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

n figura 4.2 avem deplasarea n timp a blocurilor suprapuse: (a) semnal de intrare mprit n 3 blocuri, (b) blocurile sunt deplasate nainte n timp pentru a mri durata semnalului, (c) blocurile sunt deplasate napoi n timp pentru a micora durata semnalului.

Fig.4.2 Deplasarea n timp a unor blocuri suprapuse

4.2.2 Algoritmul SOLA nlimea unui sunet este estimarea creierului ca fiind aproximativ egal cu frecvena fundamental a acelui sunet. Notm aceast frecven cu f0, ea existnd doar pentru semnalele periodice. f0 este inversul perioadei T0 a unui semnal periodic x(t). Majoritatea sunetelor din natur (ex. vorbirea) nu sunt periodice (sunt aproape periodice), deci f0 nu exist pentru aceste sunete. Putem privi timbrul ca frecvena fundamental a unui sunet perceput n urma excitaiei glotei. Timbrul este un element important n identificarea brbailor, femeilor i a copiilor. Metoda SOLA (Synchronized Overlap Add) descris prima dat de ctre Roucos i Wilgus [11] a devenit recent foarte popular n sistemele bazate pe computer. SOLA se pare c este foarte uor de calculat i deci o alegere bun pentru aplicaiile n timp real. Acest algoritm const n deplasarea nceputului fiecrui nou segment de vorbire, denumit fereastr peste
26

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

sfritul segmentului precedent pentru a se gsi punctul de intercorelaie. Odat ce acest punct este gsit, cadrele sunt suprapuse i este fcut media lor. Aceast tehnic asigur o potrivire optim ntre cadrele succesive. Combinnd aceste secvene se pstreaz magnitudinea i faza semnalului. Metoda SOLA este simpl i efectiv i nu necesit extragerea trsturilor, calcule n domeniul frecvenei modificarea fazei i est e non-iterativ [12]. Tehnica SOLA poate fi considerat un tip de eantionare selectiv care elimin efectiv perioadele redundante.

4.3 Soluia personal a algoritmului


Pentru facilitatea expunerii s-a ales simularea unui algoritm n mediul Simulink mpreun cu blocurile de la System Generator [23]. Dup cum s-a spus n capitolul 3, blocurile "From Workspace" i "To Workspace" accept doar matrici de forma n rnduri x 2 coloane. Se tie c funcia "wavrecord" din Matlab creaz o matrice de forma nr. eantioane x 1. Aadar a trebuit s se conceap un program n Matlab care s acorde fiecrui eantion din aceast matrice o referin de timp, adic s numere pur i simplu eantioanele, iar mai apoi s concateneze eantionele i valorile n timp ntr-o singur matrice pentru a putea fi utilizat n simulare. Codul surs al programului este prezentat n Anex. Apoi am creat urmtoarea schem n Simulink (figura 4.3). n simulare avem urmtoarele elemente: blocul de intrare "Gateway In" care primete semnalul din spaiul de lucru i l transform n format de virgul fix pentru a putea fi utilizat de restul blocurilor de la Xilinx blocul "Counter" care incrementeaz adresele memoriei succesiv de la 1 la 24.000 blocul "Constant" are valoarea de 1 logic i este folosit pentru a permite scrierea n memorie "Single Port Ram" este o memorie RAM cu o capacitate de 24kb "Down Sample" este un bloc de micorare a numrului de eantioane cruia i-am dat valoarea 3. Acest numr este raportul dintre numrul eantioanelor de la intrare i numrul eantioanelor de la ieire. "Up Sample" este un bloc de mrire a numrului de eantioane care are tot valoarea 3. Acest numr este raportul dintre numrul eantioanelor de la ieire i numrul eantioanelor de la intrare.
27

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

Algoritmul folosit este foarte simplu: se elimin 2 din 3 eantio ane de la intrare iar apoi se reface semnalul cu ajutorul blocului "Up Sample", eantioanele pierdute sunt adugate ca i zerouri. Acest lucru poate fi observat foarte uor n figura 4.4, unde avem o imagine mrit a ctorva eantioane. n acest fel se menine durata iniial a semnalului i vom obine un timbru vocal uor metalic.

Fig.4.3 Layout-ul simulrii n Simulink cu blocuri din System Generator

Fig.4.4 Poriune din spectrul vocal mrit

28

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Prezentarea general a algoritmilor pentru modificarea timbrului vocal i soluia personal

n faza iniial a proiectului am crezut c pot implementa algoritmul direct cu System Generator for DSP fr s mai am nevoie i de Xilinx ISE, ns nu a fost aa. System Generator este un soft foarte bun pentru simulri i pentru proiecte abstracte care pot fi r ealizate doar n mediul Simulink, dar cnd a venit vorba de implementare rezultatele nu au fost cele ateptate. Unul din principalele motive pentru care nu a funcionat implementarea bnuiesc c este urmtorul: pentru a aduce o component extern VHDL n S imulink trebuia folosit blocul "Black Box" care avea o condiie primar ce trebuia ndeplinit. Aceasta era c fiecare bloc trebuie s dein pe lang portul clk i un port ce (clock enable). M-am conformat acestor reguli, ns dup adugarea oricrei componente externe la ieirile acesteia nu observam nimic, greeala a fost cu siguran din partea mea. Dup zeci de ore de simulri i ncercri nu am reuit dect s realizez n totalitate algoritmul de mai sus, dar dup cum se vede doar cu blocurile oferite de System Generator. Aa c am hotrt s folosesc Xilinx ISE pentru a implementa corect cele dou module PmodDA2 i PmodMIC. Acest lucru este explicat detaliat n capitolul urmtor.

29

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Capitolul V Implementarea algoritmului pentru modificarea timbrului vocal n FPGA


5.1 Schema proiectului n Xilinx ISE i simularea acesteia
Schema a plecat iniial de la cele dou componente VHDL deja existente, create de firma Digilent i anume PmodMIC i PmodDA2. Am realizat ulterior c pentru funcionarea corect a acestor module vom avea nevoie i de un controler care n funcie de semnalul de intrare "done" tie dac trebuie s nceap o nou conversie sau trebuie s mai atepte (s activeze sau nu "start"). Pentru c informaia audio trebuia s fie stocat undeva am avut nevoie i de o memorie RAM, pe care am generat-o cu LogiCore IP Generator. Parametri acesteia au fost alei din panoul de configurare al memoriei i anume: 12 bii lungimea cuvntului, 16.000 locaii de memorie (adrese pe 14 bii) i modul write first. Pentru simulare memoria a fost iniializat cu valori. Modulul numrtor are scopul de a incrementa adresele memoriei. Dac am fi lsat ca toate procesele s ruleze cu frecvena ceasului de pe plac, 50 Mhz nu am fi auzit nimic la ieire. n acest scop am creat modulul clock_8k pentru a micora ceasul la 8Khz. Acest lucru nu a fost suficient ntruct dup implementarea acestuia am observat c modulele de conversie elimin datele cu o vitez foarte mare, n funcie de ceasul acestora de ieire (25Mhz respectiv 12.5Mhz). Aadar, pentru a nu modifica logica intern a celor dou module, am creat altele de divizare a ceasului: "clock_mic" are la ieire un ceas de 32Khz iar "clock_da2" de 16Khz. Funcionarea schemei (figura 5.1): semnalul intr prin pinul "sdata" (acesta provine de la convertorul AD de pe modulul fizic PmodMIC) dup care ajunge la modulul VHDL PmodMICRefComp unde este convertit din semnal serial n semnal paralel pe 12 bii, apoi intr n memorie prin portul "dina" concomitent cu incrementarea adreselor i iese prin portul "douta". Datele ajung apoi la modulul VHDL DA2RefComp care le transform din date paralele n date seriale pentru a fi trimise ctre converto arele de pe modulul fizic PmodDA2 n scopul de a fi convertite n niveluri de tensiune.n paginile urmtoare sunt informaii detaliate despre modul de funcionare a fiecrui modul i scopul acestuia n proiect.
30

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Fig.5.1 Schema proiectului n Xilinx ISE

Fig.5.2Simularea schemei

31

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Simularea schemei (figura 5.2): se observ c datele sunt disponibile o durat de 125us ceea ce corespunde unei rate de eantionare de 8Khz. Funcionarea se produce aproape n timp real, deoarece la ieirea "d1" datele sunt disponibile cu o ntarziere de 125us. Datele sunt eliminate pe frontul cresctor al "sclk". Cnd semnalul done este 1 logic, semnalul start devine i el 1 logic pentru aceeai perioad ca i "done" pentru a ncepe o nou conversie. "clk" apare n acest fel deoarece imaginea este micorat pentru a se vedea semnalele relevante.

5.2 Componenta VHDL DA2RefComp


Pmod DA2 sincronizeaz comunicaiile de date ntre placa Basys2 i placa PmodDA2. Modulul primete un vector paralel de 12 bii i l trimite serial ctre placa PmodDA2 folosind o secven corect de sincronizare. De asemenea ofer i un ceas pentru buna funcionare a modulului fizic. Componenta VHDL se numete DA2RefComp i are 5 intrri i 5 ieiri. Intrrile sunt: ceasul de intrare de 50 Mhz (CLK) care este divizat i folosit pentru a sincroniza procesele care au loc n component, un semnal de reset asincron (RST) care reseteaz procesele care au loc n component. Intrrile de date pentru cele dou chip-uri DAC121S101 sunt 2 vectori de 12 bii (DATA1 i DATA2) care sunt trimii serial ctre pinii componentei PmodDA2. Semnalul de intrare START este folosit pentru a ntiina component cnd s nceap conversia. Ieirile sunt: semnalul de ceas divizat la 25 Mhz (CLK_OUT), dou ieiri seriale (D1 i D2) care vor trimite datele ctre modulul fizic, un semnal de sincronizare (nSYNC) i un semnal care spune utilizatorului c a fost realizat conversia (DONE) [13]. Schema componentei este n figura 5.1.

Fig.5.1 Componenta VHDL DA2RefComp

32

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Diagrama din figura 5.2 a fost folosit pentru determinarea secvenei corecte de sincronizare pentru maina de stri finite care administreaz PmodDA2. Este o secven care este folosit pentru a trimite 16 bii de date ctre chip-urile DAC121S101 aflate pe modulul fizic. Semnalul nSYNC trebuie s fie n zero logic ct timp data este transferat pe frontul cresctor al semnalului de ceas. Imediat dup transfer, semnalul nSYNC trebuie s ajung n unu logic pentru a lega datele n interiorul chip-ului DAC121S101.

Fig.5.2 Diagrama de sincronizare pentru chip-ul DAC121S101

Logica care a creat secvena de sincronizare care s primeasc intrrile de date DATA1 i DATA2 iar mai apoi s le scoat serial pe ieirile D1 i D2 ct i s comande ieirile nSYNC i DONE, a fost realizat prin crearea mainii de stri finite din figura 5.3.

Fig.5.3 Maina de stri finite a componentei Pmod DA2

33

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Avem trei stri: Idle, ShiftOut i SyncData. n timpul strii Idle, vectorul de 12 bii este actualizat mpreun cu cei 4 bii de control. Semnalul de ieire DONE trebuie sa fie unu logic pentru a permite conversia. Cnd semnalul START se activeaz n timpul strii Idle, maina de stri finite intr n starea ShiftOut. n aceast stare, biii de date sunt shiftai afar folosind un contor care numr 16 perioade de ceas. Acest numrtor ne asigur c toate datele vor fi shiftate afar nainte de a se trece la starea SyncData. Cnd numrtorul ajunge la valoarea 15, se trece n starea SyncData. n aceast stare semnalul nSYNC este fcut unu logic pentru legarea datelor n interiorul chip-ului DAC121S101. Apoi dac semnalul START este zero logic, maina ntr iar n starea Idle, unde este gata s accepte o nou conversie. Oricare ar fi starea curent, intrarea RST reseteaz maina de stri i o trece n starea Idle.

5.3 Componenta VHDL PmodMICRefComp


Pmod MIC sincronizeaz comunicaiile de date ntre placa Basys2 i placa PmodMIC. Componenta primete un vector de 16 bii serial folosind sincronizarea corect i trimite un vector de 12 bii paralel cu valoarea convertit n semnal digital. Pmod MIC primete un semnal digital serial de la convertorul analog-numeric ADCS7476 i trimite datele ctre orice alt component VHDL. De asemenea ofer i o secven corect de sincronizare pentru procesele care au loc n interiorul componentei [14]. Componenta VHDL este denumit PmodMicRefComp i are 4 intrri i 4 ieiri. Intrrile sunt: un ceas de 50Mhz, un buton asincro n de reset i datele de la ADCS7476 care sunt shiftate serial la fiecare ciclu de ceas (SDATA). Ieirile sunt: semnalul SCLK care este ceasul de 12.5Mhz pentru modulul fizic, un semnal pentru selectarea chip-ului (nCS) care activeaz ADCS7476 de pe componenta fizic i semnalul de 12 bii paralel (DATA) care poate fi folosit de ctre orice component VHDL. Semnalul START este folosit pentru a anuna componenta cnd poate ncepe o conversie. Dup realizarea unei conversii componenta activeaz semnalul DONE. Schema componentei o avem n figura 5.4

34

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Fig.5.4 Componenta VHDL PmodMICRefComp

Diagrama de stri pentru determinarea secvenei corecte de sincronizare a componentei Pmod MIC o avem n figura 5.5. Aceasta este folosit pentru generarea celor 16 bii de date folosind chip-ul ADCS7476 de pe placa fizic. Semnalul nCS trebuie s fie n zero logic ct timp data este generat pe frontul descresctor al ceasului. Imediat dup transferul de date semnalul nCS trebuie s devin unu logic pentru ca un nou set de date s poat fi generat.

Fig.5.5 Diagrama de sincronizare pentru chip-ul ADCS7476

Logica din spatele secvenei de sincronizare trebuie s ia serial intrarea SDATA i apoi s o introduc ntr-un vector de 16 bii, de asemenea trebuie s sincronizeze ieirile nCS i SCLK. Logica a fost creat folosind aceeai main de stri finite din figura 5.6.

35

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Fig.5.6 Maina de stri finite a componentei Pmod MIC

Avem trei stri: Idle, ShiftIn i SyncData. n timpul strii Idle, ieirea DONE trebuie s fie n unu logic pentru a permite o conversie. Cnd semnalul START se va face unu logic, maina de stri intr n starea ShiftIn. n aceast stare, semnalul DONE devine unu logic iar datele din componenta Pmod MIC sunt shiftate serial pe durata a 16 cicluri de ceas. Dupa terminarea shiftrii datelor, maina de stri intr n starea SyncData. Aici, datele care ne intereseaz sunt introduse n vectorul de ieire de 12 bii (DATA). Dac semnalul STAR T este n zero logic, maina de stri ajunge iari n starea Idle, unde este gata s accepte o nou conversie. n orice stare s-ar afla, semnalul RST reseteaz maina de stri finite i o pune n starea Idle.

5.4 Componenta memorie LogiCORE IP


Aceast component a fost creat cu ajutorul generatorului CORE Generator integrat n Xilinx ISE. Cu ajutorul interfeei grafice a acestuia s-au selectat urmtoarele proprieti ale memoriei: Tipul memoriei - Single port RAM Limea de scriere - 12 bii
36

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Capacitatea memoriei - 16.000 cuvinte (a cte 12 bii fiecare) Modul de operare - Write First, always enabled. n acest mod data este scris n memorie i simultan trimis ctre portul de ieire . Acest mod de funcionare transparent ofer posibilitatea de a folosi ieirea de date n timp ce se efectueaz o operaie de scriere pe portul de intrare (figura 5.7).

Fig.5.7 Exemplu pentru modul Write First

Port de Write Enable (WE) - ct timp este pe unu logic memoria poate fi scris Frecvena de funcionare dat de ceasul primar - 50Mhz Am ales o capacitate aa de mic deoarece placa este destul de limitat n aceast

privin, aceasta avnd o memorie RAM integrat mic. Simbolul generat n schematic este ilustrat n figura 5.8.

Fig.5.8 Simbolul pentru memoria RAM

37

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

5.5 Componenta clock_8k


Componenta (figura 5.9) a fost creat n cod VHDL i funcia ei de baz este de a micora viteza la care se produc procesele n memorie, respectiv viteza la care vor fi incrementate adresele din memorie. Aceasta are dou intrri ( Reset i clockIn) i o ieire (clockOut). Intrarea clockIn este legat la ceasul principal al plcii Basys2, iar componenta mparte acest ceas pentru a crea la ieire un semnal cu frecvena de 8Khz i factor de umplere 50%. Pentru ca aceast component s fie activ semnalul de Reset trebuie s fie pe unu logic.

Fig.5.9 Componenta VHDL clock_8k

5.6 Componenta numarator


Aceast component este scris n cod Verilog i modul de funcionare al acesteia este foarte simplu. Dup cum se observ n figura 5.10 componenta are 2 intrri, un clk i un semnal de clear (clr) i o ieire pe 14 bii (numar). La fiecare front descresc tor al ceasului se incrementeaz numrul cu o unitate, valoarea maxim pe care o poate atinge fiind de 2 14=16.384, dup care se reseteaz. Rolul acestei componente este de a incrementa adresele din memorie n scopul citirii informaiei ce se afl la acele adrese.

Fig.5.10 Componenta Verilog numarator

38

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

5.7 Componenta controler


Controlerul a fost realizat pentru a automatiza procesele din interiorul modulelor PmodDA2RefComp i PmodMicRefComp. Principiul de funcionare a fost inspirat din diagrama de stri finite a modulelor respective. Acest controler (figura 5.11) are dou intrri (clock i done) i o ieire start. La fiecare front cresctor al ceasului se testeaz dac semnalul done este n unu logic, dac da i semnalul start va deveni unu logic pentru o perioad, n caz contrar semnalul start va fi zero logic. n concluzie acesta trebuie s dea un impuls de start la terminarea procesrii unui set de date pentru ca modulele PmodDA2RefComp i PmodMicRefComp s nceap o nou conversie. n schema general s-a folosit cte un modul controler pentru fiecare dintre componentele de conversie analog-numeric i numeric-analogic.

Fig.5.11 Componenta Verilog controler

5.8 Componenta clock_mic


Clock_mic (figura 5.11) este derivat din componenta anterioar clock_8k. Are la baz tot dou intrri (Reset i clockIn) i o ieire (clockOut). A fost creat pentru a sincroniza PmodMICRefComp deoarece dac am fi legat -o direct la ceasul de 50Mhz datele erau scoase prea rapid. Numrul de cicli necesari a fost determinat din comport amentul simulrilor. S-a observat c este nevoie de 16 cicli de ceas pentru a se termina o conversie de date cu tot cu semnalele de control aferente (nCS i DONE). Modulul "clock_mic" a fost folosit pentru a nu mai interveni i asupra logicii din interiorul PmodMICRefComp, mai explicit asupra divizorului de frecven. Astfel introducnd cu ajutorul acestui modul n PmodMICRefComp o frecven de 32Khz, ieirea sclk a acestuia va avea o frecven de 8Khz, exact ct este nevoie.

39

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Fig.5.12 Componenta Verilog clock_mic

5.9 Componenta clk_da2


Aceasta (figura 5.13) este aceeai component ca i clock_mic cu singura deosebire c frecvena de ieire nu mai este 32Khz ci este 16Khz deoarece componenta VHDL PmodDA2 are un divizor intern de frecven cu patru i nu cu doi cum are PmodMICRefComp.

Fig.5.13 Componenta Verilog clk_da2

n afar de componentele de referin PmodDA2 i PmodMIC toate celelalte module VHDL i Verilog au fost create cu ajutorul a [18-22].

5.10 Schema fizic a proiectului


Dup realizarea fiierului ".bit" acesta a fost scris n FPGA. Pentru o nelegere ct mai bun am realizat o schem cu modulele fizice (fig. 5.14) pentru a demonstra cum arat partea hardware dup implementare i cum sunt conectate modulele la placa de dezvoltare. La microfon se poate vorbi iar n timp real vocea se aude in difuzoare.

40

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Implementarea algoritmului pentru modificarea timbrului vocal n FPGA

Fig.5.14 Schema cu modulele fizice

41

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Calculul economic i fiabilitatea software

Capitolul VI Calculul economic i fiabilitatea software


6.1 Generaliti asupra costului de producie
Costul de producie este o categorie economic legat de existena producie i de mrfuri, de procesul de formare a valorii de preuri. n activitatea de realizare a bunurilor materiale, costul de producie este forma bneasc a unui coninut ce reprezint consumul de mijloace materiale i fora de munc, necesare pentru producerea i desfacerea produsului respectiv. ntre costul de producie i preul de vnzare exist deosebiri cantitative i calitative. Preul este mai mare dect costul de producie deoarece el include i profitul. Deosebirea calitativ este c preul asigur mijloacele necesare produciei lrgite, n timp ce costul de producie asigur doar recuperarea cheltuielilor de producie [15]. n ara noastr potrivit legislaiei n vigoare, costul de producie este mprit n urmtoarele grupe de cheltuieli: cheltuieli materiale, adic materii prime, energie, combustibili i materiale; cheltuieli directe de munc vie (salariile pltite muncitorilor, impozit pe fo ndul de retribuii directe , contribuii pentru asigurri sociale CAS); contribuii la fondul de cercetare tiinific; impozite pe cldiri i terenuri; fond pentru ajutor de omaj i alte cheltuieli. Elementele componente ale costului de producie se modific de la o perioad de timp la alta sub influena factorilor externi. Reducerea costului de producie nseamn micorarea cheltuielilor pe unitatea de produs i este o necesitate obiectiv impus de creterea rentabilitii, sporirea profitului i a productivitii muncii . n calculele economice de rentabilitate a fabricaiei unui produs se analizeaz i alte costuri cum ar fi: costul fix - se refer la cheltuieli independente de volumul produciei (cota de amortizare, a mijloacelor fixe, taxele sau chiriile pe cldiri i terenuri etc). costul variabil - se modific odat cu schimbarea volumului de producie.

42

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Calculul economic i fiabilitatea software

costul marginal - exprim sporul de cheltuieli necesare pentru obinerea unei uniti suplimentare de produs . costul cercetrii tiinifice - este dat de cheltuielile pentru cercetarea propriu-zis i pentru aplicarea n practic a rezultatelor activitii de cercetare-proiectare n vederea realizrii prototipului.

costul tehnologic - se caracterizeaz prin separarea cheltuielilor directe i a unei pri nsemnate din cheltuielile indirecte, n special cu ntreinerea i exploatarea utilajelor.

6.2 Costul de implementare al proiectului


Deoarece proiectul implic realizare soft, a trebuit a trebuit calculat costul economic al programelor realizate n Xilinx ISE dar i n Matlab. ns nu trebuie s uitm i costul plcii cu FPGA Basys2 i a modulelor de conversie. Pentru realizarea acestor programe este nevoie de: Un computer cu sistem de operare Windows 7 Licen pentru Matlab 7.8.0 (R2009a) Licen pentru Xilinx ISE 12.1 (este oferit gratuit n limita a 50.000 de linii de cod) Costul global al proiectului este dat de relaia: C pr. = Cdir + Cind , unde Cdir reprezint manopera de proiectare. Cind reprezint cheltuielile suplimentare, ce includ activiti de cercetare, munc de documentare, tehnoredactarea proiectului i alte cheltuieli indirecte. 6.2.1 Calculul cheltuielilor directe(Cdir) a) Manopera pentru activitatea de proiectare Programarea ca form de munc este pltit cu circa 20 /zi la o norm de 20 de linii de program, aceast sum fiind variabil n funcie de ar, nivel de trai, etc . n cazul nostru avem circa 700 de linii de program realizate n Verilog, VHDL i Matlab: linii de program pe zi = 20 total linii = 700 total zile = total linii / linii de program pe zi
43

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Calculul economic i fiabilitatea software

total zile = 700/20 = 35 zile Astfel dac un programator lucreaz zilnic norma ntreag retribuia sa este de : Retribuie = nr. zile * 25 = 35 * 20 = 700 700 * 4.3RON = 3010 RON Aceast sum poate varia de la firm la firm n funcie de preul pe linia de program sau

de norma pe care o are un programator. b) Energia electric consumat Energia electric consumat este de fapt energia necesar pentru funcionarea calculatorului i a perifericelor n timpul proiectrii i implementrii proiectului. Consumul a fost estimat n jurul a 500 W. La un pre al energiei electrice ~ 0.45 Ron/KWh pe ntru consumator casnic rezult total cheltuieli cu energia: W = 0.5 KW * 280 h * 0.5 RON / KWh = 70 RON Deci valoarea cheltuielilor directe Cdir = R + E Cdir = 3080 RON 6.2.2 Calculul cheltuielilor indirecte Cheltuielile indirecte se refer la orele de documentare, eventual cercetare, accesului la Internet, tehnoredactare, costuri aferente testrii programului soft proiectat pe placa de dezvoltare, cheltuieli indirecte pentru conducere i administrative ale institutului etc. n continuare se iau m calcul urmtoarele componente mai importante de cheltuieli indirecte:

Cdoc = 100 ore * 3 RON / ora = 300 RON (costul necesar procurrii i aprofundrii documentaiei) Ctehnoredactare = 80 foi * 0.10 RON + 10 RON = 18 RON (s-a apreciat c necesarul este de 80 foi format A4 i un cartu cu cerneal pentru imprimant.) Cnet = 25 RON/lun (costul efectiv al accesului la Internet) Cplac = 310 RON (costul plcii de dezvoltare Basys2) Cmodule = CDA2+ CMIC+ CCON4= 107 RON + 68 RON + 42 RON = 217 RON (costul modulelor adiionale: convertorul DA, modulul cu microfon i modulul cu mufe RCA) Valoarea cheltuielilor indirecte Cind = Cdoc+ Ctehnoredactare+ Cnet+ Cplac+ Cmodule

Cind = 870 RON. Deci costul total al proiectului Cpr. = Cdir + Cin C pr. = 3080 RON + 870 RON C pr. = 3950 RON Concluzionnd valoarea proiectului realizat este de aproximativ 3950 RON.

44

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Calculul economic i fiabilitatea software

6.3 Fiabilitatea software


Fiabilitatea software reprezint capacitatea sistemului de a rspunde cerinelor utilizatorului (de a-i executa misiunea), n conformitate cu specificaiile sale de proiectare. Din punct de vedere calitativ, fiabilitatea reprezint capacitatea unui sistem de a funciona fr defeciuni n decursul unui anumit interval de timp i n anumite condiii date. Din punct de vedere cantitativ, fiabilitatea reprezint probabilitatea ca acelai sistem interval de timp i n condiiile de exploatare date. 6.3.1 Principii de baz Pentru o fiabilitate software ct mai bun trebuiesc respectate n timpul proiectrii cteva dintre principiile de baz: Proiectul produsului software trebuie s fie corect din punct de vedere logic i compatibil cu specificaiile temei de proiectare; Din punct de vedere al fiabilitii i mentenabilitii, el trebuie s aib o structur modular, fiecare modul s aib o dimensiune mic i s comunice cu celelalte ntr -un singur punct; Utilizarea principiilor programrii structurate, care asigur o mai mare claritate i logic intern, posibilitatea tipizrii proiectrii i facilitatea reproiectrii i mentenanei produselor software; Utilizarea tehnicilor orientate pe obiect. [16] 6.3.2 Clasele de fiabilitate a) Foarte sczut - acest nivel se prescrie atunci cnd defectarea are ca singur consecin inconvenientul productorului de a nltura o neregul n program. Asemenea situaii intervin, de exemplu, n cazul modelelor demonstrative sau al simulrilor. Din aceast clas face parte i proiectul nostru. b) Sczut - acest nivel corespunde n cazurile n care defectarea implic pierdere mic, uor de recuperat, pentru beneficiar. Sistemele utilizate n predicie pe termen lung, sunt exemple tipice.
45

s -i ndeplineasc

funciile pentru care a fost proiectat, cu performanele prescrise, fr defeciuni, ntr -un anumit

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Calculul economic i fiabilitatea software

c) Nominal - acest nivel corespunde cazului cnd defectarea implic o pierdere moderat pentru beneficiar, dar remedierea situaiei nu este costisitoare. Sistemul de gestiune a stocurilor sau sistemele informaionale de conducere sunt exemple tipice pentru aceast clas de fiabilitate [15]. d) Ridicat - efectele defectrii pot implica o pierdere financiar mare sau un inconvenient major pentru factorul uman. Exemple tipice sunt sistemele bancare i cele ale distribuiei energiei electrice. e) Foarte ridicat - efectele defectrii pot consta n pierderea de viei omeneti. Cazul tipic l constituie sistemul de control al avioanelor. Ca urmare proiectul nostru se ncadreaz n clasa de fiabilitate "foarte sczut" deoarece are un scop pur demonstrativ i educaional; a fost creat ca i material didactic la diferite laboratoare.

46

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Concluzii

Capitolul VII Concluzii


7.1 Sumar al realizrilor i a fiierelor rezultate
Avantajele folosirii unui FPGA pentru procesarea digital a semnalelor sunt clare : vitez mare datorit paralelismului, cost redus i o implementare efectiv din punct de vedere al timpului folosind un software dedicat. Din cauza dificultilor software i hardware neprevzute care au avut ca i consecin nevoia de mai mult timp, obiectivul final al unei uniti de sine stttoare care s modifice timbrul n timp real nu a fost realizat. n schimb a fost realizat unitatea care poate eantiona vocea i apoi o convertete din semnal digital n semnal analogic pentru a putea fi auzit n difuzoare. Pur i simplu vocea este preluat n timp real de modulul PmodMIC apoi ajunge n FPGA unde trece printr-o memorie (dac setm WE pe 0 logic o secven de dou secunde va fi repetat ncontinuu) apoi iese prin modulul de conversie PmodDA2 ; la PmodDA2 este legat modulul PmodCON4 iar la acesta difuzoarele n care auzim sunetul. Cu toate c modificarea timbrului nu este realizat de unitatea hardware, a fost implementat cu succes n mediul System Generator for DSP. ntr-adevr algoritmul folosit a fost unul mai brut dar i-a dovedit capacitatea de a "metaliza" vocea i deci de a ascunde identitatea vorbitorului. Implementarea acestuia pe hardware nu este departe de a fi implementat i este posibil realizarea n timp real. Pentru a sumariza n urma realizrii proiectului s-au obinut urmtoarele: modelul System Generator pentru modificarea timbrului (fiier .mdl) fiierele VHDL i Verilog folosite n proiect (codurile sunt sunt prezentate n Anex) fierele schematic folosite n proiect fiierele audio rezultate n urma rulrii modelului System Generator proiectul n Xilinx ISE Pn la data finalizrii proiectului s-a ncercat implementarea unor filtre cu utilitarul FDATOOL inclus n Matlab. S-a creat un filtru de decimare i apoi unul de interpolare cu nlocuirea eantioanelor lipsa cu zerouri. Aceste filtre au fost exportate ca modele Simulink
47

Algoritm pentru modificarea timbrului vocal implementabil ntr-un FPGA Concluzii

(Matlab permind acest lucru) i au fost implementate ntr -un model pentru a se efectua simulri asupra lor. Bineneles n simulare totul a decurs cum ar trebui. Ulterior am exportat cele dou filtre ca i cod VHDL pentru a le putea implementa i simula n Xilinx ISE. Dar n acest mediu filtrele se comport ciudat n sensul c ieirea filtrului scoate total altceva dect ce ne ateptam. Cu siguran aceast abordare este realizabil.

7.2 Idei viitoare de extindere a proiectului


Proiectul poate fi extins n mai multe feluri, unul din acestea ar fi implementarea mai multor algoritmi de schimbare a timbrului vocal, fiecare dintre ei s modifice vocea n alt fel. Algoritmul folosit poate fi comutat cu ajutorul switch-urilor de pe plac. O alt idee ar fi folosirea portului VGA pentru a scoate pe un monitor spectrograma vocii respective, spectrogram care poate fi calculat cu ajutorul transformatei STFT [17] (short-time Fourier transform). Dac se poate miniaturiza proiectul acesta poate fi cu uurin implementat n microfoanele digitale, vocea putnd fi prelucrat direct cu ajutorul hardware -ului fr a mai fi nevoie de efecte software i de procesri ulterioare, totul realizndu -se n timp real. Un exemplu foarte bun unde poate fi folosit acest dispozitiv este atunci cnd o persoan dorete s dezvluie anumite informaii dar n acelai timp trebuie ascuns identitatea persoanei respective. Dac timbrul este modificat persoana nu va fi recunoscut. Experiena cumulat n timpul realizrii acestui proiect este binevenit. Nu am mai lucrat niciodat cu mediul ISE pn acum dar mi s-a prut foarte interesant i relativ uor de folosit iar posibilitile de proiecte cu FPGA-uri sunt practic infinite singura limit este doar imaginaia proiectantului.

48

ANEX
1. Codul VHDL pentru PmodDA2
--------------------------------------------------------------------------------- DA2 Reference Component --------------------------------------------------------------------------------- Author : Ioana Dabacan -- CopyRight 2008 Digilent Ro. --------------------------------------------------------------------------------- Desription : This file is the VHDL code for a PMOD-DA2 controller. --------------------------------------------------------------------------------- Revision History: -- Feb/29/2008 (Created) Ioana Dabacan -------------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --------------------------------------------------------------------------------- Title : DA1 controller entity --- Inputs : 5 -- Outputs : 5 --- Description: This is the DA2 Reference Component entity. The input ports are -a 50MHz clock and and an asynchronous reset button along with the -data to be serially shifted in the 2 DAC121S101 chips on a DA2 -Pmod on each clock cycle.There is also a signal to start a -conversion. -The outputs of this entity are: a output clock signal, two serial -output signals D1 and D2, a sync signal to synchronize the data -in the DAC121S101 chip, a done signal to tell that the chip is -done converting the data and another set of data can be sent. --------------------------------------------------------------------------------entity DA2RefComp is Port ( --General usage CLK : in std_logic; RST : in std_logic;

-- System Clock (50MHz)

--Pmod interface signals D1 : out std_logic; D2 : out std_logic; CLK_OUT : out std_logic; nSYNC : out std_logic; --User interface signals DATA1 : in std_logic_vector(11 downto 0); DATA2 : in std_logic_vector(11 downto 0); START : in std_logic; DONE : out std_logic ); end DA2RefComp ; architecture DA2 of DA2RefComp is

--

control constant: Normal Operation constant control : std_logic_vector(3 downto 0) := "0000"; ------------------------------------------------------------------------------------- Title : signal assignments --- Description: The following signals are enumerated signals for the -finite state machine,2 temporary vectors to be shifted out to the

49

-DAC121S101 chips, a divided clock signal to drive the DAC121S101 chips, -a counter to divide the internal 50 MHz clock signal, -a 4-bit counter to be used to shift out the 16-bit register, -and 2 enable signals for the paralel load and shift of the -shift register. ------------------------------------------------------------------------------------type states is (Idle, ShiftOut, SyncData); signal current_state : states; signal next_state : states; signal temp1 : std_logic_vector(15 downto 0); signal temp2 : std_logic_vector(15 downto 0); signal clk_div : std_logic; signal clk_counter : std_logic_vector(27 downto 0); signal shiftCounter : std_logic_vector(3 downto 0); signal enShiftCounter: std_logic; signal enParalelLoad : std_logic; begin -------------------------------------------------------------------------------------- Title : Clock Divider --- Description: The following process takes a 50 MHz clock and divides it down to a -25 MHz clock signal by assigning the signals clk_out and clk_div -to the 2nd bit of the clk_counter vector. clk_div is used by -the Finite State Machine and clk_out is used by the DAC121S101 chips. ------------------------------------------------------------------------------------clock_divide : process(rst,clk) begin if rst = '1' then clk_counter <= "0000000000000000000000000000"; elsif (clk = '1' and clk'event) then clk_counter <= clk_counter + '1'; end if; end process; clk_div <= clk_counter(0); clk_out <= clk_counter(0); ------------------------------------------------------------------------------------- Title : counter --- Description: This is the process were the teporary registers will be loaded and -shifted.When the enParalelLoad signal is generated inside the state -the temp1 and temp2 registers will be loaded with the 8 bits of control -concatenated with the 8 bits of data. When the enShiftCounter is -activated, the 16-bits of data inside the temporary registers will be -shifted. A 4-bit counter is used to keep shifting the data -inside temp1 and temp 2 for 16 clock cycles. -----------------------------------------------------------------------------------counter : process(clk_div, enParalelLoad, enShiftCounter) begin if (clk_div = '1' and clk_div'event) then if enParalelLoad = '1' then shiftCounter <= "0000"; temp1 <= control & DATA1; temp2 <= control & DATA2; elsif (enShiftCounter = '1') then temp1 <= temp1(14 downto 0)&temp1(15); temp2 <= temp2(14 downto 0)&temp2(15); shiftCounter <= shiftCounter + '1'; end if; end if; end proces

50

D1 <= temp1(15); D2 <= temp2(15); ----------------------------------------------------------------------------------- Title : Finite State Machine --- Description: This 3 processes represent the FSM that contains three states. -First one is the Idle state in which the temporary registers are -assigned the updated value of the input "DATA1" and "DATA2". -The next state is the ShiftOut state which is the state where the -16-bits of temporary registers are shifted out left from the MSB -to the two serial outputs, D1 and D2. Immediately following the -second state is the third state SyncData. This state drives the -output signal sync high for2 clock signals telling the DAC121S101 -to latch the 16-bit data it just recieved in the previous state. -- Notes: The data will change on the upper edge of the clock signal. Their -is also an asynchronous reset that will reset all signals to their -original state. -------------------------------------------------------------------------------------- Title : SYNC_PROC --- Description: This is the process were the states are changed synchronously. At -reset the current state becomes Idle state. -----------------------------------------------------------------------------------SYNC_PROC: process (clk_div, rst) begin if (clk_div'event and clk_div = '1') then if (rst = '1') then current_state <= Idle; else current_state <= next_state; end if; end if; end process; ------------------------------------------------------------------------------------- Title : OUTPUT_DECODE --- Description: This is the process were the output signals are generated -unsynchronously based on the state only (Moore State Machine). -----------------------------------------------------------------------------------OUTPUT_DECODE: process (current_state) begin if current_state = Idle then enShiftCounter <='0'; DONE <='1'; nSYNC <='1'; enParalelLoad <= '1'; elsif current_state = ShiftOut then enShiftCounter <='1'; DONE <='0'; nSYNC <='0'; enParalelLoad <= '0'; else --if current_state = SyncData then enShiftCounter <='0'; DONE <='0'; nSYNC <='1'; enParalelLoad <= '0'; end if; end process; ------------------------------------------------------------------------------------- Title : NEXT_STATE_DECODE --- Description: This is the process were the next state logic is generated

51

-depending on the current state and the input signals. -----------------------------------------------------------------------------------NEXT_STATE_DECODE: process (current_state, START, shiftCounter) begin next_state <= current_state; --default is to stay in current state case (current_state) is when Idle => if START = '1' then next_state <= ShiftOut; end if; when ShiftOut => if shiftCounter = x"F" then next_state <= SyncData; end if; when SyncData => if START = '0' then next_state <= Idle; end if; when others => next_state <= Idle; end case; end process;

end DA2;

2. Codul VHDL pentru PmodMIC


-------------------------------------------------------------------------- PmodMICRefComp.VHD -------------------------------------------------------------------------- Author : Ioana Dabacan -- CopyRight 2008 Digilent Ro. -------------------------------------------------------------------------- Description : This file is the VHDL code for a PmodMic controller. -------------------------------------------------------------------------- Revision History: -- Feb/29/2008 Created (Ioana Dabacan) -- Feb/29/2008 ClaudiaG : adapted for PmodMic ------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --------------------------------------------------------------------------Title : AD1 controller entity --- Inputs :5 -- Outputs :5 --- Description: This is the PmodMic controller entity. The input ports -are a 50 MHz clock and an asynchronous -reset button along with the data from the ADCS7476 that -is serially shifted in on each clock cycle(DATA). -The outputs are the SCLK signal which clocks -the PmocMIC board at 12.5 MHz and a chip select -signal (nCS) that enables the ADCS7476 chips on the -PmocMIC board as well as the 12-bit output -vector labeled DATA which can be used by -any external components. The START is used to tell -the component when to start a conversion. After a -conversion is done the component activates the DONE -signal. --

52

-------------------------------------------------------------------------entity PmodMICRefComp is Port ( --General usage CLK : in std_logic; RST : in std_logic; --Pmod interface signals SDATA : in std_logic; SCLK : out std_logic; nCS : out std_logic; --User interface signals DATA : out std_logic_vector(11 downto 0); START : in std_logic; DONE : out std_logic ); end PmodMICRefComp; architecture PmodMic of PmodMICRefComp is --------------------------------------------------------------------------------- Title : Local signal assignments --- Description : The following signals will be used to drive the -processes of this VHDL file. --- current_state : This signal will be the pointer that will point at the -current state of the Finite State Machine of the -controller. -- next_state : This signal will be the pointer that will point at the -current state of the Finite State Machine of the -controller. -- temp : This is a 16-bit vector that will store the 16-bits of data -that are serially shifted-in form the first ADCS7476 chip -inside the PmodMIC board. -- clk_div : This will be the divided 12.5 MHz clock signal that will -clock the PMOD-MIC board -- clk_counter : This counter will be used to create a divided clock signal. --- shiftCounter : This counter will be used to count the shifted data from -the ADCS7476 chip inside the PmocMIC board. -- enShiftCounter: This signal will be used to enable the counter for the -shifted data from the ADCS7476 chip inside the PmocMIC. -- enParalelLoad : This signal will be used to enable the load the shifted -data in a register. -------------------------------------------------------------------------------type states is (Idle, ShiftIn, SyncData); signal current_state : states; signal next_state : states; signal temp : std_logic_vector(15 downto 0); signal clk_div : std_logic; signal clk_counter : std_logic_vector(1 downto 0); signal shiftCounter : std_logic_vector(3 downto 0) := x"0"; signal enShiftCounter: std_logic; signal enParalelLoad : std_logic; begin --------------------------------------------------------------------------------- Title : clock divider process --- Description : This is the process that will divide the 50 MHz clock -down to a clock speed of 12.5 MHz to drive the ADCS7476 chip. -------------------------------------------------------------------------------clock_divide : process(rst,clk) begin if rst = '1' then clk_counter <= "00";

53

elsif (clk = '1' and clk'event) then clk_counter <= clk_counter + '1'; end if; end process; clk_div <= clk_counter(1); SCLK <= not clk_counter(1); ------------------------------------------------------------------------------------ Title : counter --- Description: This is the process were the converted data will be colected and -output.When the enShiftCounter is activated, the 16-bits of data -from the ADCS7476 chip will be shifted inside the temporary -registers. A 4-bit counter is used to keep shifting the data -inside temp for 16 clock cycles. When the enParalelLoad -signal is generated inside the SyncData state, the converted data -in the temporary shift registers will be placed on the output -DATA ----------------------------------------------------------------------------------counter : process(clk_div, enParalelLoad, enShiftCounter) begin if (clk_div = '1' and clk_div'event) then if (enShiftCounter = '1') then temp <= temp(14 downto 0) & SDATA; shiftCounter <= shiftCounter + '1'; elsif (enParalelLoad = '1') then shiftCounter <= "0000"; DATA <= temp(11 downto 0); end if; end if; end process; ---------------------------------------------------------------------------------- Title : Finite State Machine --- Description: This 3 processes represent the FSM that contains three states. -The first state is the Idle state in which a temporary registers -is assigned the updated value of the input "DATA". -The next state is the ShiftIn state where the 16-bits of data -from the ADCS7476 chip are left shifted in the temp -shift register. The third state, SyncData drives the -output signal nCS high for 1 clock period maintainig nCS high -also in the Idle state telling the ADCS7476 to mark the end of -the conversion. -- Notes: The data will change on the lower edge of the clock signal. Their -is also an asynchronous reset that will reset all signals to -their original state. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Title : SYNC_PROC --- Description: This is the process were the states are changed synchronously. At -reset the current state becomes Idle state. ----------------------------------------------------------------------------------SYNC_PROC: process (clk_div, rst) begin if (clk_div'event and clk_div = '1') then if (rst = '1') then current_state <= Idle; else current_state <= next_state; end if; end if; end process; ------------------------------------------------------------------------------------- Title : OUTPUT_DECODE --

54

-- Description: This is the process were the output signals are generated -unsynchronously based on the state only (Moore State Machine). ----------------------------------------------------------------------------------OUTPUT_DECODE: process (current_state) begin if current_state = Idle then enShiftCounter <='0'; DONE <='1'; nCS <='1'; enParalelLoad <= '0'; elsif current_state = ShiftIn then enShiftCounter <='1'; DONE <='0'; nCS <='0'; enParalelLoad <= '0'; else --if current_state = SyncData then enShiftCounter <='0'; DONE <='0'; nCS <='1'; enParalelLoad <= '1'; end if; end process; ----------------------------------------------------------------------------------- Title : NEXT_STATE_DECODE --- Description: This is the process were the next state logic is generated -depending on the current state and the input signals. ----------------------------------------------------------------------------------NEXT_STATE_DECODE: process (current_state, START, shiftCounter) begin next_state <= current_state; -- default is to stay in current state case (current_state) is when Idle => if START = '1' then next_state <= ShiftIn; end if; when ShiftIn => if shiftCounter = x"F" then next_state <= SyncData; end if; when SyncData => if START = '0' then next_state <= Idle; end if; when others => next_state <= Idle; end case; end process; end PmodMic;

55

3. Codul VHDL pentru clock_8k


library ieee; use ieee.std_logic_1164.all; entity clock_8k is generic (D: integer:=6250); port (Reset, clockIn: in std_logic; clockOut: out std_logic); end entity clock_8k; architecture RTL of clock_8k is signal counter: integer; signal clk: std_logic; begin process(Reset, clockIn) is begin if(Reset='0') then clk<='0'; counter<=0; elsif(rising_edge(clockIn)) then if(counter=(D/2)-1) then clk<=not clk; counter<=0; else counter<=counter+1; end if; end if; end process; clockOut<=clk; end architecture RTL;

4. Codul VHDL pentru clock_mic - este acelai cod ca la clock_8k doar c valoarea lui D=86 5. Codul VHDL pentru clock_da2 - este acelai cod ca la clock_8k doar c valoarea lui D=172 6. Codul Verilog pentru controler
`timescale 1ns / 1ps module controler(clock, done, start); input clock, done; output start; reg start; always @(posedge clock) if (done) start = 1; else start = 0; endmodule

56

7.Codul Veriog pentru numarator


`timescale 1ns / 1ps module numarator (clk, clr, numar); input clk, clr; output [13:0] numar; reg [13:0] tmp; always @(negedge clk or posedge clr) begin if (clr) tmp = 14'b00000000000000; else tmp = tmp + 1'b1; end assign numar = tmp; endmodule

8. Codul Matlab pentru programul de transformare a vectorului de intrare n forma n rnduri x 2 coloane
clc; clear; y=wavrecord(3*8000,8000); wavwrite(y,'proba.wav') [a, fs, nbits, fmt.uint8] = wavread('proba.wav'); a = a'; b = 1:length(a); k = 0; for i = 1:length(a) simin(i, 1) = b(i); simin(i, 2) = a(i); end

57

BIBLIOGRAFIE
[1] "System Generator for DSP - User Guide", http://www.xilinx.com/support/documentation/sw_manuals/sysgen_user.pdf [2] Habib Estephan, Scott Sawyer, Daniel Wanninger "Real-Time Speech Pitch Shifting on an FPGA", http://www56.homepage.villanova.edu/scott.sawyer/fpga/ [3] "Digilent Basys2 Board Reference Manual", http://www.digilentinc.com/Data/Products/BASYS2/Basys2_rm.pdf [4] "Digilent PmodDA Digital To Analog Module Converter Board Reference Manual", http://www.digilentinc.com/Data/Products/PMOD-DA2/PMod%20DA2_rm.pdf [5] "PmodMIC - Microphone w/ digital interface", http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,401,517&Prod=PMOD-MIC [6] "Digilent PmodCON4 Reference Manual", http://www.digilentinc.com/Data/Products/PMODCON4/Pmod%20Con%204_rm.pdf [7] "ISE In-Depth Tutorial", http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_1/ise_tutorial_ug695.pdf [8] "Adept Software Basic Tutorial", http://www.digilentinc.com/Data/Documents/Tutorials/Adept%20Software%20Basic%20Tutorial.pdf [9] "System Generator for DSP - Getting Started Guide", http://www.xilinx.com/support/sw_manuals/sysgen_gs.pdf [10] Lent, Keith. "An Efficient method for pitch shifting Digitally sampled sounds", Computer Music Journal, vol. 13, no. 4, pp. 65-71, 1989 [11] S. Roucos and A. M. Wilgus. "High quality time-scale modification for speech", Proceedings of the International Conference on Acoustics, Speech, and Signal Processing, pages 493-496. IEEE, 1985 [12] J. Makhoul and A. El-Jaroudi. "Time-scale modification in medium to low rate coding", Proceedings of the International Conference on Acoustics, Speech, and Signal Processing, pages 1705-1708. IEEE, 1986. [13] "PmodDA2 reference component", http://www.digilentinc.com/Data/Products/PMODDA2/PmodDA2%20RefComp.zip [14] "PmodMIC reference component", http://www.digilentinc.com/Data/Products/PMODMIC/PmodMIC%20RefComp.zip [15] Cornelia Istode Novac. "Inginerie Software", Ed. Tehnic Bucureti, 1999 [16] Nicolae Mrescu. "Fiabilitate i calitate" , Curs , Galai-2008 [17] "Spectrogram", http://en.wikipedia.org/wiki/Spectrogram [18] Pong P. Chu. "FPGA Prototyping by Verilog Examples", Ed. John Wiley and Sons, USA, 2008 [19] Ian Grout. "Digital Systems Designs with FPGAs and CPLDs", Ed. Elsevier, USA, 2008 [20] Scott Hauck , Andre DeHon. "Reconfigurable computing - The theory and practice of FPGA-based computation", Ed. Elsevier, USA, 2008 [21] Roger Woods, John McAllister, Gaye Lightbody, Ying Yi. "Fpga-based Implementation of Signal Processing Systems", Ed. John Wiley and Sons, United Kingdom, 2008 [22] Richard Munden. "ASIC and FPGA Verifica tion: A Guide to Component Modeling", Ed. Elsevier, USA, 2005 [23] Frank Liu, Arun Mulpur. "Code Generation and Verification for FPGAs" MathWorks Technology Conference, 2008