Sprawozdanie z Laboratorium Procesory Sygnałowe 2 |
---|
Nazwiska i Imiona: Bury Marcin Lingas Michał |
1.)Cel ćwiczenia
Celem naszego ćwiczenia było uruchomienie i przebadanie algorytmu generacji sinusoid z równania różnicowego. Należało zrealizować procedury z zaokrąglaniem i bez zaokrąglania dla różnych częstotliwości.
2.) Pomiary przy stałym przecinku :
kod programu :
xn2=0;
xn1=sin(2*PI*Fx/Fs);
A=cos(2*PI*Fx/Fs);
IER|=0x2000;
}
void przerwanie_rcv()
{
probka=MCBSP_read(hMcbsp1);
xn=2*A*xn1-xn2;
xn2=xn1;
xn1=xn;
xr=(xn*20000)+0.5;
probka=xr;
MCBSP_write(hmcbsp1,probka);
}
a) A, xn, xn1, xn2 -double, floating point
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1000 | 1 000 | 1000 |
500 | 500 | 500 |
250 | 249,7 | 250,4 |
125 | 124,5 | 124,9 |
65 | 64,8 | 65,2 |
42,5 | 42,58 | 42,63 |
20 | 20,06 | 19,99 |
10 | 10,01 | 9,6 |
5 | 5,03 | 5,4 |
2,5 | 2,503 | 3,6 |
Legenda:
f1 - częstotliwość zadana
f2- częstotliwość odczytana z oscyloskopu z zaokrągleniem
f3- częstotliwość odczytana z oscyloskopu bez zaokrąglenia
b)A, xn, xn1, xn2 -float, floating point,
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1 000 | 1 000 |
500 | 500 | 499,8 |
250 | 249,7 | 250,2 |
125 | 124,9 | 125,7 |
65 | 64,6 | 65,5 |
42,5 | 42,5 | 42,4 |
20 | 19,7 | 19,7 |
10 | 9,8 | 10,1 |
5 | 5,4 | 5,1 |
2,5 | 3,25 | 2,1 |
c)A -Q15, xn, xn1, xn2 -Q14 (short),
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1000 | 1000 | 1k |
500 | 500 | 500 |
250 | 254,7 | 253 |
125 | 119,3 | 118,8 |
50 | 60,62 | 60,9 |
42,5 | 66,2 | 66,9 |
d)A, xn, xn1, xn2 -Q15 (short),
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f1[Hz] | F2[Hz] |
---|---|
1000 | 1000 |
500 | 500 |
250 | 250,5 |
125 | 104,9 |
65 | 61,2 |
42,5 | 55,7 |
3.) Pomiary przy zmiennym przecinku :
a) A, xn, xn1, xn2 - double, floating point,
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1001 | 1 000 |
500 | 501 | 500 |
250 | 249,6 | 249,8 |
125 | 124,7 | 125,3 |
65 | 64,9 | 65,16 |
42,5 | 42,56 | 42,51 |
20 | 20 | 20 |
10 | 10 | 9,95 |
5 | 5 | 4,9 |
2,5 | 2,53 | 2,36 |
b)A, xn, xn1, xn2 -float, floating point,
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 998,0 | 1 000 |
500 | 501,0 | 500 |
250 | 249,9 | 250,3 |
125 | 124,9 | 124,8 |
65 | 64,94 | 65,1 |
42,5 | 42,5 | 42,4 |
20 | 19,95 | 19,9 |
10 | 6,88 | 9,8 |
5 | 5,96 | 5,32 |
2,5 | 3,12 | 3,1 |
c)A -Q15,xn, xn1, xn2 -Q14 (short),
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1 000 | 1 000 |
500 | 501,5 | 498,5 |
250 | 254,3 | 253,7 |
125 | 134,5 | 119,3 |
50 | 84,7 | 60,5 |
42,5 | 66,7 | 66,6 |
xn1=roundf(16384*sinf(2*PI*Fx/Fs));
A=roundf(32768*cosf(2*PI*Fx/Fs));
IER|=0x2000;
xn=((2*A*xn1+0x2000)>>15)-xn2;
xn2=xn1;
xn1=xn;
probka=xn;
d) A, xn, xn1, xn2 -Q15 (short) + saturation mode (z wykorzystaniem "if"),
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1 000 | 1 000 |
500 | 502,8 | 503,0 |
250 | 253,0 | 531 |
125 | 133,0 | 133,1 |
50 | 85,0 | 84,8 |
42,5 | 55,6 | 161,6 |
Kod programu:
xn1=(32768*sinf(2*PI*Fx/Fs));
A=(32768*cosf(2*PI*Fx/Fs));
IER|=0x2000;
tmp=((2*A*xn1+0x4000)>>15)-xn2;
if (tmp >= 32767){
xn=32767;}
else{
xn=tmp;
} xn2=xn1;
xn1=xn;
e)A -Q15 (short), xn, xn1, xn2 -Q30 (int), czyli zwiększenie dokładności dodawania 16 bit -> 32 bit i pozostawienie mnożenia 16 bit x 16 bit -> 32 bit,
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1007 | 998 |
500 | 104.2 | 104.4 |
250 | 65.39 | 65.10 |
125 | 23.98 | 23.27 |
50 | 24.04 | 23.97 |
42,5 | 100,7 | 138 |
20 | 104.2 | 104.4 |
10 | 65.39 | 65.10 |
5 | 23.98 | 23.27 |
2,5 | 24.04 | 23.97 |
f)A -Q15, xn, xn1, xn2 –Q13 -short
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1 000 | 1 000 |
500 | 502,7 | 503,5 |
250 | 254,2 | 254,4 |
125 | 129 | 128,6 |
50 | 93,6 | 93 |
42,5 | 52,8 | 52,6 |
20 | 29,25 | 29,18 |
g) A -Q10, xn, xn1, xn2 –Q10 -(short)
f1 –częstotliwość zadana
f2 –częstotliwość odczytana z oscyloskopu z zaokrąglaniem
f3 - częstotliwość odczytana z oscyloskopu bez zaokrąglenia
f1[Hz] | F2[Hz] | F3[Hz] |
---|---|---|
1 000 | 1000 | 1000 |
500 | 585,0 | 582 |
250 | 325 | 329,1 |
125 | 364 | 371 |
4.)Wnioski:
W czasie wykonywania pomiarów zmienialiśmy typy zmiennych, które były używane do wygenerowania sinusa. Zauważyliśmy że im mniejsza dokładność zmiennej tym sygnał jest bardziej zniekształcony. Najlepszą zmienna do generacji jest zmienna typu double.