Laboratorium Mikroinformatyki Rok akademicki

Termin

Rodzaj studiów

Kierunek

Prowadzący

Grupa

Sekcja

29 XI 2007

2007 / 2008

WSZ

Informatyka

GB

1

2

(czwartek)

Sprawozdanie z ćwiczenia numer 18 i 19

Data wykonania ćwiczenia: 2007-11-29

(Dokończenie 2008-01-03)

Temat ćwiczenia:

Procesory sygnałowe

Skład sekcji:

Artur Zakrzewski

Majda Sebastian

Mitręga Tomasz

Zwardoń Piotr

1. Temat zadania Zadanie polegało na napisaniu programu generującego dźwięki o odpowiedniej amplitudzie która została przedstawiona na poniższych wykresach.

6

5

4

3

2

1

0

1

2

3

4

5

6

7

8

9

10

11

12

Wykres przedstawia dźwięk który należało wygenerować 1,2

1

0,8

0,6

0,4

0,2

0

1

2

3

4

5

6

7

8

9

10 11 12 13 14 15 16 17

Obwiednia

Program należało napisać w środowisku VisualDSP 4.0.

2. Kod programu:

#include "Talkthrough.h"

//--------------------------------------------------------------------------//

// Function: Process_Data()

//

// Description: This function is called from inside the SPORT0 ISR every

// time a complete audio frame has been received. The new

// input samples can be found in the variables iChannel0LeftIn,

// iChannel0RightIn, iChannel1LeftIn and iChannel1RightIn

// respectively. The processed data should be stored in

// iChannel0LeftOut, iChannel0RightOut, iChannel1LeftOut,

// iChannel1RightOut, iChannel2LeftOut and iChannel2RightOut

// respectively.

//--------------------------------------------------------------------------//

unsigned int amplituda=0;

int wait;

int wait2;

bool plus=true;

unsigned int dzwiek[12]={0,1,2,3,4,5,0,1,2,3,4,5}; unsigned int obwiednia[16]={0,2,4,6,8,10,0,10,0,10,0,10,8,6,4,2}; int i=0;

int j=0;

unsigned int wykres1[6000];

int k=0;

void Process_Data(void)

{

unsigned int wyjscie;

wait2 += 1;

if (wait2>=50)

{

wait2=0;

j++;

}

if (j == 12)

{

j=0;

wait++;

}

if (wait>=5)

{

wait=0;

i++;

}

if (plus)

{

amplituda += 10;

if (amplituda >= 100)

plus = false;

}

else

{

amplituda -= 10;

if (amplituda <= 0) plus = true;

}

if (i == 16) i = 0;

wyjscie=(amplituda)*10000*obwiednia[i]*dzwiek[j]; if (amplituda==100)

{

k++;

if (k==6000-1) k = 0;

wykres1[k] = wyjscie/100000;

}

iChannel0LeftOut = wyjscie;

iChannel0RightOut = wyjscie;

}

3. Analiza wyników:

Program generował poprawne wyniki które wyglądają następująco na wykresie wygenerowanym przez kompilator VisualDSP++.

Dodatkowo w celu sprawdzenia został wygenerowany wykres poprzez przepisanie programu do Borland C++ Buildera i wygenerowaie wykresów w Excelu.

600

500

400

300

200

100

0

0

500

1000

1500

2000

2500

3000

250

200

150

100

50

0

112

132

152

172

192

212

4. Wnioski:

Napisanie programu z przysporzyło nam pewne trudności, głównie z powodu nie znajomości odpowiedniej częstotliwości w której poprawnie można było usłyszeć dźwięk.

Zdarzało się że wykres wyglądał tak jak życzył sobie tego prowadzący, jednak nie udawało się poprawnie wygenerować jakiegokolwiek dźwięku. Jednak po kilku godzinach udało nam się wreszcie wygenerować odpowiedni dźwięk oraz wykres. Dodatkowo laboratorium pokazało nam jak pisać programy do procesorów sygnałowych, oraz pozwoliło na oswojenie się z niewątpliwie ciekawym środowiskiem jakim jest VisualDSP++.