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.
#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
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++.