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