Bloki sygnałowe – propagacja i przetwarzanie sygnałów
Transkrypt
Bloki sygnałowe – propagacja i przetwarzanie sygnałów
Laboratoria 12–13: Bloki sygnałowe – propagacja i przetwarzanie sygnałów 1 Cel zadania Nabycie praktycznej umiej˛etności konstrukcji klas pochodnych oraz wykorzystania metod wirtualnych. 2 Program zaj˛eć 2.1 Pierwszy tydzień • Sprawdzenie przygotowania do zaj˛eć – obowiazkowo ˛ musza˛ zostać zrealizowane przed zaj˛eciami diagram klas oraz diagram czynności działania wyznaczania wartości sygnału w kolejnych chwilach czasowych (na poziomie ogólnych, tzn. bez wchodzenia w szczegóły poszczególnych operacji). W końcowej wersji zadania stworzone diagramy należy dołaczyć ˛ do dokumentacji programu zrealizowanej w systemie doxygen. Diagram można wykonać wykorzystujac ˛ jeden z programów: bouml, dia lub umbrello. Wymienione programy dost˛epne sa˛ na panamincie. Na podstawie stworzonych diagramów należy wygenerować lub napisać definicje klas w j˛ezyku C++. • Ocena realizacji zadania z poprzedniego laboratorium – ocenie podlega poprawność programu, kompilacja (kompilacja musi przebiegać bez ostrzeżeń), styl pisania programu oraz dokumentacja zrealizowana w systemie doxygen. • Realizacja wst˛epnej fazy prac nad nowym zadaniem – należy skopiować i uruchomić dostarczony zala˛żek programu. Wykorzystujac ˛ go oraz w oparciu o stworzony diagram klas należy zdefiniować klasy co najmniej dwóch bloków sygnałowych i zdefiniować własna˛ klas˛e pochodna˛ listy tychże bloków. Klasa ta, powinna dziedziczyć dostarczona˛ wraz z zala˛żkiem definicj˛e klasy podstawowej listy bloków. Implementacja jej metod dostarczona jest w postaci biblioteki. Klasa pochodna listy, która˛ należ zdefiniować, powinna poprzez wywołanie odpowiednich metod umożliwiać dodawanie do listy wcześniej zdefiniowane bloki sygnałowe. We wst˛epnej testowej wersji programu powinien on na sztywno dodawać co najmniej dwa bloczki sygnałowe, listować zawartość listy oraz wykonać kilka kroków propagacji sygnału. • Ocena realizacji wst˛epnej fazy zadania 2.2 Drugi tydzień • Ocena pierwszej fazy realizacji zadania z poprzedniego laboratorium – ocenie podlega poprawność programu, kompilacja (kompilacja musi przebiegać bez ostrzeżeń), styl pisania programu oraz dokumentacja zrealizowana w systemie doxygen. W tej fazie powinny być zdefiniowane wszystkie bloczki sygnałowe. Program powinien realizować kilka kroków propagacji sygnału dla stworzonego na sztywno łańcucha przykładowych bloczków sygnałowych. 1 • Realizacja nast˛epnej fazy prac nad nowym zadaniem – w ramach tej fazy Należy zrealizować interpretacj˛e opcji wywołania programu w oparciu o bibliotek˛e getopt. Odpowiedni przykład, jako pomoc i podpowiedź, zostanie dostarczony. • Ocena pracy na zaj˛eciach 3 Opis zadania Odbierany sygnał S(t)można przetwarzać poprzez kaskadowe składanie bloczków realizuja˛ cych elementarne operacje takie jak: • pot˛egowanie (S(t) ∗ S(t)), • przesuwanie poziomu (S(t) + ∆s), • wzmocnienie (kS(t)), • prostowanie (|S(t)|), Rt • całkowanie ( 0 S(τ)dτ), • dyskryminacja (1 gdy S(t) > sd i 0 w przypadku przeciwnym, gdzie sd jest progiem dyskryminacji sygnału). Przykład takiego złożenia przedstawiony jest poniżej. Rysunek 1: Przykładowy łańcuch połaczeń ˛ Należy napisać program, który umożliwi tworzenie dowolnie długiego łańcucha wspomnianych wcześniej bloków sygnałowych. Stworzony łańcuch ma realizować przetwarzanie zgodnie z regułami właściwymi dla poszczególnych bloków. Wartości sygnału wejściowego w kolejnych chwilach czasowych czytane sa˛ z pliku. Zapisywane sa˛ one w parach (czas, wartość) w osobnych liniach, np. 0.02 0.04 0.06 3.1 0.0628 0.125 0.187 Problemy do rozwiazania ˛ Bazujac ˛ na wcześniej przedstawionych blokach sygnałowych należy: • zaproponować taka˛ sekwencj˛e bloków, która umożliwi zwi˛ekszenie czterokrotne cz˛estotliwości sygnału sinusoidalnego (wynikowy sygnał także musi być sygnałem sinusoidalnym), • zaproponować taka˛ sekwencj˛e bloków, która umożliwi zwi˛ekszenie czterokrotne cz˛estotliwości sygnału prostokatnego ˛ (wynikowy sygnał także musi być sygnałem prostokat˛ nym). 2 3.2 Wersja podstawowa Zakładamy, że program nie udost˛epnia żadnego interfejsu użytkownika. Sekwencje bloków zadajemy z linii polecenia, np. ./przetworzsygnal -i sygnal_we.syg -o sygnal_wy.syg -G -P 1 -S -C -D 0 gdzie -i sygnal_we.syg — umożliwia podania nazwy pliku, z którego odczytywane sa˛ kolejne wartości wejściowego sygnału, -o sygnal_wy.syg — umożliwia podania nazwy pliku, do którego zapisywane sa˛ kolejne wartości przetworzonego sygnału, -G — powoduje dodanie bloku pot˛egujacego, ˛ -P wartość_przesuni˛ecia — powoduje dodanie bloku pozwalajacego ˛ przesunać ˛ poziom sygnału o zadana˛ wartość, -S — powoduje dodanie bloku prostujacego, ˛ -C — powoduje dodanie bloku całkujacego, ˛ -D próg_dyskryminacji — powoduje dodanie bloku dyskryminujacego ˛ sygnał. Kolejność opcji odpowiadajacych ˛ poszczególnym blokom determinuje kolejność ich łaczenia ˛ (pierwsza opcja od lewej odpowiada pierwszemu blokowi od strony wejścia). Opcje te moga˛ si˛e powtarzać, tak jak powtarzać si˛e moga˛ odpowiadajace ˛ im bloki sygnałowe w strukturze łańcucha wzajemnych połaczeń. ˛ Zapisane sygnał wyjściowy (jak również wejściowy) można obejrzeć wykorzystujac ˛ program gnuplot uruchamiajac ˛ go z linii polecenia zgodnie z instrukcja˛ zawarta˛ we wcześniejszym zadaniu. 3.3 Wymagania szczegółowe 1. Do zdefiniowania własnych bloków sygnałowych oraz ich listy należy użyć biblioteki dostarczonej w zala˛żku. 2. Program musi mieć struktur˛e modułowa.˛ Z definicja˛ każdej klasy powinien być skojarzony osobny moduł. 3. Oprócz wymienionych wymagań obowiazuj ˛ a˛ wcześniejsze wymagania takie jak istnienie dokumentacji, właściwa struktura kartotek itd. 3.4 Wersja rozszerzona (nieobowiazkowa) ˛ W wersji rozszerzonej, jeżeli program zostanie wywołany bez żadnej opcji, to powinien udost˛epniać interfejs dla użytkownika, który pozwoli dodać i usunać ˛ blok w dowolne miejsce łańcucha połaczeń. ˛ Powinien umożliwiać również edycj˛e parametrów bloków (dotyczy bloku przesuwania poziomu i bloku dyskryminujacego). ˛ Bardzo wskazane jest, aby program sam zapewniał wizualizacj˛e otrzymanego sygnału poprzez odpowiednie wywołanie programu gnuplot. 3 3.5 Wersja bardzo rozszerzona (nieobowiazkowa) ˛ W tej wersji zadania konieczne jest realizacja obsługi parametrów wywołania. Programu musi zapewnić wizualizacj˛e sygnału (proponuje si˛e wykorzystanie modułu lacze_do_gnuplota). Ponadto niezb˛edne jest umożliwienia utworzenia dodatkowych bloków: • różniczkujacego ˛ ( dS dt (t)), • sumujacego ˛ (wiele wejść – jedno wyjście → S(t) = ∑ Si (t)). Program powinien umożliwić zamodelowanie struktury przedstawionej na rysunku. Jest to Rysunek 2: Przykład układu regulacji ze sprz˛eżeniem zwrotnym przykład układu regulacji. W układzie tym elementem, który podlega sterowaniu, jest obiekt reprezentowany przez blok całkujacy ˛ (z pogrubiona˛ ramka). ˛ Pozostałe elementy otoczone kropkowana˛ ramka˛ można utożsamić z regulatorem typu PID. Przykład realizacji programu wraz z zaimplementowana˛ siecia˛ połaczeń ˛ znajduje si˛e w udost˛epnionych zasobach do zadania. 4 Materiały pomocnicze Dodatkowe pomocnicze elementy ułatwiajace ˛ rozpocz˛ecie realizacj˛e zadania znaleźć można na serwerze diablo lub panamint w katalogu ˜bk/edu/po/zad/z12. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ podkatalogi i pliki: ˜bk/edu/kpo/zad/z12/. bin.diablo/manipulator bin.panamint/manipulator sygnaly/skok_jednostkowy.syg sygnaly/sinus.syg sygnaly/prostokat.syg przyklad_2D/Makefile przyklad_2D/src/start.cpp przyklad_2D/src/lacze_do_gnuplota.cpp przyklad_2D/inc/lacze_do_gnuplota.hh zalazek 4 bin.diablo/blokisygnalowe, bin.panamint/blokisygnalowe Sa˛ to programy binarne. Stanowia˛ one przykład realizacji programu, w wersji najbardziej rozszerzonej. Zawiera zamodelowana˛ struktur˛e układu regulacji. Wszystkie połaczenia ˛ można dowolnie modyfikować, jak też parametry poszczególnych bloków. Można też dodawać i usuwać bloki. Wspomniany program został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. sygnaly Zawiera pliki z przykładowymi przebiegami przykładowych sygnałów. Sa˛ nimi: skok jednostkowy, sinusoidalny i przebieg prostokatny. ˛ przyklad_2D Katalog zawiera przykład użycia zmodyfikowanej wersji modułu lacze_do_gnuplota pozwalajacego ˛ uruchomić program gnuplot z poziomu własnego programu i nawiazać ˛ z nim komunikacj˛e. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 2D. zalazek Zawiera źródła, które pokazuja˛ wst˛epny sposób skorzystania z dostarczonej biblioteki obiektowej. Zawiera ona zdefiniowana˛ klas˛e bloku sygnałowego oraz klas˛e listy tych bloków. W kartotece tej znajduje si˛e również dokumentacja tej biblioteki. W oparciu o dostarczone definicje klas należy stworzyć własne klasy pochodne, które odpowiednio zmodyfikuja˛ lub dodadza˛ nowe funkcjonalności niezb˛edne do realizacji tego zadania. 5