DSP-MATLAB, Ćwiczenie 2, P.Korohoda, KE AGH. Ćwiczenie 2. Przemysław Korohoda, KE, AGH

Podobne dokumenty
Instrukcja do laboratorium z cyfrowego przetwarzania sygnałów. Systemy i wybrane sposoby ich opisu

Instrukcja do laboratorium z cyfrowego przetwarzania sygnałów. Ćwiczenie 3. Transformata Z; blokowe struktury opisujące filtr

Transformata Laplace a to przekształcenie całkowe funkcji f(t) opisane następującym wzorem:

Układy równań i nierówności liniowych

Dyskretne układy liniowe. Funkcja splotu. Równania różnicowe. Transform

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne.

Programowanie celowe #1

Wykład z Technologii Informacyjnych. Piotr Mika

3. FUNKCJA LINIOWA. gdzie ; ół,.

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Politechnika Wrocławska, Wydział Informatyki i Zarządzania. Modelowanie

1 Wprowadzenie do algorytmiki

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Zad. 3: Układ równań liniowych

x 2 = a RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych 2. Proste równania kwadratowe Równanie kwadratowe typu:

Pętle. Dodał Administrator niedziela, 14 marzec :27

Ćwiczenie 4. Filtry o skończonej odpowiedzi impulsowej (SOI)

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

Systemy. Krzysztof Patan

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

1 Układy równań liniowych

VII. Elementy teorii stabilności. Funkcja Lapunowa. 1. Stabilność w sensie Lapunowa.

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

SIMR 2016/2017, Analiza 2, wykład 1, Przestrzeń wektorowa

FUNKCJA LINIOWA - WYKRES

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

LOGIKA I TEORIA ZBIORÓW

Wykład z równań różnicowych

Finanse i Rachunkowość studia niestacjonarne Wprowadzenie do teorii ciągów liczbowych (treść wykładu z 21 grudnia 2014)

5. Rozwiązywanie układów równań liniowych

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Andrzej Leśnicki Laboratorium CPS Ćwiczenie 7 1/7 ĆWICZENIE 7. Splot liniowy i kołowy sygnałów

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Wielomian interpolacyjny Hermite a

FUNKCJE. Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 5 Teoria funkcje cz.1. Definicja funkcji i wiadomości podstawowe

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Metody numeryczne Laboratorium 2

Blockly Kodowanie pomoc.

Ćwiczenie 1. Wprowadzenie do programu Octave

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

13. Równania różniczkowe - portrety fazowe

Zapis algorytmów: schematy blokowe i pseudokod 1

Elementy metod numerycznych - zajęcia 9

Zapisywanie algorytmów w języku programowania

składa się z m + 1 uporządkowanych niemalejąco liczb nieujemnych. Pomiędzy p, n i m zachodzi następująca zależność:

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Algorytm. a programowanie -

KATEDRA INFORMATYKI TECHNICZNEJ. Ćwiczenia laboratoryjne z Logiki Układów Cyfrowych. ćwiczenie 204

Układy równań liniowych

Sposoby modelowania układów dynamicznych. Pytania

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Definicje i przykłady

FUNKCJA LINIOWA - WYKRES. y = ax + b. a i b to współczynniki funkcji, które mają wartości liczbowe

TEORIA OBWODÓW I SYGNAŁÓW LABORATORIUM

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Politechnika Wrocławska, Wydział Informatyki i Zarządzania. Modelowanie

II. Równania autonomiczne. 1. Podstawowe pojęcia.

Rozdział 1 PROGRAMOWANIE LINIOWE

Ćwiczenie 1. Wprowadzenie do programu Octave

Rozdział 1 PROGRAMOWANIE LINIOWE

INSTYTUT CYBERNETYKI TECHNICZNEJ POLITECHNIKI WROCŁAWSKIEJ ZAKŁAD SZTUCZNEJ INTELIGENCJI I AUTOMATÓW

Adam Korzeniewski p Katedra Systemów Multimedialnych

FUNKCJA KWADRATOWA. 1. Definicje i przydatne wzory. lub trójmianem kwadratowym nazywamy funkcję postaci: f(x) = ax 2 + bx + c

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Liczby zespolone. x + 2 = 0.

Programowanie liniowe

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

Programowanie w Turbo Pascal

Podstawy Programowania C++

ZAGADNIENIA PROGRAMOWE I WYMAGANIA EDUKACYJNE DO TESTU PRZYROSTU KOMPETENCJI Z MATEMATYKI DLA UCZNIA KLASY II

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2

Podstawy Automatyki. Wykład 5 - stabilność liniowych układów dynamicznych. dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Wymagania edukacyjne z matematyki klasa II technikum

Jeśli X jest przestrzenią o nieskończonej liczbie elementów:

Laboratorium z automatyki

PRZEWODNIK PO PRZEDMIOCIE

Rekurencja (rekursja)

CHARAKTERYSTYKI CZĘSTOTLIWOŚCIOWE

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

lekcja 8a Gry komputerowe MasterMind

3. Instrukcje warunkowe

5 Wyznaczniki. 5.1 Definicja i podstawowe własności. MIMUW 5. Wyznaczniki 25

Klasa 1 technikum. Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

3. Macierze i Układy Równań Liniowych

b n y k n T s Filtr cyfrowy opisuje się również za pomocą splotu dyskretnego przedstawionego poniżej:

Zadania rachunkowe z termokinetyki w programie Maxima

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 6 AUTOMATYKA

Spacery losowe generowanie realizacji procesu losowego

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

Kształcenie w zakresie podstawowym. Klasa 2

III. Funkcje rzeczywiste

Analiza funkcjonalna 1.

Przetworniki cyfrowo-analogowe C-A CELE ĆWICZEŃ PODSTAWY TEORETYCZNE

Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej

Transkrypt:

Instrukcja do laboratorium z cyfrowego przetwarzania sygnałów Ćwiczenie 2 Systemy i wybrane sposoby ich opisu Przemysław Korohoda, KE, AGH Zawartość instrukcji: 1 Materiał z zakresu DSP 1.1 Klasyfikacja systemów 1.2 Odpowiedź impulsowa 1.3 Splot liniowy 1.4 Równanie różnicowe 1.5 Literatura uzupełniająca 2 Korzystanie z pakietu MATLAB 2.1 M-pliki, funkcje 2.1.1 Informacje ogólne 2.1.2. Funkcje 2.1.3 Polecenia, których umieszczenie w m-pliku może ułatwić pracę 2.2 Elementy języka sterujące wykonaniem programu 2.2.1 Pętla for 2.2.2 Instrukcja warunkowa if 2.3 Zapamiętanie danych w pliku i wczytanie danych z pliku 2.4 Funkcje z zakresu DSP 3 Zadania do wykonania 1

Na instrukcję składają się następujące części: 1 Materiał z zakresu DSP 2 Korzystanie z pakietu MATLAB 3 Zadania do wykonania Do sprawnego wykonania ćwiczenia nie jest konieczna wcześniejsza praktyczna znajomość nie używanych w poprzednich ćwiczeniach funkcji pakietu MATLAB, jednak niezbędna jest dobra orientacja w materiale przedstawionym w częściach 1 oraz 2 tej instrukcji oraz w zagadnieniach będących przedmiotem poprzednich ćwiczeń. Dlatego też wskazane jest dokładne przeczytanie obu wymienionych części instrukcji oraz zanalizowanie podanych przykładów. UWAGA: znajomość i zrozumienie części 1, 2 oraz materiału z poprzednich ćwiczeń mogą zostać przez prowadzącego skontrolowane w trakcie zajęć. W realizacji zadań z części 3 może pomóc ich wcześniejsze przemyślenie. W razie niejasności należy skonsultować się przed zajęciami (tzn. na przykład w terminie konsultacji) z prowadzącym, bezpośrednio lub poprzez e-mail: korohoda@uci.agh.edu.pl 2

1 Materiał z zakresu DSP System cyfrowy przekształca podany na wejście systemu ciąg w ciąg wyjściowy. Oba ciągi określone są na tej samej dziedzinie indeksów, czyli liczb całkowitych. Zatem przez system można rozumieć zarówno jakikolwiek opis zależności ciągu wyjściowego od wejściowego (na przykład równanie), jak i, przykładowo, układ scalony realizujący tę samą operację, gdzie kolejne indeksy odpowiadają taktom zegara. Z punktu widzenia dalszych rozważań nie ma to żadnego znaczenia. Równanie (lub inną formę opisu) należy traktować jako model rzeczywistego układu cyfrowego. Warto jedynie przypomnieć, że jeżeli przyjmiemy, iż precyzja zapisu liczb jest dostatecznie duża by aproksymować nieskończoną precyzję, to system taki powinien być nazywany systemem z czasem dyskretnym (ze względu na całkowite indeksy zastępujące ciągły czas). 1.1 Klasyfikacja systemów Systemy ze względu na strukturę można podzielić na: a) nierekursywne - gdy wartość na wyjściu w danej chwili (czyli dla danego indeksu) jest określona wyłącznie przez wartość lub wartości ciągu wejściowego (niekoniecznie przez wartość wejściową w jednej tylko chwili ); b) rekursywne - gdy wartość na wyjściu w danej chwili jest określona przez wartość lub wartości ciągu wejściowego oraz wartość lub wartości ciągu wyjściowego. Przedstawienie systemu nierekursywnego w postaci rekursywnej jest możliwe zawsze. Natomiast często postaci rekursywnej nie da się przekształcić do nierekursywnej (o skończonym zakresie indeksów określających, które elementy ciągu wejściowego decydują o danej wartości wyjściowej). System wykonujący określoną operację na ciągu wejściowym może być z punktu widzenia jego struktury przedstawiony na nieskończenie wiele sposobów. Zagadnienie to zostanie dokładniej opisane w kontekście równań różnicowych oraz transmitancji z. Rys.1.1 Uproszczony schemat systemu o strukturze: a) nierekursywnej, b) rekursywnej Na rysunku pokazano, iż w chwili określonej przez indeks n na wejście systemu podawana jest odpowiednia wartość ciągu wejściowego, a na wyjściu pojawia się w tej samej chwili pojedyncza wartość ciągu wyjściowego. Warto zaznaczyć, iż system w swojej strukturze może zapamiętywać wartości ciągu wejściowego a także wyjściowego (system rekursywny) dla minionych indeksów, a w przypadku systemu nieprzyczynowego konieczne jest także założenie, iż system dysponuje odpowiednimi wartościami dla przyszłych indeksów (większych od n ). Jeżeli przez S[ ] oznaczy się operację, jaką system wykonuje na ciągu (lub ciągach) podanym w miejsce kropki, to rysunkowi 1.1 może odpowiadać następujący ogólny zapis: a) y[ n] = S[ x[ n] ] (1) b) y[ n] = S x[ n], y[ n] (2) [ ] 3

W ogólnym przypadku ciąg wejściowy określony jest dla indeksów rozpoczynających się w minus nieskończoności. W praktyce często rozważa się jednak oś indeksów począwszy od określonej, skończonej wartości. W takiej sytuacji to, co wydarzyło się w systemie do tej chwili początkowej jest opisywane za pomocą warunków początkowych lub stanu początkowego systemu. Oznaczmy tę dodatkową informację jako s. Wtedy ogólny zapis odpowiedzi systemu wyglądać może następująco: [ ] y[ n] S x[ n], y[ n], s = (3) Problematyka ta będzie jeszcze poruszona przy omawianiu równania różnicowego oraz opisu za pomocą zmiennych stanu. Istnieją różne kryteria klasyfikacji systemów cyfrowych - podobne do kryteriów klasyfikacji systemów analogowych. Na ćwiczeniach skoncentrujemy się na czterech z nich: 1) liniowości, 2) zmienności względem przesunięcia (stacjonarności), 3) stabilności, 4) przyczynowości. 1) System S[ ] jest liniowy, jeżeli dla dowolnych dwóch sygnałów wejściowych oraz wszystkich n posiada dwie cechy: addytywności: [ 1[ ] 2[ ]] [ 1[ ]] [ 2[ ]] S x n + x n = S x n + S x n (4) oraz jednorodności, zwanej też skalowalnością lub homogenicznością, czyli dla dowolnej stałej a : [ ] = a S[ x n ] S a x[ n] [ ] (5) Obie powyższe cechy można zapisać łącznie (dla dwóch dowolnych stałych a 1 oraz a 2 ): [ 1 1 + 2 2 ] = 1 [ 1 ] + 2 [ 2 ] S a x [ n] a x [ n] a S x [ n] a S x [ n] (6) System nie spełniający powyższych warunków jest nieliniowy. 2) System S[ ] jest niezmienny względem przesunięcia (w dziedzinie indeksów czasowych ), jeżeli dla dowolnego całkowitego przesunięcia k zachodzi: [ ] [ ] y[ n] = S x[ n] y[ n + k] = S x[ n + k] (7) System nie spełniający tego warunku jest zmienny względem przesunięcia. System niezmienny względem przesunięcia nazywa się też systemem stacjonarnym. 3) System jest stabilny w sensie BIBO (skrót z j.ang. - Bounded Input Bounded Output, czyli Ograniczone Wejście Ograniczone Wyjście) jeżeli: ( ) ( ) M : < n x n M M : [ ] < n y[ n] M x x y y (8) 4

Powyższy zapis oznacza, że jeżeli żadna wartość wejściowa x[ n] nie przekracza co do modułu pewnej skończonej wartości progowej, to można określić skończoną wartość progową także dla wszystkich modułów wartości wyjściowych y[ n]. System nie spełniający tego warunku jest niestabilny w sensie BIBO. Stabilność można zdefiniować także w inny sposób i dlatego należy zawsze dopilnować, by było oczywiste, w jakim sensie określamy stabilność danego systemu. 4) System jest przyczynowy, jeżeli dla dowolnie wybranego n 0 prawdziwe jest poniższe sformułowanie: ( ) ( ) n n x n = 0 n n y n = 0 [ ] [ ] (9) 0 0 Czyli, gdy wszystkie wartości wejściowe dla wszystkich indeksów mniejszych lub równych n 0 są równe zero, to dla tych indeksów również na wyjściu nie pojawi się żadna wartość różna od zera. Inaczej - pojawienie się na wyjściu wartości niezerowej musi być poprzedzone lub co najwyżej równoczesne (w sensie indeksów czasowych ) z podaniem na wejście co najmniej jednej wartości niezerowej. Istnieją różne równoważne formy zapisu tej samej właściwości. System nie spełniający powyższego postulatu jest nieprzyczynowy. Szczególnym przypadkiem systemu nieprzyczynowego jest system antyprzyczynowy, czyli taki, gdy: ( ) ( ) n< n x n = 0 n n y n = 0 : [ ] : [ ] (10) 0 0 Oznacza to, że odpowiedź systemu może być niezerowa jedynie do chwili pojawienia się pierwszej niezerowej wartości wymuszenia. Przykłady systemów (We wszystkich podanych niżej przykładach przyjmujemy, że < liczb całkowitych) a) system niestabilny w sensie BIBO (akumulator - ang. accumulator): y[ n] = x[ k] n k = b) system zmienny względem przesunięcia (kompresor - ang. compressor): c) system nieprzyczynowy (różnica w przód - ang. forward difference): n < oraz, że k należy do zbioru (11) y[ n] = x[ k n] : k > 1 (12) y[ n] = x[ n + ] x[ n] 1 (13) d) system antyprzyczynowy (odwrócenie osi czasu, a także przesunięcie, gdy k<0): e) system nieliniowy (dodanie stałej na wyjściu): y[ n] = x[ k n] : k 0 (14) 5

y[ n] = x[ n] + 1 (15) Należy przemyśleć podane przykłady tak, by umieć uzasadnić dlaczego stanowią przykłady odpowiednich cech, a także by umieć określić pozostałe trzy cechy (na przykład dla systemu (11), czy jest on liniowy, stacjonarny czy przyczynowy). Warto też umieć podać inne przykłady oraz sklasyfikować inny system. 1.2 Odpowiedź impulsowa W przypadku sygnałów i systemów dyskretnych odpowiedzią impulsową nazywa się odpowiedź danego systemu na podany na wejście ciąg delty Kroneckera. Zazwyczaj odpowiedź impulsową oznacza się literą h, zatem dla systemu S[ ] będzie to: [ ] h[ n] S d[ n] = (16) W przypadku gdy system jest liniowy i niezmienny względem przesunięcia (odtąd będzie mowa wyłącznie o takich systemach), odpowiedź impulsowa opisuje go jednoznacznie (jak to wykazać? - warto powrócić do tego problemu po przeczytaniu rozdz.1.3). Gdy system jest niestabilny (w sensie BIBO), wówczas odpowiedź impulsowa może, ale nie musi, zawierać elementy o modułach rosnących do nieskończoności (sprawdź dla systemu kumulator). Natomiast gdy elementy odpowiedzi impulsowej dążą (w module) do nieskończoności, to system taki jest zawsze niestabilny w sensie BIBO. Systemy (liniowe, niezmienne względem przesunięcia) są stabilne (w sensie BIBO) wtedy i tylko wtedy, gdy suma modułów wszystkich elementów odpowiedzi impulsowej jest mniejsza od nieskończoności: h[ n] < (17) n= Proszę się zastanowić, jakie będą odpowiedzi impulsowe dla systemów podanych w rozdziale 1.1 i co z postaci tych odpowiedzi wynika z punktu widzenia opisanej klasyfikacji systemów. 1.3 Splot liniowy Splot liniowy jest operacją umożliwiającą określenie za pomocą odpowiedzi impulsowej systemu (liniowego, niezmiennego względem przesunięcia) odpowiedzi tego systemu na dowolny sygnał wejściowy. Splot liniowy dwóch ciągów x n 1[ ] oraz x n 2[ ] jest zdefiniowany następująco: y[ n] = x [ k] x [ n k] = x [ n k] x [ k] k = 1 2 1 2 (18) k = Powyższy zapis pokazuje, iż splot liniowy jest operacją przemienną (warto umieć to wykazać). Jest to także operacja liniowa, a nawet dwuliniowa (też warto wiedzieć dlaczego). Symbolem oznaczającym skrótowo zapis sumacyjny (18) jest, zatem (18) można zapisać również jako: y[ n] = x [ n] x [ n] = x [ n] x [ n] 1 2 2 1 (19) Jeżeli jeden z dwóch splatanych ciągów jest odpowiedzią impulsową danego systemu, to wynik splotu jest odpowiedzią systemu na drugi ze splatanych ciągów, pełniący rolę sygnału wejściowego: y[ n] = x[ n] h[ n] (20) Jeżeli dowolne dwa systemy są opisane przez swoje odpowiedzi impulsowe i systemy te zostaną połączone równolegle lub szeregowo, to, dzięki odpowiednim cechom splotu, można w prosty sposób określić odpowiedź impulsową układu zastępczego takiego połączenia. Jako ćwiczenie przygotowujące do 6

zajęć należy dla obu przypadków wyprowadzić zależność odpowiedzi impulsowej układu zastępczego od odpowiedzi impulsowych systemów składowych. Splot sygnału z odpowiedzią impulsową można przedstawić opisowo w sposób następujący. Ciąg odpowiedzi impulsowej należy odwrócić tył na przód i stopniowo przesuwać nad ciągiem sygnału wejściowego. W każdym położeniu wyznacza się iloczyny tych elementów obu ciągów, które znalazły się jeden nad drugim. Zsumowanie tych iloczynów daje wynik splotu dla pojedynczej wartości indeksu sygnału wyjściowego. W praktyce oba ciągi nie rozciągają się w nieskończonym zakresie indeksów (określenie ciągów w skończonym zakresie indeksów oznacza zwykle, że poza nim ciągi te przyjmują wartości zerowe ). Wystarczy zatem wziąć pod uwagę tylko ten zakres położeń ciągu h[ n] nad ciągiem x[ n], dla którego można otrzymać niezerowe wartości ciągu wynikowego. Jeżeli ciąg h[ n] jest określony na długości L h, a ciąg x[ n] na długości L x, to wynik splatania powinien być ciągiem o długości: Ly = Lh + Lx 1 (21) Warto pamiętać, że w określonym zakresie indeksów każdy z ciągów może być również zerowy. Rys.1.2 przedstawia graficznie trzy położenia ( w tym dwa krańcowe ) dwóch ciągów, h[ n] oraz s1[ n], przy wyznaczaniu ich splotu liniowego s [ 2 n ]. Rys.1.2 Przykład wyznaczania splotu liniowego dla ciągów określonych na skończonym zakresie indeksów Należy zwrócić uwagę na wartości indeksów ciągu wynikowego. Zależą one od tego, jak na osi indeksów ułożona jest odpowiedź impulsowa i sygnał wejściowy. W przypadku zignorowania indeksów nie jest możliwe rozróżnienie na przykład odpowiedzi systemu przyczynowego i nieprzyczynowego. Jeżeli zakres 7

indeksów, dla którego określono ciąg x[ n], zaczyna się od n x, natomiast ciąg h[ n] określono poczynając od indeksu n h, to pierwszy element ciągu wynikowego jest określony dla indeksu: ny = nx + nh (22) Pominięcie indeksów spowoduje, że nie będzie możliwe potwierdzenie ważnego efektu, iż splot sygnału z ciągiem delty Kroneckera przesuniętym o k daje w wyniku ten sam sygnał, ale przesunięty właśnie o k : x[ n] d[ n k] = x[ n k] (23) Właściwość tę można (i należy to umieć) łatwo sprawdzić analizując wzór (23) w zapisie sumacyjnym (patrz (18)). Zależność (23) wynika także wprost z wyznaczenia odpowiedzi impulsowej systemu opóźniającego o k indeksów. Ponieważ funkcja conv MATLAB a nie uwzględnia indeksów, więc należy tę ważną niekiedy informację wprowadzić samodzielnie. Jednym ze sposobów jest użycie dodatkowych wektorów o długościach identycznych z wektorami reprezentującymi oba splatane ciągi. Te dodatkowe ciągi powinny mieć wartości zerowe wszędzie poza jednym elementem wskazującym na wybrany indeks (na przykład 0 ). Wykonanie polecenia conv dla tych pomocniczych wektorów da w wyniku wektor z jednym niezerowym elementem wskazującym położenie wybranego indeksu w ciągu wynikowym. Domowe ćwiczenia uzupełniające: 1. Dlaczego liniowość oraz niezmienność względem przesunięcia są warunkami koniecznymi do tego, by odpowiedź impulsowa umożliwiała określenie odpowiedzi systemu na dowolny sygnał wejściowy? Uzasadnienie można oprzeć na przykładach systemów nie spełniających wymaganych założeń. Można jednak przeprowadzić dowód bazujący na następujących wskazówkach: a) splot jest operacją liniową, b) dowolny sygnał można przedstawić jako kombinację liniową przesuniętych delt Kroneckera, c) splot dowolnego ciągu z przesuniętą deltą Kroneckera daje ten sam ciąg, jednak przesunięty tak samo jak jest przesunięta delta. 2. Korzystając z właściwości splotu oraz odpowiedzi impulsowej proszę wykazać, że każdy system ( w tym przypadku liniowy i stacjonarny) można przedstawić jako złożenie systemu przyczynowego i antyprzyczynowego. 1.4 Równanie różnicowe Zależność pomiędzy ciągiem wejściowym i wyjściowym dla danego systemu (liniowego, niezmiennego względem przesunięcia) można opisać za pomocą liniowego równania różnicowego o stałych współczynnikach a k oraz b m, przy czym zakłada się, że a 1 0 : K a y[ n k + 1] = b x[ n m + 1] M k k = 1 m= 1 m (24) W ogólnym przypadku sumowanie po obu stronach może przebiegać po indeksach zmierzających do nieskończoności. Przekształcenie (24) do postaci odpowiadającej wyznaczeniu wartości y[ n], czyli wartości wyjściową w danej chwili, daje: a y[ n] = b x[ n] + b x[ n 1] +... + b x[ n M + 1] 1 1 2 a y[ n 1] a y[ n 2]... a y[ n K + 1] 2 3 M K (25) 8

Współczynnik a 1 przyjmuje się zwykle jako równy 1, co nie ogranicza ogólności wzoru (25), gdyż wymaga jedynie odpowiedniego przeskalowania wszystkich pozostałych współczynników równania. UWAGA: System opisany równaniem (25) nie musi być przyczynowy - przyczynowość może zależeć od założonych warunków początkowych (patrz przykład na końcu podrozdziału). Często jednak przyjmuje się z założenia przyczynowość systemu. W ogólnym przypadku ( ponieważ wartość wyjściowa w danej chwili zależy zarówno od wartości ciągu wejściowego, jak i wyjściowego ) równanie opisuje strukturę rekursywną. Jednak gdy wszystkie współczynniki a k, z wyjątkiem a 1, są zerowe, to równanie (25) opisuje strukturę nierekursywną i jeżeli zakres sumowania jest skończony, to równanie takie odpowiada systemowi o skończonej odpowiedzi impulsowej FIR (skrót z j.ang. - Finite Impulse Response ). Jako ćwiczenie wstępne należy wykazać, że w takim przypadku kolejne elementy odpowiedzi impulsowej są równe kolejnym współczynnikom b k (natomiast dla indeksów mniejszych od zera elementy odpowiedzi impulsowej są równe zero), czyli: h[ k] = (26) Równość (26) zachodzi także, gdy zakres sumowania nie jest skończony, czyli gdy M =. Wtedy jednak odpowiedź impulsowa także nie jest skończona zatem jest to system o nieskończonej odpowiedzi impulsowej IIR ( skrót z j.ang. - Inifinite Impulse Response ). Ponieważ równanie różnicowe o nieskończonym zakresie sumowania ma niewielkie zastosowanie praktyczne, zatem przyjmuje się, że systemu IIR nie da się przedstawić w postaci nierekursywnej. Warto przypomnieć, że system określony jednoznacznie z punktu widzenia realizowanej operacji może być opisany za pomocą nieskończenie wielu równań różnicowych, a w szczególności że każdy opis nierekursywny można przedstawić jako równoważny opis rekursywny ( jednak twierdzenie odwrotne nie jest prawdziwe ). Możliwość wielu wariantów opisu jednego systemu łatwo będzie potwierdzić przy omawianiu transmitancji z. Warunki początkowe równania różnicowego Samo równanie różnicowe nie zawsze jest kompletnym opisem systemu. Odpowiedź systemu wyznaczona z danego równania różnicowego może zależeć od warunków początkowych. Od ich wyboru może zależeć nawet, czy system jest przyczynowy, czy też nie. Jednak termin warunki początkowe posiada nieco inne znaczenie w teorii równań różnicowych, a inne z punktu widzenia implementacji systemów (filtrów) cyfrowych: a) Warunki początkowe dla równania różnicowego (24), to zbiór K 1 przyjętych z założenia wartości ciągu y[ n] dla dowolnych K 1 różnych wartości indeksów. Ponadto zakłada się znajomość ciągu x[ n] dla pełnego zakresu indeksów. Określenie jako zadanych z góry K 1 kolejnych wartości y[ n] gwarantuje znalezienie rozwiązania dla pozostałych elementów ciągu y[ n]. Przyjęcie natomiast jako warunków początkowych dowolnych, ale nie kolejnych K 1 wartości ciągu wyjściowego może - choć nie musi - doprowadzić do sprzeczności. Kompletny ciąg y[ n] można nazwać ogólnym rozwiązaniem równania różnicowego. Rozwiązanie to posiada dwie składowe - rozwiązanie szczególne (zwane też wymuszonym, ponieważ zależy od wymuszenia w postaci ciągu x[ n]) oraz rozwiązanie jednorodne (zwane też swobodnym, ponieważ zależy od K 1 warunków początkowych, a nie zależy od x[ n]). W tym przypadku słowo początkowe nie ma bezpośredniego związku z jakąkolwiek chwilą początkową wynikającą z indeksów czasowych. Przykładowo z warunku początkowego w postaci wartości y[ 10 ] wyznaczane są pozostałe elementy ciągu y[ n] - zarówno dla n < 10, jak i dla n > 10. b) Warunki początkowe dla wyznaczenia odpowiedzi filtru cyfrowego to wartości potrzebne do wyznaczenia fragmentu ciągu wyjściowego y[ n] dla zakresu indeksów czasowych b k 9

rozpoczynającego się od skończonej wartości n 0 (na przykład n 0 = 0 ), w sytuacji gdy ciąg wejściowy x[ n] znany jest również dopiero od chwili n 0. Zakłada się wówczas zwykle, że system jest przyczynowy (dla systemu antyprzyczynowego można przyjąć przeciwny bieg indeksów). Warunki początkowe, w postaci na przykład zmiennych stanu systemu, zawierają niezbędną informację zastępującą brakujące z punktu widzenia równania różnicowego elementy ciągów wejściowego i wyjściowego sprzed chwili początkowej n 0. Określenie warunków początkowych można w tym przypadku porównać do odczytania pamięci systemu. Termin początkowe można zatem zinterpretować bardziej dosłownie, w nawiązaniu do chwili początkowej n 0. Dla filtru opisanego równaniem (24) ilość warunków początkowych w postaci np. zmiennych stanu powinna wynosić: Mówi się, że rząd filtru (systemu) jest równy N IC. Dla M K ( ) N = max IC K 1, M 1 (27) = = 1 system nie zawiera żadnych opóźnień, jest bezpamięciowy, więc warunki początkowe w sensie b) nie są konieczne. Warto zwrócić uwagę, że dla systemu FIR nie ma potrzeby określania warunków początkowych w sensie a), natomiast w sensie b) konieczne one będą zawsze, gdy tylko M > 1. Rozpatrywanie klasy systemów z zerowymi warunkami początkowymi typu b) odpowiada założeniu, że w czasie poprzedzającym analizowanie odpowiedzi systemu sygnał wejściowy był zerowy oraz system posiadał zerowy stan wewnętrzny. Nie jest to założenie abstrakcyjne, gdyż w praktyce łatwo jest je spełnić przez zerowanie odpowiednich buforów. Podsumowując, przy założeniu że: 1) system jest przyczynowy oraz 2) przy zerowych warunkach początkowych w sensie b) dane równanie różnicowe jednoznacznie definiuje system. Dość istotny jest fakt, że określając warunki początkowe dla wymuszenia w postaci ciągu d[ n], wyznacza się jednoznaczny opis systemu w postaci odpowiedzi impulsowej. Odpowiedź impulsowa systemu (liniowego i stacjonarnego) nie zależy od ciągu wejściowego x[ n], natomiast opis tego samego systemu za pomocą równania różnicowego może wymagać dobierania warunków początkowych dla każdego ciągu wejściowego (patrz ćwiczenia uzupełniające do przykładu 1.1 na końcu podrozdziału). Pominięcie dostosowania warunków początkowych do danego ciągu wejściowego może dać w rezultacie system o zupełnie innych właściwościach niż wynikałoby to z wyznaczonej odpowiedzi impulsowej. Przykłady systemów opisanych przez równania różnicowe 1. System przyczynowy lub antyprzyczynowy ( nieszczelny akumulator - ang. leaky accumulator ): y[ n] 0, 5 y[ n 1 ] = x[ n] (28) Wyznaczymy dla tego systemu odpowiedź impulsową dla dwóch różnych warunków początkowych w sensie a): 1.1 y[ 1] = 0 ; x[ n] = d[ n] (czyli x[ n] jest określone dla < n < ) Dla n > 1 równanie (25) przekształca się do postaci: y[ n] = 0, 5 y[ n 1 ] + x[ n] natomiast dla n < 1 do: y[ n] = 2 y[ n + 1] x[ n + 1 ] ( ) 10

Oddalając się z indeksami od punktu n 0 = 1 w obie strony można w sposób rekurencyjny wyznaczyć ciąg y[ n] dla wszystkich < n <. Fragment ciągu wynikowego jest następujący: y[ n] = h [ n] = 1 1, 1 1 1,, dla n =,,, 2 4 8 h1[ n] = 0 dla wszystkich n < 0 { 0 1 2 3 } 1.2 y[ 1] = 0; x[ n] = d[ n] Postępując analogicznie otrzymuje się kompletny ciąg przedstawiono poniżej: y[ n], którego fragment Domowe ćwiczenia uzupełniające: { } { } y[ n] = h2[ n] = 16, 8, 4, 2, 0 dla n = 4, 3, 2, 1, 0 h2[ n] = 0 dla wszystkich n > 0 1. Dla systemu przyczynowego o odpowiedzi impulsowej h[ n] = {,. } dla n = {, } 1 05 0 1 proszę napisać odpowiednie równanie różnicowe oraz określić warunki początkowe w sensie a) w postaci wartości y[ 1 ] przyjmując, że na wejście podany jest: 1) ciąg x1[ n] = u[ n] 2) ciąg x [ n] = u[ n] u[ n ] 2 2 2. System o skończonej odpowiedzi impulsowej ( różnica wstecz - ang. backward difference ): 3. Inny system FIR ( bieżąca średnia - ang. moving average ): y[ n] = x[ n] x[ n 1 ] (29) M 1 y[ n] = M x [ n k + 1] k = 1 (30) 1.5 Literatura uzupełniająca [1] W.Borodziewicz, K.Jaszczak, Cyfrowe przetwarzanie sygnałów - wybrane zagadnienia, WNT, Warszawa, 1987. [2] A.Dąbrowski (pod red.), Przetwarzanie sygnałów przy użyciu procesorów sygnałowych, Wydawnictwo Politechniki Poznańskiej, Poznań, 1998. [3] A.V.Oppenheim, R.W.Schafer, Cyfrowe przetwarzanie sygnałów, Wydawnictwa Komunikacji i Łączności, Warszawa, 1979. [4] A.Papoulis, Obwody i układy, Wydawnictwa Komunikacji i Łączności, Warszawa, 1988. [5] A.Wojtkiewicz, Elementy syntezy filtrów cyfrowych, WNT, Warszawa, 1984. 11

2 Korzystanie z pakietu MATLAB 2.1 M-pliki, funkcje 2.1.1 Informacje ogólne W wielu sytuacjach posługiwanie się pakietem może być znacznie ułatwione przez zapisanie sekwencji komend do pliku lub utworzenie funkcji. Podanie nazwy tego pliku (bez rozszerzenia) spowoduje automatyczne wykonanie całej zapisanej sekwencji lub funkcji. Muszą być jednak spełnione pewne warunki: a) plik jest zapisany w kodzie ASCII, b) nazwa pliku posiada rozszerzenie m, na przykład: funkcja.m, c) katalog, w którym znajduje się ten plik, jest wymieniony w odpowiednim wykazie pakietu MATLAB (wykaz ten jest dostępny w odpowiednim okienku dialogowym lub poprzez komendę path ). Plik zawierający sekwencję komend - a nie funkcję - określany jest jako script. 2.1.2. Funkcje Drugim sposobem wykorzystania m-plików oprócz skryptów jest tworzenie własnych funkcji. Nazwa funkcji musi być zgodna z nazwą pliku (także o rozszerzeniu m ). W pierwszej linii pliku powinno się znajdować słowo kluczowe function, a po nim lista zmiennych wyjściowych, nazwa funkcji i w nawiasie lista zmiennych wejściowych. Wszystkie nazwy zmiennych używane w definicji funkcji są lokalne. Jeżeli pierwsza linia m-pliku o nazwie suma.m jest następująca: function z= suma(x,y) to funkcja ta może być wywołana jako komenda: >> c=suma(a,b) Wywołanie takie może się znaleźć również w definicji innej funkcji. Należy uważać, by nową nazwą funkcji ( lub zmiennej ) nie zasłonić już istniejącej nazwy funkcji (lub zmiennej). Symbol % oznacza, że reszta linii na prawo od niego jest traktowana jako komentarz. Ponadto sekwencja linii rozpoczynających się od tego znaku, a następująca po pierwszej linii m-pliku z funkcją, jest wyświetlana na ekranie w wyniku podania komendy: >> help nazwafunkcji Korzystanie z tej możliwości jest najlepszym sposobem na uniknięcie pomyłki w interpretacji zmiennych wejściowych i wyjściowych oraz umożliwia przypomnienie, co dana funkcja realizuje. Można też dzięki temu wykryć niepożądane zasłonięcie nazwy funkcji lub zmiennej (w przypadku zmiennej komenda help spowoduje wyświetlenie informacji, że takiego m-pliku nie ma). Przykładowa zawartość m-pliku: function z=suma(x,y) % z = suma(x,y) % % dodawanie liczb, wektorow lub macierzy z=x+y; 12

Gdy liczba zmiennych wyjściowych jest większa niż jeden, to lista tych zmiennych umieszczana jest w nawiasach [ ], przykładowo (model systemu antyprzyczynowego): function [y,ty]=anticaus(x,tx); % [y,ty]=anticaus(x,tx); % % x - ciąg wejściowy % tx - indeksy czasowe dla ciągu wejściowego % y - ciąg wyjściowy % ty - indeksy czasowe dla ciągu wyjściowego L=length(tx); ty=[tx(:)-l;tx(:)]; y=zeros(2*l,1); x=x(:); y=[x(l:-1:1);x]; Uwaga: W przypadku, gdy wywołując funkcję nie zaproponujemy zmiennych dla wszystkich zmiennych wynikowych funkcji, to przyporządkowanie zmiennych nastąpi według kolejności na liście w m-pliku (czyli w definicji), np. dla pierwszej linii m-pliku: function [s,r]=plusmin(x,y) oraz przy wywołaniu: >>vector=plusmin(v1,v2); Zmiennej vector zostanie przypisana wartość zmiennej s wyliczonej przez funkcję, natomiast wyliczona zmienna r nie będzie wykorzystana. Pełną zawartość danego m-pliku można wyświetlić na ekranie za pomocą polecenia: >> type nazwa_pliku Nie należy nadużywać możliwości tworzenia funkcji do realizacji prostych zadań, gdyż w takich przypadkach zajmuje to więcej czasu niż podanie sekwencji komend i powoduje trudne do usunięcia zaśmiecenie dysku. 2.1.3 Polecenia, których umieszczenie w m-pliku może bardzo ułatwić pracę Polecenie Opis disp( stała tekstowa ) wypisanie na ekranie podanej stałej tekstowej input( stała tekstowa ) wypisanie na ekranie podanej stałej tekstowej oraz oczekiwanie na wpisanie nowej wartości zmiennej (przydatne w m-plikach) 13

2.2 Elementy języka sterujące wykonaniem programu Tworzenie m-plików zawierających funkcje jest często wskazane, gdy do realizacji danego zadania konieczne jest opracowanie programu zawierającego pętle i elementy decyzyjne. 2.2.1 Pętla for: for i=1:k, sekwencja poleceń; end Warto pamiętać, że zmienna sterująca może przyjmować kolejne wartości pobrane z wektora o dowolnej zawartości, np.: >> n=[-1,6,-3]; >> for i=n, k=i^2; end; 2.2.2 Instrukcja warunkowa if: if warunek sekwencja poleceń; end lub też dwuwariantowo: if warunek sekwencja poleceń; else sekwencja poleceń; end warunek może zawierać jeden z sześciu operatorów porównania: <, >, == (równe), ~= (różne), <=, >=. Na przykład: >> if x~=y x=0; end Instrukcje for oraz if mogą być używane także w postaci komend (patrz powyższe przykłady). Pętla (lub sprawdzenie warunku) nie będzie wtedy realizowana, dopóki nie podamy kompletnego jej opisu - nawet gdy w trakcie jego tworzenia naciśniemy kilkakrotnie klawisz [Enter]. 2.3 Zapamiętanie danych w pliku i wczytanie danych z pliku Zawartość pamięci operacyjnej pakietu - czyli nazwy i wartości zmiennych - może być zapamiętana w pliku i wczytana z pliku. Można także zapamiętać w pliku treść sesji. Poniżej podano zestawienie odpowiednich poleceń. Polecenie save nazwa_pliku save nazwa_pliku zmienne save nazwa_pliku zmienne -ascii load nazwa_pliku load nazwa_pliku -ascii diary nazwa pliku diary on/off Opis zapamiętanie wskazanych danych w pliku o podanej nazwie (tryb ASCII lub matlab, o ile nie podamy opcji -ascii) wczytanie wszystkich danych z pliku o podanej nazwie (tryb ASCII lub matlab, o ile nie podamy opcji -ascii) zapisywanie do pliku wszystkich poleceń i większości rezultatów - on i off włącza i wyłącza zapisywanie 14

2.4 Funkcje z zakresu DSP Polecenie filter( dane wejściowe ) conv( dane wejściowe ) Opis wyznaczanie odpowiedzi systemu opisanego przez równanie różnicowe wyznaczanie splotu liniowego dwóch ciągów (w postaci wektorów) Obie funkcje są podobne - umożliwiają wyznaczenie odpowiedzi stacjonarnego systemu liniowego na podane wymuszenie. Funkcja filter może jednak modelować zarówno system opisany równaniem nierekursywnym, jak i rekursywnym, natomiast instrukcja conv jest przydatna bezpośrednio jedynie dla opisu nierekursywnego. Z kolei funkcja filter wyznacza odpowiedź o długości takiej samej jak długość sygnału wejściowego, podczas gdy wynik funkcji conv ma długość wynikającą z długości sygnału wejściowego i odpowiedzi impulsowej (patrz materiał z zakresu DSP). Ograniczona długość wyniku dla funkcji filter jest rekompensowana przez możliwość wykorzystania warunków początkowych ( w sensie b) ) oraz końcowych - zagadnienie to będzie elementem kolejnego ćwiczenia. W tym ćwiczeniu przyjmuje się założenie o zerowych warunkach początkowych (nie będą więc także analizowane warunki końcowe). Dlatego z funkcji filter należy korzystać w sposób następujący: >>y=filter(b,a,x); gdzie x oraz y to wektory reprezentujące ciągi wejściowy i wyjściowy, natomiast b oraz a to wektory reprezentujące ciągi współczynników równania różnicowego o nazwach zgodnych z oznaczeniami we wzorach (24) i (25) ((UWAGA NA KOLEJNOŚĆ!!!). Naturalnie nie ma konieczności stosowania takich samych nazw - istotna jest kolejność wektorów podanych na liście wejściowej funkcji filter. Ponieważ przyjmuje się, że w równaniu (25) a 1 = 1, więc należy o tym pamiętać przy tworzeniu wektorów opisujących badany filtr. Dla systemu według równania (29) przykładowa sekwencja komend mogłaby wyglądać następująco: >> a29=1; >> b29=[1, -1]; >> d=zeros(1,64); >> d(33)=1; zatem umawiamy się, że 33 pozycji odpowiada indeks 0 >> h29=filter(b29,a29,d); h29 jest odpowiedzią impulsową systemu (29) dla wybranego zakresu indeksów ( jakiego?) Podobne zadanie można także zrealizować za pomocą funkcji conv (system nie jest rekursywny), jednak tym razem musimy założyć znajomość odpowiedzi impulsowej: >> x=rand(1,64); >> y=conv(x,h29); odpowiedź systemu (29) na pseudolosowy ciąg wejściowy Powyższe przykłady nie uwzględniają indeksów - jak zatem należałoby je uzupełnić, by można było przedstawić graficznie odpowiednie ciągi z opisem osi poziomej w postaci indeksów czasowych? W celu uruchomienia generatora liczb pseudolosowych w uzależnieniu od stanu zegara komputera należy podać komendę: >> rand( seed,sum(100*clock)); 15

3 Zadania do wykonania 1. Korzystając z gotowych m-plików zbadać odpowiedź wybranych systemów na odpowiednio dobrane sygnały wejściowe - i w ten sposób potwierdzić przeprowadzoną klasyfikację. 2. Zademonstrować zastosowanie splotu liniowego do wyznaczania odpowiedzi systemu przy uwzględnieniu indeksów czasowych. 3. Potwierdzić za pomocą przykładów opisane cechy splotu liniowego. 4. Potwierdzić za pomocą przykładu, że odpowiedź impulsowa jako kombinacja liniowa poprzesuwanych delt Kroneckera może być użyta do wyznaczenia odpowiedzi systemu (spełniającego odpowiednie warunki) na dowolny sygnał wejściowy. 5. Potwierdzić za pomocą przykładów związek pomiędzy odpowiedzią impulsową i równaniem różnicowym (przy zerowych warunkach początkowych). 6. Zbadać odpowiedzi systemów opisanych przez równania różnicowe oraz odpowiedzi impulsowe na wybrane sygnały wejściowe (według zaleceń prowadzącego). 7. (dodatkowe) Dla nieprzyczynowego systemu FIR opisanego przez odpowiedź impulsową zademonstrować wyznaczenie odpowiedzi systemu na dowolny sygnał wejściowy poprzez rozkład tego systemu na system przyczynowy i antyprzyczynowy. 16