Lab3 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania


Skład grupy.

Indeks

Rok Akad.

Kierunek / specjalność

Nr Stan. lab.

III

III

Elektronika/Aparatura Elektroniczna

Elektronika/EZI


  1. Cel ćwiczenia

Celem ćwiczenia jest zapoznanie się z nowym zastosowaniem procesorów DSP(w stosunku do wcześniejszych laboratoriów) jakim jest generacja sygnałów sinusoidalnych. Z trzech opcjonalnych sposobów otrzymania sygnału sinusoidalnego ,wykorzystana będzie opcja oparta o rozwinięcie Taylora. Bezpośrednim celem jest analiza otrzymanych przebiegów oraz wykorzystanie w niej FFT. W przypadku naszego modułu dedykowaną do tej operacji biblioteką jest DSPLIB.W naszym ćwiczeniu celem jest poznanie tej biblioteki oraz wykorzystanie do konkretnego zastosowania dotyczącego sygnałów sinusoidalnych.

  1. Przebieg ćwiczenia

a)Analiza instrukcji podanej przez prowadzącego. Zanotowanie niezbędnych dyrektyw „include# „tms320.h” oraz „include# „dsplib.h” oraz miejsca w którym powinien znaleźć się plik biblioteczny „55xdsph.lib”.Spełnienie obu wynotowanych warunków pozwoli nam na korzystanie z biblioteki DSPLIB w nowym projekcie.

b)Następnie dochodzimy do momentu w którym postawione zostało pytanie„ Skąd wzięła się magiczna wartość 22368(wartość współczynnika skalującego)?”

Zauważając , że nasz procesor jest 16-bitowym procesorem stałoprzecinkowym , zwracamy uwagę , na zależność wynikająca z jego analizy. Wartość 32767 interpretować możemy jako +180°(lub pi) , a wiec 2*32767 da nam 360°.Jako , że funkcja sine() z której będziemy korzystać , przyjmuje parametr jakim jest wartość kąta poprzez wartość stałoprzecinkową musimy więc odpowiednio przeskalować wartość kątową .Wyznaczamy krok kątowy dla częstotliwości 1Hz (48000 próbek)- krok kątowy 0.0075°(360/48000).Dla 1 Hz próbka co okres próbkowania obliczona zostaje poprzez podział całego okresu sinusa(360°) czyli 2*32767 przez 48000.Chcąc zwiększyć częstotliwość do np. 3 Hz przemnażamy zależność przez zadaną częstotliwość - 3* 360°48000 itd. Wartość 48000 jest jednak niewygodna w arytmetyce stałoprzecinkowej. Wygodną wartością jest np. 32768 aby zamienić otrzymany współczynnik na ułamek dzielony przez 32768(przesunięcie 15 bitów w prawo), musimy znaleźć odpowiedni ułamek.2*(32767/48000)=2*(22368/32768) - stąd nasza magiczna wartość współczynnika. Wartość 22368 odpowiada wartości przeliczenia(0.682*32767) [dlaczego!!!]'

Odpowiedź na to pytanie również zawarta jest w opisie pierwszego pytania.

c) Stanowisko zostało skonfigurowane zgodnie z instrukcją. Następnie został stworzony nowy projekt - analogicznie do poprzednich laboratoriów wraz z dołączeniem niezbędnych dla projektu plików.

d)Początkowo zmienione zostało wzmocnienie sygnału generowanego z 10000 na 5000 -

“left_output = generate_sinewave_1(250, 5000);” zarówno „lewego” jak i „prawego”.

`Zastanów się dlaczego w kodzie występują dwie funkcje generate_sinewave_1 i enerate_sinewave_2?'.

Funkcja „generate_sinewave(1,2)()” przyjmuje dwa parametry (1 - częstotliwość sinus, 2 - wzmocnienie). Istnienie dwóch funkcji „generate_sinwave” jest uzasadnione ze względu na potrzebę zapamiętania przez funkcję wcześniejszego kąta z którego obliczana była wartość sinusoidy. Do zapamiętanego kąta w funkcji dodawana jest wartość obliczona z uzasadnianych wcześniej zależności oraz pomnożona przez naszą częstotliwość. Wykorzystywana jest tutaj zmienna „static short int count =0;”. Dwie funkcje „generate_sinewave” istnieją z wyżej wymienionego powodu , mianowicie aby dla dowolnego sygnału utworzona byłą zmienna w której zapisany jest aktualny kąt naszego sygnału.

e) Zgodnie z poleceniem instrukcji , kod został wzbogacony o dwie tablice które służą do zapisywania próbek dla dwóch oddzielnych kanałów(left,right). Wzmocnienie zostało przywrócone do początkowej wartości - 10000(wcześniej 5000).

left_output = generate_sinewave_1(250, 10000); // Sinewave 1 is 250 Hz.

left[idx%480]=left_output;

right_output = generate_sinewave_2(1000, 10000); // Sinewave 2 is 1000 Hz.

right[idx%480]= right_output;

idx++;

f)Następnie program został uruchomiony oraz wstrzymany po kilku sekundach.W zakładce „Expressions” zostały dodane nazwy dwóch tablic. Poprzez „view memory” uzyskaliśmy podgląd do „Memory Browser” , w której widzimy zawartość pamięci danych poczynając od adresu początkowego jednej z dwóch tablic. Pierwsze 16 wartości próbek dla każdej z tablic faktycznie są tożsame z wartościami ukazywanymi przez „Memory Browser”.

g) W zakładce „Expressions” po kliknięciu lewym przyciskiem myszy użyliśmy opcji „Graph”. Zostały ustawione wszystkie niezbędne punkty dotyczące wykresu sygnału czasowego oraz FFT. Uzyskane rezultaty przedstawione są na zrzutach ekranu:

Przebieg czasowy oraz FFT dla obu kanałów:

0x08 graphic
0x01 graphic

0x08 graphic

0x01 graphic

h)Po analizie wstępnych wykresów oraz FFT zostały wprowadzone modyfikacje. Wyniki ze względu na niedoinformowanie nie zostały przedstawione żadnymi zrzutami z ekranu. Częstotliwość sinusa została zmieniona na częstotliwości dwóch tonów muzycznych : 440 Hz oraz 523 Hz. Wykres FFT można było uznać za poprawny , choć w analizie FFT dało się zauważyć niewielkie przesunięcia w stosunku do żądanych wartości. Dokonane zostały dalsze wymagane modyfikacje odpowiednio: częstotliwości sinusa , rozmiaru okna FFT oraz długości bufora. Przeciek widma który został zauważony przy analizie , najprawdopodobniej spowodowany jest przez bufor , który nie przechowuje całkowitej liczby okresów naszego sygnału.

i)Następnie została przeprowadzona próba zmiany częstotliwości próbkowania z 48 KHz na 24 KHz. Poza konieczną zmianą w pliku „main.c” z 48000 na 24000 , niezbędnym była również zmiana wartości skalującej 22368. Analizując zależność pomiędzy ułamkami w pierwszej części laboratorium dokonane zostało przeliczenie : 2*32767/24000=2*50199/32768. Wartość nowego współczynnika skalującego , przez którą będzie przemnażana częstotliwość to 50199.Dzięki FFT zauważyć możemy , że wartość została dobrana poprawnie. Przesterowanie sygnału skutkuje obcinaniem najwyższych i najniższych , oraz zastąpieniem ich przez maksymalne wartości próbek sygnału , związane jest to z instrukcją warunkową „if” działającą w takich przypadkach , a mającą swoją lokalizacje w pliku sinewaves.c:

if ( result > 32767)

{

result = 32767; /* Maximum value for highest frequency */

}

else if ( 0 == result)

{

result = 1; /* Minimum value for lowest fequency */

}

else if ( result < -32767)

{

result = -32767;

}

To właśnie owo zastąpienie próbek skutkuje kolejnymi wyższymi składowymi harmonicznymi w FFT.

3) Wnioski

Biblioteka DSPLIB jest niezwykle przydatna jako dedykowana przez firmę TI do generacji sinusa(oraz wielu innych zastosowań przy cyfrowym przetwarzaniu sygnałów) .Dzięki środowisku CSS możemy efektywnie generować sygnały sinusoidalne a także posiadamy niezbędne do ich analizy narzędzia jak np. FFT. Zarówno generowany sygnał jak i jego przedstawienie graficznie może być obserwowane oraz kontrolowane na bieżąco dzięki podglądowi do zawartości próbek sygnału(Expressions) oraz możliwościom , które dają nam instrukcje „graph” czy „magnitude”.

4) Wyposażenie/aparatura

Wykorzystany sprzęt laboratoryjny:

5)Odpowiedzi na pytania z laboratorium drugiego

a) Co zrobi funkcja set_sampling_frequency_and_gain po wpisaniu do niej wartosci 24000?

0x08 graphic
Nasza funkcja zawiera w sobie funkcję AIC3204_rset(Uint16 regnum,Uint16 regval), służy ona wpisaniu wartości regval do rejestru oznaczonego jako numerem regnum. Przy 24000 Hz obserwujemy działanie konstrukcji warunkowej „switch” - widzimy , że 24000 jest jedną z dozwolonych wartości(przy niedozwolonej parametr zostaje ustawiony automatycznie na 48000 Hz).Przy podaniu 24kHz funkcja przypisze PLLPR wartość 0xA1,która będzie dalej wykorzystywana. Możemy przejść do obserwacji konfiguracji codeca. AIC32204_rset(0,0) - wpisuje do rejestru 0 wartość 0 , rejestr ten służy do wyboru strony (my wybieramy 0).Pod kątem zadanego pytania przechodzimy do dalszej analizy rejestrów. AIC3204_rset(4,3)- do rejestru 4 wpisujemy wartość 3(00000011) .Analizując dokumentację kodeka możemy stwierdzić , że wpisanie takiej wartości skutkuje następująco: Bity D1-D0 są ustawione na 11-CODEC_CLKIN<-PLL CLK, D3-D2 służą do wyboru PLL_CLKIN-00 PLL_CLKIN <-MCLK). Instrukcja AIC3204_rset(6,7) - do rejestru 6 zostaje wpisana wartość 7(00000111) , która jest nam niezbędna pod kątem dalszych obliczeń. W następnych instrukcjach ustawiamy wartość D(dwa rejestry).AIC3204_rset(7,0x06) - wpisuje wartość 0x06 do rejestru 7.AIC_rset(8,0x90)-analogicznie 0x90 do rejestru 8.Wartość D- 0000011010010000 co dziesiętnie zapisujemy 1680.Instrukcja AIC3204_rset(5,PLLPR) korzysta z wpisanej wcześniej dla 24kHz wartości -0xA1.Na bitach D3-D0 zapisywana jest wartość R(0001: R=1),D6-D4 to wartość P(010: P=2).Bit D7 służy do włączenie PPL. Korzystając z wartości wpisanych przez twórcę programu możemy obliczyć częstotliwość sygnału

0x08 graphic
Wartość 12 MHz to częstotliwość MCLK. Do wyznaczenia częstotliwości próbkowania przetwornika DAC zgodnie z drzewem powiązań otrzymaną wartość dzielimy przez wartości wpisane do rejestrów NDAC,MDAC,DOSR(rejestry 11,12,13,14). Wartość DOSR odczytana z wartości wpisanych przez twórcę: (13,0) (14,0x80), rejestr 13 to bity młodsze - 128 czyli 0000000010000000.NDAC=(11,0x87) czyli 10000111. Bity D0-D6 to wartość NDAC(u nas 7), D7 sprawia , że dzielnik jest włączony. MDAC=(12 ,0x82) czyli 100000010 - bity D0-D6 ustawiają wartość MDAC na 2. D7 sprawia , ze dzielnik jest włączony. Korzystając ze wzoru :

Obliczamy wartość DAC_FS. Wartości zostały poprawne wpisane a funkcja działa zgodnie z założeniami.

b) Jak można doświadczalnie sprawdzić akutalną częstotliwość próbkowania?

Grupa stwierdziła , że sposobem który umożliwi sprawdzenie częstotliwości , jest oscyloskop podłączony bezpośrednio na fladze XF , która jest modyfikowana przy każdym nowym przebiegu pętli.

6)Dołączona notatka laboratoryjna , którą zapomniano oddać podczas laboratoriów

Notatka laboratoria 3(Daniel Stawiarski 207558)

-procesor DSP można wykorzystać do generacji przebiegów sinusoidalnych

-sygnały sinusoidalne mogą być wykorzystane a aplikacjach audio do generacji tonów muzycznych i przebiegów złożonych , generacji tonów w telefonach z wybieraniem tonowym , modulacji sygnałów audio , sterowania efektami dźwiękowymi…

-sinusoida to czysty ton zwiera tylko jedną częstotliwość, FFT pokazuje składowe częstotliwościowe, złożone przebiegi mają kilka składowych częstotliwościowych

-Istnieją trzy główne sposoby generacji sinusów( tablicowanie wartości sinusa , równanie rekursywne , rozwinięcie Taylora)

-zapoznanie się z metodą tablicowania

-równanie rekursywne jako metoda generacji sinusa

-funkcja sinus może być zaimplementowana jako szereg geometryczny

-zalety i wady trzech typów generacji sinusów , niebezpieczeństwa związane z dokładnością przy generacji sinusa za pomocą rozwinięcia Taylora(metody która stosuje użyta przez nas biblioteka DSPLIB)

-DSPLIB jest lepszym wyjściem przy generacji sinusa niż standardowa dla języka C funkcja sin(x)

-DSPLIB zwiera pełen zakres przydatnych w DSP funkcji(sinus , cosinus FFT itd.)

-każda funkcja jest zoptymalizowana dla konkretnego procesora , są to implementacje stałoprzecinkowe , większość napisana w asemblerze ze względu na szybkość/wydajność

-funkcja pobiera trzy argumenty : 1-Adres lokacji zawierającej kąt , 2-Adres lokacji do zapamiętania obliczonej wartości sinus , 3- zawsze równy 1 dla pojedynczego przebiegu

-poznanie źródła współczynnika skalowania 22368, dla naszego procesora

-daną wejściową funkcji sine() jest wartość stałoprzecinkowa , kąt reprezentowany przez odpowiednie przeliczenie (0-0 °, 32767- 180° itd.)

-przeliczenia ilości próbek dla wybranych częstotliwości , oraz częstotliwości dla wybranej ilości próbek

-zależność na współczynnik skalujący

-w kodzie C dzielenie przez 32768 jest implementowane jako >>15

Cele:

-prześledzenie pracy programu który generuje przebiegi sinusoidalne o zadanej częstotliwości za pomocą wskazanego procesora

-zbadanie programu pod kątem zmian samodzielnie przeprowadzonych w kodzie

Generowanie przebiegów sinusoidalnych

3

Autor sprawozdania

Temat ćwiczenia

Nr ćwicz.

Laboratorium procesorów sygnałowych data / termin: 12.12.2014/PT 13:15

1

Autor sprawozdania

Temat ćwiczenia

Nr ćwicz.

Laboratorium procesorów sygnałowych data: ..........................



Wyszukiwarka

Podobne podstrony:
Lab4 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Lab1 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Lab5 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Lab2 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
IiAS lab 1, Mechatronika AGH IMIR, semestr 6, Identyfikacja i analiza sygnałów 2, sprawozdania
Systemy przetwarzania sygnałów sprawozdanie nr 1, WI, Semestr VI, Systemy przetwarzania sygnałów
Systemy przetwarzania sygnałów sprawozdanie nr 6, WI, Semestr VI, Systemy przetwarzania sygnałów
Systemy przetwarzania sygnałów sprawozdanie nr 3, WI, Semestr VI, Systemy przetwarzania sygnałów
Optymalizacja procesów chemicznych i elektrochemiczne procesy produkcyjne, Uczelnia PWR Technologia
Systemy przetwarzania sygnałów sprawozdanie nr 2, WI, Semestr VI, Systemy przetwarzania sygnałów
Procesy przesiewania, sprawozdania agh gig przeróbka mechaniczna
PRÓBKOWANIE SYGNAŁU - Sprawozdanie z laboratorium Technologia Informacjna, Automatyka, Semestr 1, Te
Systemy przetwarzania sygnałów sprawozdanie nr 5, WI, Semestr VI, Systemy przetwarzania sygnałów
[BAT] BAT dla procesów rafineryjnych, Uczelnia PWR Technologia Chemiczna, Semestr 6, BAT-y egzamin
Mateusz Gasiorek 180514 sprawko, [W4] AIR SEMESTR III, TEORIA SYGNAŁÓW, SPRAWOZDANIE, SPRAWOZDANIE
Systemy przetwarzania sygnałów sprawozdanie nr 4, WI, Semestr VI, Systemy przetwarzania sygnałów
,miernictwo L,Pomiar wartości skutecznej napięć okresowo zmiennych metodą analogowego przetwarzania
Plaff J , Polityka rachunkowości w procesie badania sprawozdań finansowych, Wydaw UE, Katowice 2014

więcej podobnych podstron