Bloki sygnałowe – propagacja i przetwarzanie sygnałów
Transkrypt
Bloki sygnałowe – propagacja i przetwarzanie sygnałów
Bloki sygnałowe – propagacja i przetwarzanie sygnałów 1 Cel zadania Nabycie praktycznej umiej˛etności konstrukcji klas pochodnych oraz wykorzystania metod wirtualnych. Dalsze utrwalenie umiej˛etności korzystania z szablonów list<> i vektor<>. 2 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), • 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 2.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, • zaproponować taka˛ sekwencj˛e bloków, która umożliwi zwi˛ekszenie czterokrotne cz˛estotliwości sygnału prostokatnego. ˛ 3 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. 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. 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: • wzmacniajacego ˛ (w ∗ S(t)), • różniczkujacego ˛ ( dS dt (t)), • sumujacego ˛ (wiele wejść – jedno wyjście → S(t) = ∑ Si (t)). Rysunek 2: Przykład układu regulacji ze sprz˛eżeniem zwrotnym Program powinien umożliwić zamodelowanie struktury przedstawionej na rysunku. Jest to 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. 6 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/z7. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ podkatalogi i pliki: ˜bk/edu/po/zad/z7/. 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 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.