Primena DSP-a, Vežba 9

12
Visoka škola elektrotehnike i ra č unarstva Nove ra č unarske tehnologije Specijalisti č ke studije Primena digitalnih signal procesora Vežba 9 U vežbi se studenti upoznaju sa implemetacijom diskretne Furijeove transformacije na DSP platformi i njenom primenom u jednostavnijim aplikacijama kao što su detekcija prisustva tonskog signala i dekodovanje DTMF tonskih signala. Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak Beograd, 2013.

Transcript of Primena DSP-a, Vežba 9

Visoka škola elektrotehnike i računarstva

Nove računarske tehnologije

Specijalističke studije

Primena digitalnih signal procesora

Vežba 9

U vežbi se studenti upoznaju sa implemetacijom diskretne Furijeove transformacije na DSP platformi i njenom primenom u jednostavnijim aplikacijama kao što su detekcija prisustva tonskog signala i dekodovanje DTMF tonskih signala.

Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak Beograd, 2013.

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Uvod

Na ControlStick-u postoje izvodi za masu, napon napajanja (3.3V) i ulaz A/D konvertora koji su nam potrebni za izvođenje ove vežbe.

U vežbi će se raditi dignala obrada audio signala. Kao izvor signala se koristi izlaz za slušalice sa PC-a. Audio izlaz PC-a i PiccoloControlStick se povezuju kao što je prikazano na električnoj šemi.

2

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Za gerisanje tonskih signala se koristi Tone Generator 100-15kHz

Pokrenite CCS, workspace ime postaviti na DFT

Primer „SimpleDACtoADC“ importovati u workspace uz kopiranje sadržaja

putem ImportExistingCCSEclipseProject opcije, ili putem CCSExampleProjects

Podesiti Target Configuration za Picollo-controlStick

Build Configuration postaviti na upis u RAM

Povezati Picollo-controlStick sa audio izlazom PC-a

3

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Zadatak 1.

U grafičkom prozoru kontinualno prikazivati izgled signala na ulazu A/D konvertora.

Da bi smo prešli iz vremenskog u frekventni domen potrebno je diskretizovati signal, odnosno uzeti odbirke analognog signala koji želimo da obradimo. Da bi se definisala učestanost odabiranja potrebno je znati maksimalnu učestanost signala koji obrađujemo.

Predpostavimo da maksimalna učestanost signala koji se obrađuje 1000Hz. Prema Shannon-ovoj teoremi odabiranja, učestanost odabiranja mora biti barem dva puta veća od maksimalne učestanosti signala koji se analizira. Učestanost odabiranja ćemo postaviti na 2000Hz, odnosno uzimaćemo 2000 odbiraka u sekundi. Potrebno je svakih 0.5mS uzimati jedan odbirak. Najednostavniji način da se realizuje ova funkcionalnost je da se vreme između uzimanja dva odbirka meri tajmerom.

Odbirke smeštamo u vektor određene dužine i kada se on napuni vršimo obradu snimljenih odbiraka. U ovom primeru ćemo raditi sa skupom od 200 odbiraka. U okviru projekta koji koristimo („SimpleDACtoADC“) već je pokrenuta A/D konverzija u repeat režimu, odnosno čim se konverzija završi pokreće se nova konverzija. Postojeći program treba promeniti tako da se vrednosti sa A/D konvertora očitavaju u jednakim vremenskim intervalima (0.5mS). U PRD registar tajmera treba upisati vrednost koja odgovara ovom vremenu. Kako je sistemski takt 60MHz tajmer će za 0.5mS izbrojati:

Broj_Impulsa = 60000000*0.5/1000 = 30000

#define MS05 30000

Pre glavne programske petlje PRD registar tajmera0 treba napuniti ovom vrednošću

CpuTimer0Regs.PRD.all=MS05;

for(;;) //infinite loop

{

U okviru glavne programske petlje se proverava da li je vreme isteklo i ako jeste očitava se vrednost sa A/D konvertora i smešta u vektor odbirci. Vektor odbirci treba deklarisati kao globalnu promenljivu

#define BRODBIRAKA 200

int odbirci[BRODBIRAKA] ;

int brojodbiraka;

4

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Kod u okviru glavne programske petlje:

if(CpuTimer0Regs.TCR.bit.TIF==1) 

  if(brojodbiraka<BRODBIRAKA){ 

    CpuTimer0Regs.TCR.bit.TIF=1; 

    odbirci[brojodbiraka] = AdcResult.ADCRESULT0;  

      brojodbiraka++; 

  } 

  else 

  { 

    brojodbiraka=0; 

  } 

   

Pokrenuti Tone Generator 100-15kHz i postaviti parametre kao na slici

Pokrenuti debag

5

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Postaviti parametre grafičkog prikaza U grafičkom prikazu postaviti opciju

osvežavanja ekrana

Pokrenuti izvršavanje programa Ekran za Grafički prikaz treba da dobije sledeći izgled:

Menjati učestanost ulaznog signala. Zašto sa povećanjem učestanosti dolazi do izobličenja prikazanog signala?

6

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Zadatak 2.

Implementirati kod za izračunavanje spektralnih komponenti ulaznog signala primenom diskretne Furijeove transformacije i prikazati dobijeni spektar u grafičkom displeju.

Formule za izračunavanje realnog i imaginarnog dela k-te spektralne komponente su:

gde su fn odbirci signala. Izračunavanje se svodi na množenja i sabiranja. Vrednosti odbiraka množimo sa vrednostima sinusa i kosinusa. Da bi se ubrzalo izračunavanje vrednosti sinusa i kosinusa izračunavamo u inicijalizaciji i smeštamo ih u vektore u Q15 formatu. Izračunavanje radimo u podprogramu sincos

void sincos(void) {  int i;  double pom;   for(i=0;i<BRODBIRAKA;i++)     {      pom =sin(2*PI*i/BRODBIRAKA);      sinus[i]=(int)(pom*32767);  //Konverzija double brojeva u Q15 format     }   for(i=0;i<BRODBIRAKA;i++)     {      pom =cos(2*PI*i/BRODBIRAKA);      cosinus[i]=(int)(pom*32767); //Konverzija double brojeva u Q15 format     } 

PI je definisano kao konstanta 

#define PI 3.14159265359

7

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Izračunavanje spektralnih komponenti se vrši u okviru podprograma dft  void dft(void) { int i,k;     for(k=0;k<BRODBIRAKA/2;k++)     {       ReSum=0;       ImSum=0;         for(i=0;i<BRODBIRAKA;i++)         {           ReSum+=((long)(cosinus[(i*k)%BRODBIRAKA])*(long)(odbirci[i]))>>15;          ImSum+=((long)(sinus[(i*k)%BRODBIRAKA])*(long)(odbirci[i]))>>15;         }       Mag[k]=(int)(((long)(ReSum>>7)*(long)(ReSum>>7)+(long)(ImSum>>7)*(long)(ImSum>>7))>>11);     } 

}

U vektor Mag se smeštaju normalizovane vrednosti magnitude signala. Vektor Mag i vektori za smeštanje sinusa i kosinusa su deklarisani kao:

Int odbirci[BRODBIRAKA],sinus[BRODBIRAKA],cosinus[BRODBIRAKA],Mag[BRODBIRAKA/2];

Magnituda signala =

Kako bi vađenje kvadratnog korena oduzelo dosta procesorskog vremena suma kvadrata je podeljena sa 2048.

8

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

U glavnoj programskoj petlji implementirati sledeći kod:  //  Forever LOOP //=================================   sincos();   brojodbiraka=0;   CpuTimer0Regs.PRD.all=MS05;   for(;;)  //infinite loop   {            if(CpuTimer0Regs.TCR.bit.TIF==1)     {       if(brojodbiraka<BRODBIRAKA){         CpuTimer0Regs.TCR.bit.TIF=1;         odbirci[brojodbiraka] = AdcResult.ADCRESULT0;           brojodbiraka++;       }       else       {         dft();         brojodbiraka=0;        }      } 

  }     

Pokrenuti Tone Generator 100-15kHz, CCS postaviti parametre grafičkog displeja i pokrenuti izvršavanje programa.

Menjati učestanost generatora i proveriti da li implementirani kod ispravno radi.

Učestanost spektralnih komponenti računamo na sledeći način:

Razmak između spektralnih komponenti:

∆f=1/( BRODBIRAKA * MS05)=1/(200 * 0.5 e-3) = 10Hz pa primera radi magnituda Mag(10) odgovara magnitudi spektralne komponente na 100Hz (10Hz * 10).

9

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Zadatak 3.

Modifikovati implementirani program tako da je moguće izmeriti vreme potrebno za izvršavanje podprograma dft().

10

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Zadatak 4. Modifikovati program tako da indicira prisustvo signala od 200Hz na ulazu A/D konvertora. Ako je signal prisutan upaliti LE-diodu na pinu GPIO34, a ako nije dioda treba da bude ugašena.

Modifikovati program da se jednosmerna vrednost postavi na 0 i prikazati spektar signala.

11

Visoka škola elektrotehnike i računarstva – specijalističke studije – Primena DSP-a © Branislav Pavić, Milan Mijalković, Boris Milosavljević, Predrag Poljak 2013.

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

12

Zadatak 5. Modifikovati program tako da detektuje ton zauzete telefonske linije sa tonskim biranjem. Kada je linija zauzeta po liniji se šalju dva tonska signala učestanosti 480 i 620 Hz. Ukoliko je linija zauzeta upaliti LE-diodu na pinu GPIO34 a ako nije dioda treba da bude ugašena.