cyfrowe przetwarzanie sygnałów
Transkrypt
cyfrowe przetwarzanie sygnałów
CYFROWE PRZETWARZANIE SYGNAŁÓW Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 4 Rozwiązania zadań pochodzą z notatek własnych na podstawie zajęć laboratoryjnych z Panem mgr inż. Łukaszem Buczkiem oraz literatury podanej w źródłach. W przypadku ewentualnych błędów proszę zgłaszać poprawki do autora. ([email protected] http://student.agh.edu.pl/~bonesaaa) "Theory is when you know all and nothing works. Practice is when all works and nobody knows why. In this case we have put together theory and practice: nothing works... and nobody knows why!” (anonymous author) 1 GWOLI WSTĘPU Na początek kilka zmian, przede wszystkim wizualnych. Mam nadzieję, że przypadną one Wam do gustu. Nowa czcionka oraz odświeżone logo. Dodatkowo standard już z poprzednich opracowań – gdzie się da, tam zapisuję odpowiedniki anglojęzyczne. Pozdrawiam i życzę powodzenia w zgłębianiu tajników cyfrowego przetwarzania sygnałów (lub być może poprawniej – przetwarzaniu cyfrowych sygnałów, bo z angielska mamy przecież Digital Signal Processing). POPRAWKI: Wersja 1.1 – Str. 47 – poprawiony schemat FFT, dodana lekcja ósma, uzupełniony opis baz Walsha i Haara Wersja 1.2 – rozszerzony artykuł o bazie Walsha, poprawki kosmetyczne Wersja 1.3 – poprawa literówek, poprawione rozwiązanie na str. 81 do DFT 2D, rozszerzony fragment o mnożeniu macierzy, dodany dział o DFT 2D i IDFT oraz rozwiązania z 2 terminu egzaminu 2010, poprawka bazy Walsha w zadaniu 6 (lekcja 11) Wersja 1.4 – poprawione drobne błędy oraz rozwinięte rozwiązanie zadania 2 (egzamin 2010 – termin II) 2 TREŚCI SPIS MATEMATYKA ............................................................................................................................................................................. 6 LICZBY ZESPOLONE (complex numbers) ................................................................................................................................ 6 WZORY EULERA (Euler’s formula) .......................................................................................................................................... 7 MACIERZE (matrix) – mnożenie macierzy ............................................................................................................................. 8 MACIERZE (matrix) – macierz odwrotna (inverted matrix) ................................................................................................. 9 CAŁKOWANIE PRZEZ CZĘŚCI ................................................................................................................................................ 12 MATLAB - WPROWADZENIE ................................................................................................................................................... 13 PODSTAWY ............................................................................................................................................................................. 13 MACIERZE ............................................................................................................................................................................... 14 LICZBY ZESPOLONE w MatLab’ie......................................................................................................................................... 15 PRZYKŁAD WYKORZYSTANIA MatLab................................................................................................................................ 16 PRZYDATNE FUNKCJE ........................................................................................................................................................... 17 PODSTAWOWE SYGNAŁY ........................................................................................................................................................ 19 DELTA DIRACA δ(t)................................................................................................................................................................ 19 SKOK JEDNOSTKOWY 1(t) .................................................................................................................................................... 19 IMPULS PROSTOKĄTNY Π(t) ................................................................................................................................................ 20 ZNAK DZIEDZINY/FUNKCJA ZNAKU sgn(t) ........................................................................................................................ 20 SYGNAŁ WYKŁADNICZY NARASTAJĄCY .............................................................................................................................. 20 SYGNAŁ WYKŁADNICZY MALEJĄCY ..................................................................................................................................... 21 FUNKCJA SINC sinc t .............................................................................................................................................................. 21 FALA PROSTOKĄTNA BIPOLARNA....................................................................................................................................... 22 FALA PROSTOKĄTNA UNIPOLARNA .................................................................................................................................... 22 Podział sygnałów .................................................................................................................................................................. 23 APROKSYMACJA ........................................................................................................................................................................ 23 ORTONORMALNOŚĆ i ORTOGONALNOŚĆ............................................................................................................................. 27 ORTOGONALNOŚĆ (orthogonality) ....................................................................................................................................... 28 ORTONORMALNOŚĆ (orthonormality) ................................................................................................................................. 28 EFEKTY ORTONORMALNOŚCI .............................................................................................................................................. 29 NORMALIZACJA w MatLab’ie................................................................................................................................................ 32 BAZY HAARA i WALSHA........................................................................................................................................................... 33 BAZA HAARA ........................................................................................................................................................................... 33 BAZA WALSHA ........................................................................................................................................................................ 35 FORMUŁY dla MatLab’a ........................................................................................................................................................ 38 SZEREG FOURIER’a ................................................................................................................................................................... 39 TRANSFORMACJA FOURIER’a ................................................................................................................................................. 39 3 WSTĘP ..................................................................................................................................................................................... 39 WŁASNOŚCI TRANSFORMACJI FOURIER’a.......................................................................................................................... 39 PODSTAWOWE TRANSFORMATY ........................................................................................................................................ 39 DFT – Discrete Fourier Transform ........................................................................................................................................ 39 MACIERZ PRZEJŚCIA DLA DFT .............................................................................................................................................. 39 PRÓBKOWANIE i OBLICZENIA w DFT ................................................................................................................................. 42 INTERPRETACJA DYSKRETNEGO WIDMA........................................................................................................................... 44 DFT dla MatLab ..................................................................................................................................................................... 46 DFT dla DWÓCH WYMIARÓW .............................................................................................................................................. 47 IDFT – inverse discrete Fourier transform........................................................................................................................ 48 TRANSFORMACJA Z .................................................................................................................................................................. 49 WSTĘP ..................................................................................................................................................................................... 49 PRZYKŁADY – delta Diraca .................................................................................................................................................... 49 PRZYKŁADY – skok jednostkowy ........................................................................................................................................... 50 FILTRY i TRANSMITANCJA ...................................................................................................................................................... 50 FIR (Finite Impulse Response) ................................................................................................................................................ 50 ZADANIE 1............................................................................................................................................................................... 51 ZADANIE 2............................................................................................................................................................................... 52 ZADANIA ..................................................................................................................................................................................... 54 ZADANIE 1 – dualizm ............................................................................................................................................................. 54 ZADANIE 2 – filtry/transformata Z ........................................................................................................................................ 54 ZADANIE 3 – filtry/FIR ........................................................................................................................................................... 55 ZADANIE 4 – stabilność .......................................................................................................................................................... 55 ZADANIE 5 – transformata Fouriera ..................................................................................................................................... 56 ZADANIE 6 – aproksymacja/baza Walsh’a ........................................................................................................................... 57 ZADANIE 7 – transmitancja/filtry ......................................................................................................................................... 59 ZADANIE 8 – stabilność/filtry ................................................................................................................................................ 59 ZADANIE 9 – własności transformaty Fouriera .................................................................................................................... 60 ZADANIE 10 – FFT .................................................................................................................................................................. 61 ZADANIE 11 – transformata Z ............................................................................................................................................... 62 ZADANIE 12 – transmitancja/filtry ....................................................................................................................................... 63 ZADANIE 13 – filtry ................................................................................................................................................................ 63 MARATON................................................................................................................................................................................... 64 ZADANIE 1 – szereg Fouriera ................................................................................................................................................. 64 ZADANIE 2 – transformata Fourier’a/splot .......................................................................................................................... 67 ZADANIE 3 – transformata Fourier’a .................................................................................................................................... 69 ZADANIE 4 – splot ................................................................................................................................................................... 70 ZADANIE 5 – falki ................................................................................................................................................................... 73 4 ZADANIE 6 – kryterium stabilności........................................................................................................................................ 74 ZADANIE 7 – energia .............................................................................................................................................................. 76 EGZAMIN 2010 – termin I........................................................................................................................................................ 77 ZADANIE 1 – ortogonalność ................................................................................................................................................... 77 ZADANIE 2 – transformata Fouriera ..................................................................................................................................... 78 ZADANIE 3 – DFT 2D .............................................................................................................................................................. 82 ZADANIE 4 – filtry ................................................................................................................................................................... 85 EGZAMIN 2010 – termin II ...................................................................................................................................................... 86 ZADANIE 1 – aproksymacja.................................................................................................................................................... 86 ZADANIE 2 – energia .............................................................................................................................................................. 91 ZADANIE 3 – IDFT................................................................................................................................................................... 92 ZADANIE 4 – filtry ................................................................................................................................................................... 93 5 Głównym problemem przedmiotu jest brak jednoznacznych oznaczeń, w związku z czym będziemy się trzymać symboliki stosowanej przez wykładowcę przedmiotu dla inżynierii biomedycznej, Pana prof. Mariusza Ziółkę. Co do literatury, to polecam „Cyfrowe przetwarzanie sygnałów – od teorii do zastosowań” Tomasza P. Zielińskiego (Wydawnictwo Komunikacji i Łączności) oraz „Teoria sygnałów” panów Jacka Izydorczyka, Grzegorza Płonki i Grzegorza Tymy (wydawnictwo Helion). Dla relaksu można czasem zaglądnąć do „Wprowadzenie do cyfrowego przetwarzania sygnałów” pana Richard’a G. Lyons’a (ponownie WKŁ) oraz skryptu (baaardzo słabo dostępnego) „Funkcje zespolone – szeregi i przekształcenia Fouriera, przekształcenia całkowe Laplace’a, przekształcenia Laurenta (Z)” pana Franciszka Bierskiego (skrypt AGH). No i oczywiście bardzo przydatne bywają notatki oraz slajdy z wykładów. MATEMATYKA LEKCJA WPROWADZAJĄCA Na sam początek trzeba sobie przypomnieć trochę matematyki. W centrum naszego zainteresowania będą macierze (szczególnie potrzebne w MatLabie) oraz liczby zespolone, na których bazują wszystkie transformacje. No i na koniec słowo o tym co lubią wszyscy, czyli całeczkach. LICZBY ZESPOLONE (complex numbers) Z zakresu rachunku liczb zespolonych musimy sobie przypomnieć kilka podstawowych własności, które w dalszych rozważaniach będą kluczowe. Podstawą liczb zespolonych jest jednostka urojona, która spełnia warunek: 1 Elektrotechnicy wolą zamiast i stosować literkę j, co by się z natężeniem prądu nie myliło. Liczby zespolone zapisujemy w formie: gdzie to część rzeczywista (real part), natomiast to część urojona (imaginary part), co możemy zapisać: Należy w tym miejscu podkreślić, iż skróty Re i Im nie pochodzą z angielskiego, lecz francuskiego, od reel i imaginaire. Liczby zespolone można przedstawić graficznie jako współrzędne wektora na płaszczyźnie zespolonej (complex plane - płaszczyzna zwana również płaszczyzną Arganda lub Gaussa). Im z=a+ib b 0 a Re Jak widać, na wykresie mamy bardzo ładny trójkąt, o bokach i oraz przeciwprostokątnej o długości ||, czyli modułu z liczby zespolonej (moduł po angielsku to modulus, magnitude lub też absolute value, od którego jest polecenie abs w MatLab’ie). 6 Im |z| b φ 0 a Re Jak policzyć ten moduł? Najłatwiej zastosować twierdzenie Pitagorasa: || Kolejnym krokiem jest wyjaśnienie, czym jest argument liczby zespolonej – otóż na schemacie został zaznaczony kąt φ (fi), który nazywany jest właśnie argumentem (argument) lub fazą (phase). Liczy się go przy pomocy funkcji cyklometrycznej tangensa (funkcja odwrotna, arcus tangens): arc tan arg W przypadku liczb zespolonych, mamy możliwość zapisu każdej z nich przy pomocy funkcji sinus i cosinus: || || || ||cos sin || || || || Należy tu jeszcze wspomnieć o sprzężeniu (conjugation), w którym znak części urojonej zostaje zamieniony, czyli w najprostszej formie: Czasami stosuje się również zapis z gwiazdką, czyli . Sprzężenie powoduje odbicie liczby zespolonej względem osi OX. Po co to? Czasem się przydaje gdy chcemy pozbyć się z równania części urojonej, ale o tym zapewne będzie mowa trochę dalej. WZORY EULERA (Euler’s formula) Jako, że nie warto zaśmiecać swej pamięci zbędnymi wzorami, warto umieć wyprowadzić pewne zależności. Dowód na poprawność poniższych dwóch zależności pozostawiam jednak Wam: <= cos > sin > ?<= cos > sin > Dzięki tym dwóm równaniom, możemy wyprowadzić postać wykładniczą liczby zespolonej: <= ?<= cos > sin > cos > sin > <= ?<= 2 sin > 7 <= ?<= sin > 2 Teraz cosinus: <= ?<= cos > sin > cos > sin > 2 cos > <= ?<= cos > 2 Co w sumie daje nam: ||cos > sin > <= ?<= <= ?<= <= ?<= <= ?<= 2 <= F || E F || E F || E 2 2 2 2 || <= MACIERZE (matrix) – mnożenie macierzy Podstawą jest umiejętność mnożenia macierzy i ogólne pojęcie jak się macierz odwraca. Macierze możemy ze sobą mnożyć w momencie gdy liczba kolumn pierwszej jest równa liczbie wierszy drugiej macierzy: GH I<J KL GM I JN KL O PQ<N R Preferowanym przeze mnie stylem mnożenia jest schemat Falk’a. Przykładowo: 2 3 H S1 4W 5 1 A 2 -1 5 3 4 1 Q[[ 2 3 3 2 0 Q[ 2 1 3 3 11 Q[\ 2 2 3 1 7 Q[^ 2 0 3 4 12 3 1 2 MX 3 3 1 0 Z 4 B 3 -2 0 -11 13 -1 -3 -11 -11 -8 2 1 7 2 11 0 4 12 16 4 Q[ 1 3 4 2 11 Q 1 1 4 3 11 Q\ 1 2 4 1 2 Q^ 1 0 4 4 16 0 11 O H M S11 11 13 8 7 12 2 16W 11 4 Proszę jednak pamiętać, iż mnożenie macierzy nie jest przemienne! Mnożąc macierz H M otrzymujemy macierz O, ale mnożąc macierz M H otrzymujemy już zupełnie inny wynik! Przykładowo: 1 a b3 1 2 3 2 1b 0 1 1 0 5 c b 0 5 1b 1 5 5 8 1 2 a c b3 2 1 0 1 c a b0 1 3 1 0 1b b0 5 1 1 5 1 0 5 5 1b b3 1 5 5 5 4 25 1b b4 15 5 2 5 2 3 6 2 1b b16 0 1 21 2 10 12 22 22b 10 8 6b 13 MACIERZE (matrix) – macierz odwrotna (inverted matrix) Procedura odwracania macierzy do najprzyjemniejszych nie należy. Macierz odwrotną do macierzy X [ oznaczamy jako a ?[ lub . Obrót macierzy jest potrzebny do wykonania operacji przeciwnej do mnożenia: d ce e ca 1 e a ?[ a Podczas obracania macierzy wykonujemy następujące czynności: a) obliczamy wyznacznik macierzy (determinant), W przypadku macierzy o rozmiarach 2 na 2 i 3 na 3 nie ma raczej większych problemów (reguła Sarrusa). Przykładowo: 3 S1 0 3 1 3 det H b1 0 2 5 2 2b 6 5 6 17 1 0 2 5 2 2W 3 2 0 1 1 5 0 2 2 5 2 0 2 1 3 0 2 1 1 0 2 5 2 2 Używając schematu Sarrusa, przepisujemy dwa górne wiersze na dół macierzy, a następnie rysujemy strzałki jak powyżej. Te, skierowane od lewej do prawej (niebieskie), po przemnożeniu dodajemy do siebie, natomiast od prawej do lewej odejmujemy (czerwone). b) wyliczamy macierz minorów, Macierz minorów jest mało przyjemnym elementem. Wymaga sporo liczenia (dla macierzy 3 na 3 musimy obliczyć 9 macierzy 2 na 2) i łatwo się pomylić. Poniżej przykładowa macierz 3 na 3: I jej macierz minorów: H f S1 > 2 j kg i M If<J K ik ig iM hl 2 M 2 g 3 1 k l > O H k l > O H l l 3 1 O 3W 1 2 3 l k k > g o n H Mn O l k k > gn O H Mn l l l 3 1 2m Przy tworzeniu poszczególnych minorów posługujemy się poniższą zasadą, wykreślając odpowiednie kolumny i wiersze macierzy źródłowej: 9 H f S1 > M 2 g 2 j kg i M If<J K ik ig iM hl 2 O 3W H f S1 > 3 1 2 1 3 k l l k k > g o > n O H Mn H O k l l k k > gn > O H O H Mn l l l l l 3 1 3 1 2m H f S1 > c) wyliczamy macierz dopełnień algebraicznych (cofactor), M 2 g M 2 g O 3W O 3W Macierz dopełnień powstaje przez użycie odpowiedniego wzoru: Pa<N R 1<pN If<J K Gdzie i i k to numer kolumny i wiersza. Stąd wiemy, iż znak wszystkich nieparzystych elementów macierzy będzie zmieniony, np.: a 1<pN H S1 > M 2 g H 1[p[ O 3 W q 1 1p[ > 1\p[ M 1[p 2 1p g 1\p O 1[p\ H M p\ 1 2 1 rS 3 \p\ > g 1 O 3W d) wyliczamy macierz dołączoną (transponowana macierz dopełnień algebraicznych), Podczas transponowania zamieniamy miejscami składniki macierzy w sposób lustrzany względem (umownie nazwijmy) jej środka: t f s SM O 1 u 3 > gW v Proszę zwrócić uwagę, iż pogrubione elementy nie zmieniły swojego położenia. e) mnożymy macierz dołączoną przez odwrotność współczynnika macierzy. f?[ 1 fw det f PRZYKŁAD By zilustrować zastosowanie macierzy odwrotnej, wykonajmy poniższe działanie: 1 e c a P1 2 1 R S 3 2 3 1/3 1 1 W P9 0 5/3 1 2/3 R Teraz problem pojawia się, jeśli chcemy uzyskać odwrotne działanie, czyli: ce Musimy obliczyć macierz odwrotną: 1 e a ?[ a 10 a ?[ 1 aw det a 1 3 1/3 5 2 5 7 70 1 b 0 6 0 3 3 6 15 det a b3 1 3 3 3 3 3 2 0 5/3 1 1 jk 0 5/3k i 3 1/3 If<J K i k k i 0 5/3 i 3 1/3 l h l1 1 Macierz minorów: 3 1 3 1 k k l lo 2 5/3 2 0 5/3 7 2 n 1 1/3 1 3 n S 5 7/3 6 W k k l l 2 5/3 2 0 n 10/3 0 10 1 1/3 1 3 n l l l l 3 1 m 3 1 Macierz dopełnień algebraicznych: Pa<N R 1<pN Macierz transponowana: a Pa<N w Macierz odwrotna: a ?[ 5/3 7 7/3 If<J K S 5 10/3 0 Rs 5/3 5 S 7 7/3 2 6 5/3 5 1 3 aw S 7 7/3 det a 70 2 6 a I teraz ponowne mnożenie: ea ?[ P9 1 g[ 9 g 9 ?[ 10/3 0 W 10 5/70 10/3 3/10 W S 0 6/70 10 1/14 3/14 1/7 3/10 1/10 0 W S 3/35 9/35 3/7 1/14 2/3 R S3/10 3/35 2 6 W 10 3/14 1/10 9/35 15/70 1/10 18/70 1/7 0 W 3/7 1/7 0 W P1 2 1 R 3/7 1 3 2 3 9 3 2 1 1 14 10 3 35 14 10 35 3 1 2 9 27 1 6 1 2 14 10 3 35 14 10 35 1 2 3 9 2 g\ 9 1 0 1 7 3 7 7 7 Wedle definicji, mnożąc macierz X i macierz do niej odwrotną X-1 powinniśmy otrzymać macierz jednostkową: a ?[ a 11 1/14 S3/10 3/35 3/14 1/10 9/35 [[ 1/7 1 3 1/3 1 0 0 W S3 1 1 W S0 1 2 0 5/3 3/7 0 0 1 3 1 1 9 4 1 3 2 1 14 14 7 14 14 14 [\ [ 0 0W 1 1 3 3 00 14 14 1 1 3 1 5 1 9 10 0 14 3 14 7 3 42 42 42 CAŁKOWANIE PRZEZ CZĘŚCI Nie jest to konieczne, aczkolwiek może się kiedy przydać (każdy inżynier winien umieć całkować przez części, a jak wzoru nie pamięta, to go wyprowadzi). Wzór na pochodną dwóch mnożonych funkcji to: Pz> {>R| z>| {> z> {>| Zapiszmy nasz wzór dodatkowo notacją Leibniz’a (osobiście preferuję właśnie ją, aczkolwiek dla ułatwienia będzie w obu). }P{>R }Pz>R }P{>R }Pz>R {> z> }> }> }> }> Odejmując od obu stron z> ~P=R ~= otrzymujemy: Pz> {>R| z> {>| z>| {> }Pz>R }P{>R }P{>R }Pz>R z> {> }> }> }> }> Przecałkujmy teraz obie strony równania: Pz> {>R| z> {>| z>| {> }Pz>R }P{>R }P{>R }Pz>R z> {> }> }> }> }> Ponieważ w przypadku ~= ~= liczymy całkę z pochodnej, stąd wracamy po prostu do naszej funkcji pierwotnej, dzięki czemu otrzymujemy: ~P=R ~P=R z> {> z> {>| z>| {> 12 z> {> z> }P{>R }Pz>R {> }> }> Powstaje jednak pytanie, co się z tym robi? Bardzo ładne wyprowadzenie, ale teraz trzeba jakoś zastosować nasz piękny wzorek. Obliczmy całkę z funkcji: > > ln > Zakładając, że {> ln >, a z> > , otrzymujemy: z> > > > ln > }> 1 z> > \ 3 > {> ln > 1 z> {> z> {>| | {> > 1 1 1 1 1 \ > ln > > \ }> > \ ln > > }> 3 > 3 3 3 1 1 1 1 1 > > \ ln > > \ > ln > > \ 3 3 3 3 9 Dla pewności spróbujmy teraz policzyć pochodną z funkcji pierwotnej a(x): (>) (>) (>) (>)| }P(>)R } 1 \ 1 > ln > > \ }> }> 3 9 } 1 \ 1 } 1 \ 1 1 } 1 > ln > > ln > > \ ln > }> 3 3 }> 3 3 3 }> 3 1 1 1 1 1 1 1 1 3 > \?[ ln > > \ 0 > ln > > > ln > 3 3 3 > 3 3 3 3 (>) > ln > MATLAB - WPROWADZENIE LEKCJA PIERWSZA PODSTAWY Na sam początek dobrze jest zapoznać się nie co z programem, który będzie wałkowany przez najbliższy semestr. Mat z nazwy nie pochodzi tu od matematyki, lecz od matrix, czyli macierz, bowiem wszelakie obliczenia bazują właśnie na macierzach. Darmową alternatywą tego programu jest GNU Octave, który nie posiada wbudowanego interfejsu graficznego (wszystko wklepujemy w dosowe okienko). Program do zdobycia na stronie www.gnu.org/software/octave/download.html (lub po prostu www.octave.org). Jednocześnie mając dostęp do Internetu można skorzystać z Web Interface to Octave dostępnego na stronie http://hara.mimuw.edu.pl/weboctave (serwer bodaj Uniwersytetu Warszawskiego). W zakresie nauki użytkowania programu polecam „Wybrane elementy syntaktyki pakietu Matlab” Pana doktora Przemysława Korohody (katedra elektroniki AGH – plik .doc dostępny na stronie http://galaxy.uci.agh.edu.pl/~ph/TS/). 13 Pierwszą rzeczą jaką chcemy zrobić, to stworzyć wektor > P0 3 1R. W tym celu wpisujemy polecenie x=[0 3 1] oddzielając poszczególne cyfry spacją. Oczywiście można użyć również przecinków – x=[0,3,1]. Gdybyśmy chcieli utworzyć wektor > P0 3,4 1R, to musimy użyć kropki – x=[0 3.4 1]. Chcąc utworzyć macierz 2 na 3 używamy średnika, bądź wciskamy ENTER jako przejście do następnej linii (dopiero zamknięcie klamry jest sygnałem dla MatLab’a, iż macierz ma być w danej postaci). Przykładowo: 1 2 g S3 1W 2 3 Wprowadzimy jako y=[1 2;3 1;2 3] (lub z przecinkami y=[1,2;3,1;2,3]). Wywołanie zdefiniowanej macierzy (bądź funkcji) zachodzi przez wpisanie jej nazwy plus ENTER. Jednocześnie należy wspomnieć, że w programie zapisane są takie stałe jak „i” (bądź „j”), czyli jednostka urojona oraz „pi”, czyli liczba pi. By utworzyć wektor zawierający liczby od 1 do 7 (> P1 2 3 4 5 6 7R) nie musimy wpisywać wszystkich liczb po kolei. Wystarczy, że użyjemy formuły x=[1:7], który wygeneruje ciąg liczb od 1 do 7. Podobnie, chcąc wygenerować wektor z liczbami od 5 do 30, wpisujemy x=[5:30]. Jeśli interesowałoby nas utworzenie ciągu liczb od 1 do 10, ale zawierającego jedynie liczby nieparzyste, to stosujemy formułę x=[1:2:10], dzięki czemu otrzymujemy wektor > P1 3 5 7 9R. Podobny efekt otrzymalibyśmy stosując komendę x=[1:2:9], gdzie 2 w środku to „skok” z jakim generowane są kolejne liczby. Chcąc wygenerować wektor od 0 do 0,8 ze skokiem 0,2, wpisujemy formułę x=[0:0.2:0.8], otrzymując wektor > P0 0,2 0,4 0,6 0,8R. Jednocześnie zawsze można wygenerować wektor z tendencją spadkową, czyli przykładowo > P0,8 0,6 0,4 0,2 0R za pomocą komendy x=[0.8:-0.2:0]. Za pomocą polecenia clear all, kasujemy wszystkie zdefiniowane elementy z pamięci. Oczywiście możemy również kasować pojedyncze funkcje, np. chcąc wykasować funkcję lubieplacki wpisujemy clear lubieplacki. Polecenie help wywołuje okno pomocy, natomiast polecenie clc czyści cały ekran. MACIERZE Z wcześniej utworzonej macierzy zawsze możemy „wyciągać” pewne jej elementy. Przykładowo, utwórzmy macierz d=[1:10]. Chcemy teraz, by g było równe trzeciemu elementowi macierzy d, czyli { 3. By tego dokonać wpisujemy polecenie g=d(1,3), gdzie 1 to numer wiersza, a 3 to numer kolumny. Teraz kolejny przykład – tworzymy macierz 2 na 2 t=[1 2;3 4], a następnie chcemy, by 3 nie wpisując wprost polecenia h=3, lecz wyciągając element z macierzy t. Ponieważ 3 w macierzy t pojawia się w drugim wierszu i pierwszej kolumnie, stąd wpisujemy h=t(2,1). Możliwa jest również późniejsza edycja elementów utworzonej macierzy. Przykładowo, po utworzeniu macierzy d=[1:10], chcemy zamienić szóstkę na zero tworząc macierz } P1 2 3 4 5 0 7 8 9 10R. W tym celu wpisujemy komendę d(1,6)=0, czyli element z pierwszego wiersza i szóstej kolumny ma być elementem równym zero. Podobnie sprawa wygląda z większymi macierzami – na początek tworzymy macierz 3 na 3 poleceniem a=[1 1 1;8 8 7;2 2 2]. Ponieważ jednak okazało się, iż w drugim wierszu mają być trzy 8, musimy zamienić 7 na 8. Możemy tego dokonać wpisując polecenie a(2,3)=8, otrzymując na wyjściu macierz: 1 1 8 8 2 2 1 8 2 Bardzo przydatnym poleceniem okazuje się być end, bowiem nie znając rezultatu wcześniej wykonywanego działania, nowo utworzona macierz „wyciąga” wszystkie wartości aż do końca. Przykładowo wcześniej już wałkowana macierz d=[1:10]. Chcemy z niej wyciągnąć liczby od 5 wzwyż, więc wpisujemy polecenie o=d([5:end]) otrzymując macierz P5 6 7 8 9 10R. 14 Nowe macierze można tworzyć z wcześniej zdefiniowanych. Przykładowo tworzymy macierze b=[5 6 7] oraz c=[7 6 5]. Teraz możemy uzyskać dwa rezultaty – używając przecinka lub średnika. Polecenie z przecinkiem d=[b,c] daje efekt: }5 6 7 7 6 5 Natomiast stosując średnik (czyli przejście do nowego wiersza) d=[b;c] otrzymujemy: } 5 6 7 7 6 5 Teraz postawmy poprzeczkę nieco wyżej. Chcemy otworzyć macierz: z 5 6 6 5 Stosując albo macierz d, albo b i c. Używając macierzy d musimy wpisać polecenie f=d([1:2],[2:3]), natomiast stosując b i c wpisujemy f=[b([1:2]);c([2:3])]. Przy mnożeniu macierzy pojawia się pewna dyskretna różnica. Mianowicie można zastosować mnożenie „z kropeczką”, bądź bez niej. Mnożenie bez kropeczki jest zwykłym mnożeniem macierzy wedle schematu przedstawionego na stronie 7 (MACIERZE – mnożenie macierzy), natomiast mnożenie „z kropką”, to mnożenie każdego elementu odpowiadający mu element drugiej macierzy. Przykład – mamy dwie macierze a=[1 2;3 4] oraz b=[4 5;6 7]. Po wykonaniu operacji a*b otrzymujemy: 16 36 19 43 4 18 10 28 Wedle schematu [[ 1 4 2 6 16, 3 5 4 7 15 28 43. Jednakże wpisując polecenie a.*b otrzymujemy wyniki: Ponieważ mnożone są ze sobą odpowiadające elementy – [[ 1 4 4, [ 2 5 10, [ 3 6 18 i 4 7 28. LICZBY ZESPOLONE w MatLab’ie W przypadku liczb zespolonych pojawiają się następujące polecenia – exp(nazwa) to eksponenta funkcji „nazwa”, czyli liczba Eulera podniesiona do potęgi wyniku funkcji „nazwa”. Moduł liczby zespolonej liczony jest komendą abs(nazwa). Część urojona wyliczana jest poleceniem imag(nazwa), natomiast część rzeczywista poleceniem real(nazwa). Fazę podanej liczby (lub macierzy) oblicza komenda angle(nazwa). Swego czasu na kolokwium pojawiło się zadanie – wyznaczyć moduł, argument, część rzeczywistą i urojoną z J liczby 6 exp 3 oraz podać jak to zrobić w MatLab’ie. Na początek rozpisujemy liczbę do postaci matlabowej a=6*exp(i*pi./6)-3*i, a następnie stosujemy po kolei polecenia – moduł abs(a), argument angle(a), część rzeczywista real(a) i część urojona imag(a). Rozwiązanie pierwszej części zadania to: exp J= cos > sin > √3 1 cos sin 6 6 6 2 2 15 √3 1 6 E F 3 3√3 3 3 3√3 2 2 W konsekwencji okazuje się, iż liczba nie zawiera części urojonej, a argument (faza) jest równy 0 stopni. PRZYKŁAD WYKORZYSTANIA MatLab Na początek wygenerujmy sobie macierz zawierającą przedział od 0 do 2 podzielony na 200 punktów poleceniem x=[0:pi/100:2*pi]. Teraz spróbujmy wyliczyć sinus dla każdego z tych punktów, zawierając wyniki w macierzy y – y=sin(x). W ten oto prosty sposób otrzymaliśmy współrzędne punktów dla naszego wykresu. Teraz jeszcze tylko musimy zastosować polecenie plot(x,y), by otrzymać piękny przebieg. Stosując polecenie plot(x,y,’.’) zmienia się nieco graficzne przedstawienie wykresu, bowiem punkty przestają być połączone ze sobą (pokazane są jedynie pojedyncze punkty tworzące wykres). Spróbujmy teraz przenieść nasze doświadczenie na oś czasu. Najpierw generujemy oś czasu t=[1:1:9], gdzie 1 w środku jest czasem próbkowania 1 (czas próbkowania jest odwrotnością częstotliwości próbkowania równej 1Hz). Rozpiszmy teraz dwie macierze – macierz czasu t oraz macierz sinusoidy y: g 1 2 3 4 √2 √2 1 0 2 2 5 6 7 8 9 √2 √2 √2 1 0 2 2 2 Proszę zwrócić uwagę, iż drugie 0 pojawia się w 8 sekundzie, co oznacza, iż częstotliwość sinusoidy to [ z . Składając wszystko w logiczną całość, otrzymujemy uniwersalny wzór na sinusoidę: g sin2 z Oraz : 1 : z Gdzie jest początkiem przedziału czasu, a jego końcem. Natomiast [ jest skokiem (odstępem) z jakim mają być generowane kolejne elementy macierzy czasu. Przykładowo – w przypadku t=[0:0.0001:0.1] częstotliwość próbkowania to 10 000 Hz, co jest już dość dużą częstotliwością, dzięki której powinniśmy uzyskać precyzyjny wykres. Wraz ze spadającą częstotliwością próbkowania, otrzymujemy coraz mniej precyzyjny wykres sinusoidy (mniej płynne zmiany – bardziej kanciasty i ostry przebieg sygnału). Spróbujmy teraz zmieszać ze sobą dwie sinusoidy – wpisując s1=sin(2*pi*t*50) i s2=sin(2*pi*t*200) otrzymujemy sinusoidę o częstotliwości 50Hz i 200Hz. Teraz sumujemy je w jeden sygnał poleceniem s=s1+s2 i dokonujemy wizualizacji za pomocą komendy plot(t,s). Na koniec wygenerujemy w MatLab’ie sygnał sinc, który opisany jest wzorem Q > = . Pierwszy krok to utworzenie skali czasowej – t=[-20:0.1:20]. Następnie tworzymy sinusoidę s1=sin(t). Później dokonujemy dzielenia s=s1./t (proszę nie zapomnieć o kropce w tym miejscu, która pełni rolę „zabezpieczenia” obliczeń) oraz wizualizacji poleceniem plot(t,s). = 16 PRZYDATNE FUNKCJE Pełniejszy spis funkcji wraz z ich zastosowaniem znajduje się w opracowaniu Pana doktora Korohody. FUNKCJA OPIS quit zakończenie pracy z pakietem Matlab (zamknięcie wszystkich okien pakietu i skasowanie danych) clear usuwanie z pamięci wszystkich zmiennych lub wskazanej zmiennej who wyświetla nazwy wszystkich zmiennych istniejących w pamięci, tzn. stworzonych w trakcie danej sesji lub przywołanych z pliku whos j.w. oraz ponadto pokazuje wymiary każdej ze zmiennych help wyświetla opis podanej funkcji lub słowa kluczowego format zmienia format wyświetlania liczb (najczęściej używane opcje to: short i long) length zwraca ilość elementów wektora (wierszowego lub kolumnowego) size zwraca dwuelementowy wektor (dwie liczby) - liczbę wierszy i liczbę kolumn danej macierzy plot do tworzenia wykresów dwuwymiarowych przy liniowym opisie obu osi - można dobierać sposób wykreślania (linia ciągła, linia przerywana, za pomocą symboli), kolor itd. Operatory arytmetyczne (odnoszą się do macierzy!): OPERATOR OPIS ∗ mnożenie (dla macierzy nie jest przemienne) / dzielenie \ dzielenie lewostronne (ważne w przypadku macierzy) + dodawanie - odejmowanie ^ potęgowanie ‘ transponowanie (UWAGA: w przypadku macierzy zespolonych nie jest to tylko zamiana wierszy i kolumn, ale dodatkowo sprzężenie) .* .^ ./ kropka przed operatorem powoduje wykonanie operacji element po elemencie - mnożenia, potęgowania lub dzielenia inv obrót macierzy Funkcje pozwalające na szybkie tworzenie macierzy i skalarów: FUNKCJA ones OPIS tworzy macierz o zadanych wymiarach wypełnioną samymi jedynkami 17 zeros eye rand tworzy macierz o zadanych wymiarach wypełnioną samymi zerami tworzy macierz o zadanych wymiarach wypełnioną zerami z wyjątkiem przekątnej głównej, wypełnionej jedynkami tworzy macierz o zadanych wymiarach wypełnioną liczbami w przedziale od 0 do 1 wylosowanymi za pomocą generatora liczb pseudolosowych o równomiernym rozkładzie Wybrane funkcje matematyczne: FUNKCJA OPIS sin sinus - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy cos kosinus - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy tan tangens - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy atan arcus tangens - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy (wynik z przedziału od -pi/2 do +pi/2, zgodnie z def. funkcji) log logarytm naturalny - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy exp eksponenta (czyli liczba e do zadanej potęgi) - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy sqrt pierwiastek kwadratowy - kolejno dla każdej wartości macierzy podanej jako parametr wejściowy (zamiast tej funkcji można stosować operator potęgowania: ^(0.5) ) Funkcje do operacji na liczbach zespolonych: FUNKCJA OPIS real część rzeczywista z podanej liczby (lub macierzy) imag część urojona z podanej liczby (lub macierzy) abs moduł z podanej liczby (lub macierzy) angle faza dla podanej liczby (lub macierzy) 18 PODSTAWOWE SYGNAŁY LEKCJA DRUGA DELTA DIRACA δ(t) W Cyfrowym Przetwarzaniu Sygnałów często pojawia się pojęcie delty Diraca (ang. Dirac delta function), inaczej funkcji impulsowej. Jest ono czysto teoretyczne, bowiem sygnał ten w całym czasie swojego trwania jest równy 0, natomiast w czasie równym t=0 sygnał jest równy ∞, co zapisujemy: 0, ¡ ∞, 1 ś¢ £ 0 ¤ ś¢ 0 0 Rys. Delta Kroneckera Należy w tym miejscu podkreślić, iż pole (całka) delty Diraca ma wartość 1, a amplituda to ∞. Oczywiście istnieje pewne przybliżenie delty Diraca w postaci delty (symbolu) Kroneckera (ang. Kronecker delta), której definicja to: 0, <J ¡ 1, ś¢ £ ¤ ś¢ Dla nas delta Kroneckera będzie wyglądała nie co inaczej: 0, () ¡ 1, ś¢ £ 0¤ ś¢ 0 SKOK JEDNOSTKOWY 1(t) Skok jednostkowy (ang. unit step function – stąd czasem oznaczany jako u(t) ) nazywany jest również funkcją skokową Heaviside’a (ang. Heaviside step function), przez co oznacza się ją również jako H lub H(t). () ¡ 0, 1, 1 }¢ ¥ 0¤ }¢ ¦ 0 0 Rys. Skok jednostkowy 19 IMPULS PROSTOKĄTNY Π(t) Impuls prostokątny (rectangular function) inaczej nazywany jest bramką prostokątną i oznaczany za pomocą dużej litery pi § lub skrótu rect. «1, © 1 rect § , ª2 © ¨ 1, 1 2 1 }¢ || ¤ 2 1 }¢ || ¥ 2 }¢ || ¬ 1 1 2 1 2 0 Rys. Impuls prostokątny wyłącznie i ! [ [ Oczywiście nie możemy zapominać, iż dla impulsu prostokątnego granicznymi wartościami NIE SĄ tylko i ZNAK DZIEDZINY/FUNKCJA ZNAKU sgn(t) Z angielska funkcja nazywana jest sign (signum) function. Jej definicja to: 1, sgn 0, 1, 1 0 }¢ ¬ 0 }¢ 0¤ }¢ ¥ 0 1 Rys. Funkcja znaku SYGNAŁ WYKŁADNICZY NARASTAJĄCY Po angielsku exponential growth, opisany równaniem (proszę zwrócić uwagę na obecność skoku jednostkowego w równaniu, który niejako blokuje możliwość istnienia sytuacji, w której x nie jest równy zero dla t<0): > ¡ 1 ?®¯ °, 0, }¢ ¦ 0¤ }¢ ¥ 0 20 1 0 Rys. Sygnał wykładniczy narastający SYGNAŁ WYKŁADNICZY MALEJĄCY Po angielsku exponential decay, opisany równaniem: H ?®¯ , }¢ ¦ 0¤ > ¡ ± ² ¬ 0 0, }¢ ¥ 0 H 0 Rys. Sygnał wykładniczy malejący FUNKCJA SINC sinc t Jest to jedna z najważniejszych funkcji, występująca po angielsku pod podobną nazwą - sinc function. Funkcja pojawia się też czasami jako funkcja interpolująca lub oznaczana jako Sa. sinc sin Korzystając z twierdzenia d’Hospitala, jesteśmy w stanie wyznaczyć jej wartość w zerze: sin cos cos0 lim sinc lim ¸¹ lim 1 ¶· ¶· ¶· 1 1 21 1 0 Rys. Funkcja sinc Rysunek oczywiście jest mocno nieudolny, ale mam nadzieję, iż we właściwy sposób oddaje sens tej funkcji. FALA PROSTOKĄTNA BIPOLARNA Po angielsku bipolar square wave, fala opisana jest wzorem: H, }¢ º »¼, »¼ ½ > H, }¢ º »¼ ½, »¼ ¼¤ 0, }¢ » · ¼, »¼ ½ H > 0 H ½ ¼ Rys. Fala prostokątna bipolarna FALA PROSTOKĄTNA UNIPOLARNA Fala unipolarna (unipolar square wave) od bipolarnej różni się tym, iż amplituda fali unipolarnej nie zawiera wartości ujemnych. > «H, © ª © ¨ ½ ½ }¢ º »¼ , »¼ 2 2 ¤ H ½ , }¢ »¼ ¿ 2 2 0, }¢ pozostałych 22 > H ½ 0 ½ ¼ Rys. Fala prostokątna unipolarna Podział sygnałów Na koniec należy wspomnieć, iż sygnały możemy podzielić ze względu na czas trwania (sygnały okresowe, nieokresowe, impulsowe, nieskończone) i energię (o ograniczonej i nieograniczonej energii). Sygnały impulsowe o ograniczonej energii to np. impuls prostokątny i trójkątny. Sygnały o nieskończonym czasie trwania i ograniczonej energii to przykładowo sygnał wykładniczy malejący oraz sinc. Przebiegi nieokresowe o ograniczonej mocy średniej to między innymi skok jednostkowy, funkcja znaku oraz sygnał wykładniczy narastający. Z przebiegów okresowych warto wymienić sygnał sinusoidalny oraz falę prostokątną (bipolarną i unipolarną). APROKSYMACJA LEKCJA TRZECIA Pod pojęciem aproksymacji (ang. approximation) kryje się działanie zmierzające do przybliżenia pewnego sygnału za pomocą kilku innych dostępnych sygnałów, wyznaczając jedynie odpowiednie współczynniki. Dzięki takiemu procesowi, możemy uzyskać efekt kompresji. By lepiej zrozumieć problem, spróbujmy przybliżyć sygnał za pomocą funkcji [ , i \ . ¡ , 1, }¢ 0 ¥ À 1¤ }¢ 1 ¥ À 2 1 0 1 1 Rys. Aproksymowany sygnał s(t) Funkcje jakie wykorzystamy do aproksymacji to: 23 [ 1 \ Poniżej znajduje się bodaj wzór na błąd jaki uzyskujemy podczas aproksymacji (podniesienie do kwadratu różnicy pozwala na zminimalizowanie małych błędów i uwidocznienie dużych). Reasumując, dążymy do jak najmniejszego Â:  à , ̃ ̃ } Gdzie to nasz sygnał , natomiast ̃ to przebieg przybliżony występujący w formie: ̃ [ [ \ \ [ \ Otrzymujemy przez to funkcję wielu zmiennych Â[ , , \ . Musimy teraz znaleźć takie wartości współczynników [ , i \ , by błąd był jak najmniejszy. W jaki sposób? Otóż użyjemy pochodnej cząstkowej, przyrównując ją do zera (pochodna jest nieskończenie małą zmianą – nam chodzi o znalezienie tak małej zmiany, by była jak najbliższa zeru): [ Åà , ̃ 0 Å[ Â[ , , \ [ \ } 1 [ \ } [ A więc zabieramy się do liczenia pochodnych: [ Åà , ̃ P [ \ R } P1 [ \ R| } 0 Å[ [ Ponieważ mamy tutaj zarówno funkcję zewnętrzną, jak i wewnętrzną, stąd najpierw policzmy pochodną funkcji wewnętrznej po [ : Å [ \ 0 1 0 0 1 Å[ Teraz policzmy pochodną funkcji zewnętrznej, od razu łącząc ją z powyżej obliczoną funkcją wewnętrzną: Å [ \ 2 [ \ 1 2 [ \ Å[ Dzięki czemu otrzymujemy: [ Åà , ̃ 2 [ \ } 2 1 [ \ } Å[ [ Reasumując, (dla tych, którzy nie pamiętają jak się liczyło tego typu pochodną) całość obliczeń można zapisać w następujący sposób: Å Å [ \ 2 [ \ [ \ Å[ Å[ 24 Na niebiesko oznaczona jest pochodna funkcji zewnętrznej, natomiast na czerwono, pochodna funkcji wewnętrznej. Nie tracąc jednak czasu przechodzimy dalej – czas obliczyć całki oznaczone: [ Åà , ̃ ) 2 ( [ \ ) } 2 (1 [ \ ) } Å[ [ 1 2 Åà ( , ̃ ) 1 1 1 1 1 2 \ [ \ \ 2 [ \ \ Å[ 3 2 3 2 3 0 1 Ze względu na deficyt miejsca, rozbijemy tutaj rozwiązanie na dwie części (następne pochodne będą jednak rozwiązywane mniej dokładnie): 1 1 1 1 1 1 1 1 1 1 \ \ H [ \ 1\ [ 1 1 \ 1\ 0 [ \ 2 3 3 2 3 3 2 3 3 0 2 1 1 1 1 1 1 \ M [ \ 2 [ 2 2 \ 2\ 1 [ \ 2 3 2 3 2 3 1 8 1 1 3 7 M 2 2[ 2 \ 1 [ \ 1 [ \ 3 2 3 2 3 Åà ( , ̃ ) 1 1 1 3 7 2 [ \ 2 1 [ \ Å[ 3 2 3 2 3 2 2 14 8 16 Åà ( , ̃ ) 2[ \ 2 2[ 3 \ 4[ 4 \ 0 Å[ 3 3 3 3 3 8 16 4[ 4 0 3 3 \ 4[ 4 16 8 \ 3 3 4 2 [ \ 3 3 Udało nam się wyliczyć pierwsze z trzech równań. Teraz czas na kolejne: [ Åà ( , ̃ ) P( [ \ ) R } P(1 [ \ ) R| } 0 Å [ Jednocześnie w tym miejscu zaznaczam, iż pochodna funkcji wewnętrznej to: Å Å ( [ \ ) 0 0 ( ) 0 Å Å Wracając jednak do zadania: 25 [ Åà , ̃ ) P2 ( [ \ ) ()R } P2 (1 [ \ ) ()R } Å [ [ Åà ( , ̃ ) 2 q( \ [ \ \ ) } ( [ \ \ ) }r Å [ 1 2 Åà ( , ̃ ) 1 1 1 1 1 1 1 1 2 S ^ [ \ \ ^ [ \ \ ^ W 4 2 3 4 2 2 3 4 Å 0 1 Åà ( , ̃ ) 1 1 1 1 8 1 1 1 1 2 [ \ 2 2[ 4\ [ \ Å 4 2 3 4 3 2 2 3 4 Åà ( , ̃ ) 1 8 1 7 8 2 2 2[ 4\ 2 2[ 4\ 0 Å 4 3 2 4 3 8 7 2[ 4\ 0 3 4 8 7 2[ 4\ 3 4 Teraz ostatnia z pochodnych, liczona względem współczynnika a3: [ Åà ( , ̃ ) P( [ \ ) R } P(1 [ \ ) R| } 0 Å\ [ [ Åà ( , ̃ ) 2 q ( [ \ ) } (1 [ \ ) }r Å [ [ Åà ( , ̃ ) 2 q( ^ [ \ \ ^ ) } ( [ \ \ ^ ) }r Å [ 1 2 Åà ( , ̃ ) 1 1 1 1 1 1 1 1 2 S Æ [ \ ^ \ Æ \ [ \ ^ \ Æ W Å 5 3 4 5 3 3 4 5 0 1 Åà ( , ̃ ) 1 8 8 32 1 2 [ 4 \ 0 Å 5 3 3 5 3 8 32 38 [ 4 \ 3 5 15 4 16 19 [ 2 \ 3 5 15 Teraz, mając wszystkie trzy równania, musimy wyliczyć współczynniki. Można tego dokonać macierzowo: 2/3 1 1 4/3 [ 8/3 4 W S W S 7/4 W S 2 19/15 4/3 2 16/5 \ 26 Bez względu na metodę, otrzymujemy wynik: [ 0,25 1,5 Dzięki czemu wiemy, iż aproksymacja będzie miała formę: \ 0,4375 1 3 7 ̃ [ \ 4 2 16 Na koniec otrzymujemy taki oto wykres przedstawiający na niebiesko sygnał, a na zielono jego aproksymację (wykresy wykonane na stronie http://rechneronline.de/function-graphs/). ORTONORMALNOŚĆ i ORTOGONALNOŚĆ LEKCJA CZWARTA Cytując za wikipedią: Ortogonalność (z gr. ortho – proste, gonia – kąt) – uogólnienie pojęcia prostopadłości znanego z geometrii euklidesowej na przestrzenie z określonym iloczynem skalarnym (przestrzenie unitarne). Ortonormalność – ortogonalność wraz z dodanym warunkiem unormowania, tzn. wymagania, aby elementy ortogonalne miały długość jednostkową (były wersorami). Jest to podstawowa własność wektorów bazy ortonormalnej danej przestrzeni unitarnej. 27 ORTOGONALNOŚĆ (orthogonality) Teraz musimy wywnioskować cóż nam po tym, że coś jest ortonormalne, czyli ortogonalne. Na początek potrzebujemy dwóch dowolnych wektorów: a P0 , 2 , 3 , 8R c P1 , 2 , 4 , 1R Wedle definicji, dwa wektory są do siebie ortogonalne jeśli: ¥ > , g ¬ 0 No tak… bardzo ładna definicja, lecz cóż z nią począć? Otóż powyższe równanie mówi nam, iż iloczyn skalarny (dot product) dwóch wektorów ma być równy 0, czyli: a Ç c P0 , 2 , 3 , 8R Ç P1 , 2 , 4 , 1R 0 1 2 (2) 3 4 (8) 1 0 4 12 8 0 W iloczynie skalarnym dwóch wektorów, mnożymy każdy element z odpowiadającym mu elementem w drugim wektorze, a następnie wyniki dodajemy do siebie. Można to zapisać z sumą jako: É ¥ > , g ¬ È >()g() ÊË[ gdzie Ì to liczba elementów wektora (np. dla wektora a, Ì 4). Skoro już wiemy jak sprawdzić ortogonalność wektorów (ich prostopadłość), ponownie odwołamy się do wikipedii, przytaczając jeden z przykładów (http://en.wikipedia.org/wiki/Orthogonality#Examples): „The vectors H P1 , 3 , 2R are orthogonal to each other, since M P3 , 1 , 0R 1 5 O ,1 , 3 3 H Ç M 1 3 3 (1) 2 0 0 5 1 M Ç O 3 (1) 1 0 0 3 3 1 5 H Ç O 1 3 1 2 0 3 3 Observe also that the dot product of the vectors with themselves are the norms of those vectors, so to check for orthogonality, we need only check the dot product with every other vector.” ORTONORMALNOŚĆ (orthonormality) Jak zostało to odnotowane wcześniej, wektory, które są do siebie ortonormalne, są zarówno prostopadłe (ortogonalne) jak i unormowane. Definicja unormowania jest następująca: ¥ > , > ¬ 1 Co oznacza, iż oba nasze wcześniejsze wektory (X i Y) nie są wektorami unormowanymi, bowiem: a Ç a P0 , 2 , 3 , 8R Ç P0 , 2 , 3 , 8R 0 4 9 64 77 c Ç c P1 , 2 , 4 , 1R Ç P1 , 2 , 4 , 1R 1 4 16 1 22 28 Istnieje jednak proces pozwalający na normalizację wektora (unormowanie wektora) używając następującego wzoru: > > Í>Í √¥ > , > ¬ gdzie Í>Í to tzw. norma. Spróbujmy znormalizować wektor D: Î P0 , 4 , 2 , 4R ¥ Î , Î ¬ 0 4 4 2 2 (4) (4) 16 4 16 36 Ï ÍÎÍ ¥ Î , Î ¬ √36 6 P0 , 4 , 2 , 4R 4 2 4 2 1 2 Î 0 , , , 0 , , , ÍÎÍ 6 6 6 6 3 3 3 2 2 1 1 2 2 4 1 4 9 ¥ Ï , Ï ¬ 0 1 3 3 3 3 3 3 9 9 9 9 gdzie wektor E jest unormowanym wektorem D. Reasumując, warunek ortonormalności można zapisać w sposób następujący: ¥ > , g ¬ ¡ Co jest niczym innym jak deltą Kroneckera. 0, 1, > £ g¤ >g EFEKTY ORTONORMALNOŚCI Na koniec pozostaje pytanie, po co nam ortonormalne wektory? Składając kilka wektorów w macierz, otrzymujemy bazę. Stwórzmy przykładową bazę z wektorów: H P4 2R aX Wektory są do siebie ortogonalne: Wykonajmy teraz mnożenie: M P2 4 2 Z 2 4 4R ¥ H , M ¬ 4 2 2 (4) 0 c P3 1R 4 2 e c a P3 1 R X Z P14 2 4 2R Teraz problem pojawia się, jeśli chcemy uzyskać odwrotne działanie, czyli: ce 1 e a ?[ a 29 Bowiem wymaga od nas wielu obliczeń prowadzących do obrócenia macierzy X. Oczywiście w MatLabie załatwiamy wszystko jednym poleceniem inv(X), lecz mając dostępną jedynie kartkę musimy przejść przez wszystkie trudy obracania macierzy: Macierz minorów: 4 det a l 2 Macierz dopełnień algebraicznych: Macierz transponowana: a ?[ 1 aw det a 2 l 4 4 2 2 16 4 20 4 If<J K X 4 2 Z 2 4 Pa<N R 1<pN If<J K X4 2Z 2 4 a w Pa<N Rs X Macierz odwrotna: a ?[ I teraz ponowne mnożenie: 4 2 Z 2 4 1 1 0,2 0,1 4 2 a w X ZX Z 0,1 0,2 2 4 det a 20 0,2 0,1 c e a ?[ P14 2 R X Z P3 1 R 0,1 0,2 g[ 14 0,2 2 0,1 2,8 0,2 3 g 14 0,1 2 0,2 1,4 0,4 1 Pytanie – czy da się szybciej? Owszem. Lecz macierz przejścia musi być ortonormalna. Wiemy, że oba wektory są ortogonalne, lecz czy są unormowane? ¥ H , H ¬ 16 4 20 ¥ M , M ¬ 4 16 20 Znormalizujmy wektory: Î P4 2R P4 2R 2 1 H ÍHÍ 2√5 √5 √5 √20 Ï P2 4R 1 2 M ÍMÍ √5 √5 √20 Po unormowaniu możemy jeszcze sprawdzić ponownie ortogonalność: ¥ Î , Ï ¬ 2 1 √5 √5 1 √5 2 0 √5 30 Reasumując otrzymaliśmy dość dziwną bazę: 2 1 j o √5 √5 i n a 1 2 i n h√5 √5m Spróbujmy teraz obrócić macierz unormowaną: 2 1 a ?[ 1 aw det a √5 Ð 2 2 1 1 4 1 1 2 Ð √5 5 5 √5 √5 √5 √5 √5 det a ÐÐ√5 1 Macierz minorów: Macierz dopełnień algebraicznych: 2 1 j o √5 √5 i n If<J K 2n i 1 h √5 √5m 2 1 j o √5n Pa<N R 1<pN If<J K i √5 1 2 i n h √5 √5 m Macierz transponowana: 2 1 j o √5n a w Pa<N Rs i √5 1 2 i n h √5 √5 m Macierz odwrotna: a ?[ 2 1 2 1 j o o j 1 1 √5 √5 √5 √5 w ni n a i 2 n i1 2n det a 1 i 1 h √5 √5 m h√5 √5m Jaki otrzymujemy wniosek? Iż macierz ortonormalna po obróceniu jest taka sama: a 1 a Proszę zwrócić uwagę, iż bez obracania macierzy, wciąż otrzymujemy te same wyniki: 31 2 1 j o 2 1 1 1 2 7 1 √5 √5 n 3 3 c a P3 1R i P14 √5 √5 √5 √5 √5 √5 √20 i1 2n h√5 √5m 7 e a √5 2 1 j o 1 7 2 1 1 7 1 1 2 15 √5 √5 n i 5 √5 i 1 2 n √5 √5 √5 √5 √5 √5 √5 √5 h√5 m √5 2R 5 P3 5 1R Do wykazania tej prawidłowości użyta została macierz 2 na 2, bowiem obracanie macierzy 3 na 3 to bardzo nieprzyjemna rzecz, biorąc pod uwagę, że jeszcze później trzeba ją znormalizować… Ale jeśli ktoś ma chęci i nerwy, to zapraszam do zabawy! :) NORMALIZACJA w MatLab’ie Podczas jednego z kolokwiów pojawiło się zadanie – opisz jak znormalizować wektor ortogonalny wraz instrukcją do MatLab’a. W tym miejscu pojawi się rozwiązanie od razu dla całej bazy będącej macierzą 8 na 8 (przykładowo – pierwsze 8 funkcji Haara, które są w stosunku do siebie ortogonalne, lecz nie ortonormalne). 1. Baza Haara jest ortogonalna (¥ Ê ; Ò ¬ 0), lecz nie jest ortonormalna ((¥ Ê ; Ê ¬£ 1 lub ÍÊ Í £ 1. Zakładamy, iż baza została zdefiniowana w MatLabie pod nazwą haar. 2. Normalizacji dokonujemy przez obliczenie iloczynu skalarnego każdego z wektorów bezy według wzoru: É 1 ¥ Ó< ; Ó< ¬ È Ó< Ó< Ì <Ë[ Co w MatLabie zapisujemy skalar=dot(haar(:,1),haar(:,1)./8 lub by otrzymać pełen zakres skalar=dot(haar(:,:),haar(:,:)./8. 3. Następnie dzielimy każdy z wektorów przez pierwiastek z iloczynu skalarnego wedle wzoru: Ô< Ó< ¥ Ó< ; Ó< ¬ W MatLabie możemy wykonać ten krok na 2 sposoby: a) tworzymy z macierzy skalar macierz 8 na 8 przez trzykrotne powtórzenie polecenia skalar=[skalar;skalar] b) używamy jednego polecenia skalar=(ones(1,8)’)*skalar. Następny krok jest już wspólny – bazę Haara normalizujemy formułą haar=haar./(sqrt(skalar)). Zawsze na koniec można dokonać jeszcze sprawdzenia normalizacji poleceniem dot(haar(:,:),haar(:,:)./8, co powinno dać nam wynik 1 1 1 1 1 1 1 1. Jednocześnie można wykazać ortogonalność bazy stosując komendę dot(haar(:,:),haar(:,[8:-1:1])./8 (aczkolwiek polecenie to nie sprawdza wszystkich możliwych kombinacji, a jedynie pierwszy z ostatnim, drugi z siódmym, etc.). 32 BAZY HAARA i WALSHA LEKCJA PIĄTA BAZA HAARA Definicja funkcji Haara pochodzi ze strony http://mathworld.wolfram.com/HaarFunction.html. Opisane są one następującym wzorem: 1 2 ¤ 1 À¥1 2 ± « 1, © 0À¥ ª1, © ¨ 0, JN () G2J »L gdzie jest liczbą nieujemną, natomiast » należy do przedziału 0 À » À 2J 1. Obliczmy pierwsze 8 funkcji Haara stosując powyższy wzór: funkcja interpretacja graficzna ÕÖ,Ö (×) Õ(uÖ × Ö) Õ(×) Õ(×) « °, © ª°, © ¨ Ö, 0À¥ ° u ¤ ° À×¥1 u ØÙÚv×Û Õ°,Ö (×) Õ(u° × Ö) Õ(u×) Õ(u×) « °, © ª°, © ¨ Ö, ° Ü ° °¤ À×¥ Ü u ØÙÚv×Û 0À¥ Õ°,° (×) Õ(u× °) Õ(u× °) « °, © ª°, © ¨ Ö, ° Ý À×¥ u Ü ¤ Ý À×¥1 Ü ØÙÚv×Û Õu,Ö (×) Õ(Ü×) Õ(Ü×) « °, © ª°, © ¨ Ö, ° Þ °¤ ° À×¥ Þ Ü ØÙÚv×Û 0À¥ 1 1 t 0 -1 1 1 t 1 t 0 -1 1 0 -1 1 1 t 0 -1 33 Õu,° × ÕÜ× ° ÕÜ× ° « °, © ª°, © ¨ Ö, ° Ý À×¥ Ü Þ Ý °¤ À×¥ Þ u ØÙÚv×Û 1 1 0 -1 Õu,u (×) Õ(Ü× u) Õ(Ü× u) « °, © ª°, © ¨ Ö, ° ß À×¥ u Þ ß Ý¤ À×¥ Þ Ü ØÙÚv×Û 1 Õ(Ü× Ý) ª°, © ¨ Ö, 1 t 1 t 0 -1 Õu,Ý (×) Õ(Ü× Ý) « °, © t Ý à À×¥ Ü Þ ¤ à À×¥1 Þ ØÙÚv×Û 1 0 -1 Oczywiście, wszystko to można zawrzeć w jednej macierzy, w postaci 8 wektorów połączonych w jedną bazę (należy w tym miejscu nadmienić, iż pierwsza funkcja Haara jest równa 1 w całym przedziale t od 0 do 1): 1 j1 i1 i 1 i i1 i1 i1 h1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0o 0 0 1 0 0n n 0 0 1 0 0n 1 0 0 1 0n 1 0 0 1 0 n 1 0 0 0 1n 1 0 0 0 1m Powyższa macierz zwana jest macierzą przejścia. Przykładowo – mamy pewien sygnał w bazie Haara: ><Ê P6 2 1 1Rs I chcemy powrócić do bazy kanonicznej. Indeks T przy nawiasie macierzy oznacza, iż ma być ona transponowana (nie jest ona pozioma, lecz pionowa). W tym celu musimy przemnożyć macierz przejścia, przez sygnał: >á⯠1 1 1 0 6 9 1 1 1 0 7 2 ã äã äã ä 1 1 0 1 5 1 1 1 0 1 1 3 Mnożenie macierzy przejścia i sygnału wejściowego jest bardzo proste, ponieważ macierz przejścia zawiera jedynie jedynki i zera (np. >áâ¯([,[) 1 6 1 2 1 1 0 1 9) co mocno ułatwia sprawę, aczkolwiek 34 problem pojawia się gdy chcemy przejść z bazy kanonicznej do bazy Haara. Można tego dokonać pewnym prostym schematem. Na początek jednak spróbujmy przekonwertować nieco dłuższy sygnał: á⯠<Ê P3 6 2 1 j1 i1 i 1 i i1 i1 i1 h1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1 1 0 1 5 7 3 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 8 Rs 3 18 0 0 o j o j 6 4 o 0 0 0 0 n i2n i 10 n n i n i n 0 0 n i5n i 4 n 1 0 n i7n i 3 n 1 0 n i3n i 1 n 0 1 n i1n i 0 n 0 1m h8m h16m Wiemy w tym miejscu, iż z macierzy P18 4 10 4 3 1 0 16Rs w bazie Haara powinniśmy dostać <Ê P3 6 2 5 7 3 1 8Rs w bazie kanonicznej. Metoda z zastosowaniem schematu polega na uśrednianiu parami kolejnych wartości występujących w sygnale: 18 °ÞpÜ u 11 4 10 °°pà u [p^ 9 7 4 3 \p[ åp?Ý u 2 1 0 p? 3 –16 p?[ –3 –8 Teraz należy znaleźć różnice między poszczególnymi krokami, np. między 11 4 7, 8 16 8, co zapisujemy: 18 4 11 10 7 4 7 9 3 3 1 2 2 0 1 –8 –3 3 –16 8 5 6 Pierwszym elementem macierzy w bazie Haara jest wynik ostatniego uśredniania, czyli 3. Następnie odczytujemy po kolei od dołu do góry, od prawej do lewej poszczególne cyfry (wyniki różnic). Dla ostatniego wiersza tabeli jest to 6, dla środkowego 2 i 5, natomiast dla pierwszego to 7, 3, 1 i 8. Jak widać, wynik doskonale zgadza się z wcześniejszymi założeniami dla <Ê P3 6 2 5 7 3 1 8Rs . æp?\ BAZA WALSHA Opis funkcji Walsha wzorem matematycznym nie jest najprostszy. Na początek potrzebujemy funkcji podstawowej w postaci: 35 ç[ () ¡ ç 1, ç (2), ç (2 1), Co możemy graficznie zinterpretować: 1 0 0,5 }¢ 0 À À 1 0 ¥ ¥ 0,5¤ 1, ¡ 1, 0,5 ¥ ¥ 1 1 Ô 1 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 0 0,5 1 Ô[ -1 -1 Ze względu na iteracyjny charakter funkcji Walsha, kolejne funkcje będą generowane za pomocą funkcji poprzednich: (H), (M), çèp[,Ò?[ () é çèp[,Ò () é Gdzie Kolejne funkcje numeruje się według wzoru: (1)Ò çè,Ò (2), çè,Ò (2 1), çè,Ò (2), (1)Òp[ çè,Ò (2 1), 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 ± 1, 2, 3, … 1, 2, 3, … 2è?[ çÊ () çè,Ò () 2è?[ 1 Przykładowo, chcąc utworzyć drugą funkcję musimy przejść następujące kroki. Wyjściowo zakładamy najmniejsze możliwe ± 1. Dla takiego ±, współczynnik może być równy maksymalnie: Stosujemy teraz wzór (A): 2è?[ 2[?[ 2 1 çèp[,Ò?[ () é ç,[ () é çè,Ò (2) ¤ çè,Ò (2 1) (1)Ò ç[,[ (2) ¤ é ç[,[ (2) ¤ [ (1) ç[,[ (2 1) ç[,[ (2 1) Funkcja ç[,[(2) to inaczej w numeracji : Natomiast funkcja ç,[ (2) to: 2è?[ 1 2[?[ 1 1 1 36 2?[ 1 2 1 1 2 Czyli otrzymujemy: ç[ 2, ç ¡ ç[ 2 1, 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 Przed interpretacją graficzną musimy wyliczyć jakie wartości będzie przyjmowała funkcja ç dla konkretnych . Przykładowo, dla ç 0 ç[ 2 0 ç[ 0. Teraz musimy sprawdzić jaką wartość przyjmuje funkcja ç[ dla 0. W wyniku otrzymujemy 1. Teraz podstawmy przykładowo wartość ç 0,8. Dla z przedziału 0,5 ¥ ¥ 1 funkcja przyjmuje postać: ç[ 2 1 ç[ 2 0,8 1 ç[ 0,6 1 1 Reasumując otrzymujemy następujący przepis na funkcję ç : 1, 1, ç ë 1, 1, A w interpretacji graficznej: 0 ¥ ¥ 0,25 0,25 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 0,75 0,75 ¥ ¥ 1 1 0 0,5 1 Ô -1 By uzyskać ç\ stosujemy wzór (B) dla ± 1 i 1 çèp[,Ò é çè,Ò 2, 1Òp[ çè,Ò 2 1, ç[,[ 2 ç[ (2), ¤¡ ç, é (1) ç[,[ (2 1) ç[ (2 1), 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 0 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 1 è?[ 1 k ç () ç, () k 2[ \ 2 213 Co po odpowiednich podstawieniach daje nam: 1, 1, ç\ () ë 1, 1, 0 ¥ ¥ 0,25 0,25 ¥ ¥ 0,5¤ 0,5 ¥ ¥ 0,75 0,75 ¥ ¥ 1 1 0 -1 0,5 1 Ô\ 37 Wszystko oczywiście możemy zapisać macierzowo w postaci bazy, gdzie kolejne kolumny są kolejnymi funkcjami Walsha (np. druga funkcja Walsha to ç P»R P1 1 1 1 1 1 1 1Rs ): 1 j 1 i i1 Ô¢ i1 i1 i1 i1 h1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1on 1n 1n 1n 1n 1n 1m Baza Walsha okazuje się być dużo bardziej praktyczna od bazy Haara, bowiem nie tylko jest ona ortogonalna, lecz również unormowana (ortonormalna). Jakąż to korzyść mamy z takowego stanu? Zostało to już stwierdzone dużo wcześniej, w lekcji piątej (ORTOGONALNOŚĆ i ORTONORMALNOŚĆ). Ujmując rzecz krótko i treściwie, przy przechodzeniu między bazą kanoniczną, a Walsha, nie potrzebujemy żadnych schematów! á⯠1 j1 i1 i 1 i i1 i1 i1 h1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 21 2 1 o j j o 1o 3 1 n i i n 5n 1 1 n i n i n 1n i5n i 3 n 1 n i4 n i 3 n 1n i3n i 3 n 1 n i2n i7n 1m h1m h3m Chcąc powrócić do poprzedniej bazy wykonujemy mnożenie sygnału wyjściowego ìá⯠i macierzy przejścia: <Ê 1 j1 i1 1 i1 i Ì i1 i1 i1 h1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 21 16 2 1 o j o j o j 1 24 3o 1 n i5n i 8 n i1n 1 n i n 1 i n i n 40 5 1n i 3 n i ni n 1 n i 3 n 8 i32n i4n 1n i 3 n i24n i3n i16n i2n 1 n i7n h 8 m h1m 1m h3m Funkcje Walsha posiadają bardzo ciekawą własność, bowiem zarówno po odwróceniu macierzy przejścia, jak i transponowaniu (symetria względem jednej z przekątnych – każdy wiersz ma swój odpowiednik w kolumnie, np. pierwsza kolumna jest taka sama jak pierwszy wiersz, druga kolumna jest taka sama jak drugi wiersz, etc.), wciąż otrzymujemy tą samą macierz. Ô Ô ?[ Ô s FORMUŁY dla MatLab’a W przypadku używania GNU Octave bez interfejsu graficznego, by wkleić formułę do okienka należy kliknąć prawym przyciskiem myszki w pasek z nazwą okna i z listy wybrać opcję Edytuj, a następnie Wklej. walsh=[1 1 1 1 1 1 1 1;1 1 1 1 -1 -1 -1 -1;1 1 -1 -1 -1 -1 1 1;1 1 -1 -1 1 1 -1 -1;1 -1 -1 1 1 -1 -1 1;1 -1 -1 1 -1 1 1 -1;1 -1 1 -1 -1 1 -1 1;1 -1 1 -1 1 -1 1 -1] 38 haar=[1 1 1 0 1 0 0 0;1 1 1 0 -1 0 0 0;1 1 -1 0 0 1 0 0;1 1 -1 0 0 -1 0 0;1 -1 0 1 0 0 1 0;1 -1 0 1 0 0 -1 0;1 -1 0 -1 0 0 0 1;1 -1 0 -1 0 0 0 -1] SZEREG FOURIER’a LEKCJA SZÓSTA TRANSFORMACJA FOURIER’a LEKCJA SIÓDMA WSTĘP Z braku czasu, w tym miejscu odsyłam do książki Pana Tomasza P. Zielińskiego. WŁASNOŚCI TRANSFORMACJI FOURIER’a Z braku czasu, w tym miejscu odsyłam do książki Pana Tomasza P. Zielińskiego. PODSTAWOWE TRANSFORMATY Z braku czasu, w tym miejscu odsyłam do książki Pana Tomasza P. Zielińskiego. DFT – Discrete Fourier Transform LEKCJA ÓSMA DFT to skrót od Discrete Fourier Transform, czyli dyskretnej transformaty Fourier’a. Cóż to oznacza? Mianowicie to, że nie jest ona ciągła. A co oznacza, że nie jest ona ciągła? Ano to już najlepiej zobaczyć na przykładzie… MACIERZ PRZEJŚCIA DLA DFT Obliczanie DFT jest bardzo podobne do przechodzenia między bazami, bowiem operacje wykonuje się mnożąc macierz przejścia i macierz sygnału wejściowego. W konsekwencji otrzymujemy macierz zawierającą widmo częstotliwościowe naszego sygnału. Nasz przykładowy sygnał wejściowy będzie miał następującą formę: PR P1 2 1 0 1 2 1 0Rs Indeks T przy prawym rogu macierzy, oznacza, iż macierz ma być pionowa, a nie pozioma (wymaga ona transponowania). Macierz przejścia wylicza się według wzoru: ç NÊ ?J É NÊ Przy czym dla naszego przykładu N=8 (osiem próbek w sygnale), a k oraz n=0,1,2…,N-1. W konsekwencji macierz przejścia będzie macierzą 8 na 8: 39 ç NÊ cos ç NÊ ?J É NÊ cos 2 2 » sin » Ì Ì 2 2 » sin » cos » sin » 8 8 4 4 ç , j ,[ ç i , Ô iç i í iç , hç ,î ç [, ç [,[ ç [, í ç [, ç [,î ç , ç ,[ ç , í ç , ç ,î í í í í í í ç , ç ,[ ç , í ç , ç ,î ç î, o ç î,[ n ç î, n í n ç î, n ç î,î m W momencie gdy współczynnik n lub k jest równy 0, otrzymujemy wektor czysto realny, o długości 1: Im(z) Re(z) 0 ç NÊ cos 1 » sin » cos 0 sin 0 1 4 4 Przeanalizujemy teraz część wiersza dla n=1 rozpatrując 4 przypadki k w poniższej tabeli: ïðñ k 0 cos 0 1 sin 0 1 1 4 4 obrót wektora Im(z) Re(z) 0 1 Im(z) 1 2 √2 √2 cos sin 4 4 2 2 cos sin 2 2 Re(z) 0 1 Im(z) Re(z) 0 1 40 Im(z) cos 3 3 3 √2 √2 sin 2 2 2 2 Re(z) 0 1 Jak widać, w przypadku wiersza n=1, wektor przemieszcza się za każdym razem o 45 stopni w kierunku wskazówek zegara (bodaj w prawo). Dzięki temu możemy wywnioskować, iż dla k=4, wektor przyjmie wartość czysto realną -1. By nie pisać ułamków i pierwiastków zastosujemy bardzo prostą symbolikę nawiązującą do wirującego wektora: √u √u ò u u ó √u √u ò u u ô √u √u ò u u √u √u ò u u õ ö Dzięki czemu otrzymujemy bardzo przejrzystą tabelkę wyników dla każdego k: k ïðñ 0 1 · 1 ó ó 2 3 4 ô ÷ 1 ô 5 6 õ ù õ ø 7 ö ö Przed wpisaniem odpowiednich wektorów dobrze jest pamiętać o tym, iż macierz jest symetryczna! Czyli to co jest w wierszu n=1 musi być również w kolumnie k=1. · j· i· i · Ôi i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ · · ô ø · õ · ù · öo n n n n n n m Kolejna własność tej macierzy jest taka, iż „skok” pozostaje stały, w związku z tym proszę się przyjrzeć wierszowi n=4 (piąty od góry) oraz kolumnie k=4 (piąta od lewej). Pierwszy znak jest strzałką w prawo ·, zaś drugi strzałką w lewo ø. Czy to oznacza, iż każda zmiana następuje co 180 stopni i następna strzałka będzie również w prawo? Tak właśnie jest! 41 · j· i· i · Ôi i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ · · ô ø · ø ø · ø · ø · · õ · · ù ø · öo n n n ·n n n m Jednocześnie proszę zwrócić uwagę, iż skok narasta co 45 stopni od 0, czyli trzeci wiersz (n=2) i trzecia kolumna (k=2) będą miały skok 90 stopni: · j· i· i · Ôi i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ ø ù · ÷ ø ù · · ô ø ù · ø ø · ø · ø · õ ÷ · · ù ø ø · öo ùn n n ·n n n m W konsekwencji nasza macierz przejścia wygląda w sposób następujący: · j· i· i · Ôi i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ ø ù · ÷ ø ù PRÓBKOWANIE i OBLICZENIA w DFT Spróbujmy nasz przykładowy sygnał PR P1 wykresie: · ô ù ó ø ö ÷ õ · ø · ø · ø · ø · õ ÷ ö · ó ù ô 2 1 0 · ù ø ÷ ø ù ø ÷ · öo ùn n õn ·n ôn ÷n óm 1 2 1 0Rs , przedstawić graficznie na amplituda 2 1 numer próbki [n] 0 1 2 3 4 5 6 7 Widać wyraźnie zarys sygnału okresowego, przykładowo sinusoidy lub piły. Spróbujmy określić okres tegoż przebiegu. Sygnał zaczyna się na próbce numer 0, natomiast próbka 4 jest powieleniem próbki numer 0. Stąd możemy stwierdzić, iż okres tegoż sygnału to 4 próbki, a na wykresie otrzymujemy 2 pełne obiegi – 0, 1, 2 i 3 oraz 4, 5, 6 i 7. Jednocześnie bardzo ważnym jest spostrzeżenie, iż cały sygnał posiada składową stałą (taki offset), bowiem oscylacje nie zachodzą wokół zera, lecz jedynki (stąd stwierdzamy, iż offset jest równy jeden). Mimo tego, iż wiemy ile próbek zajmuje okres ¼ przebiegu, nie jesteśmy w stanie stwierdzić jaka jest 42 jego częstotliwość, bowiem nie znamy delty czasowej (jak dużo czasu minęło między dwoma kolejnymi próbkami). Zakładając, iż częstotliwość próbkowania to: z 4 Otrzymujemy wiadomość, iż kolejne próbki zbierane były z szybkością [ 0,25 »ú}g. Ponieważ [ ^ nasz okres to 4 próbki (przykładowo > 4), więc otrzymujemy, iż w dziedzinie czasu: ¼ > 4 0,25 1 »ú} Co w dziedzinie częstotliwości daje nam: zèûüý<üâ 1 1 ¼ Sumując wszystkie informacje na temat tegoż przebiegu otrzymujemy – częstotliwość sygnału to 1Hz (okres 1 sekunda), amplituda 1 (amplituda peak-to-peak równa 2), składowa stała równa 1 – dwie ostatnie wartości bez jednostek (może to być dowolna jednostka, np. napięcie). Mamy naszą macierz przejścia oraz sygnał. By uzyskać widmo, musimy obie macierze przemnożyć przez siebie: · · j· ó i· ÷ i · ô ̂ P»R Ô PR i i· ø i· õ i· ù h· ö · ÷ ø ù · ÷ ø ù · ô ù ó ø ö ÷ õ · ø · ø · ø · ø · õ ÷ ö · ó ù ô · ù ø ÷ ø ù ø ÷ · 8 1 j j o o ö 0 o 2 i i n n ù 4n 1 n n i n i õ n i0n i 0 n ·n i1n i 0 n ô n i2n i 0 n ÷ n i1n i 4 n ó m h0m h 0 m Wykonując powyższą operację, mnożymy każdy wiersz macierzy przejścia, przez kolumnę naszego sygnału wejściowego, np. dla pierwszego wiersza: ̂ P0R (· 1) (· 2) (· 1) (· 0) (· 1) (· 2) (· 1) (· 0) Podstawiając wartości liczbowe za strzałki (· 1) otrzymujemy: ̂ P1R 1 2 1 0 1 2 1 0 8 Przy wymnażania macierzy, dobrze jest zauważyć pewien antagonizm strzałek, np. strzałka w prawo neguje strzałkę w lewo (ale tylko w momencie gdy mnożymy te same liczby np. sytuacja w drugim wierszu macierzy przejścia, czyli (· 1) (ø 1) 0 – należy o tym pamiętać, bowiem nie zawsze otrzymujemy takie proste sytuacje). Przykładowo wykonajmy mnożenie dla czwartego (̂ P3R, bowiem numerujemy od zera) wiersza macierzy przejścia: ̂ P3R (· 1) (ô 2) (ù 1) (ó 0) (ø 1) (ö 2) (÷ 1) (õ 0) Na razie nie podstawiamy konkretnych wartości, lecz grupujemy przeciwne sobie strzałki: ̂ P3R (· 1) (ø 1) (ô 2) (ö 2) (÷ 1) (ù 1) (õ 0) (ó 0) 0 43 Jak widać, każda ze strzałek neguje się, co w konsekwencji daje nam zero. Sytuacja taka nie ma miejsca dla trzeciego wiersza macierzy przejścia: ̂ P2R · 1 ÷ 2 ø 1 ù 0 · 1 ÷ 2 ø 1 ù 0 Po pogrupowaniu strzałek otrzymujemy: ̂ P2R · ° ø ° · ° ø ° ÷ 2 ù 0 ÷ 2 ù 0 ̂ P2R ÷ 2 ù 0 ÷ 2 ù 0 ÷ 2 ÷ 2 Strzałka w dół oznacza element ujemny, czysto urojony, czyli ÷ : ̂ P2R 2 2 2 2 4 Po wyliczeniu wszystkich równań, otrzymaliśmy następującą macierz: ̂ P»R P8 0 4 |̂ P»R| P8 0 4 0 0 0 4 0Rs Jest to nasze dyskretne widmo, lecz jeszcze nie w finalnej formie, bowiem musimy jeszcze wyliczyć jego moduł, pozbywając się elementów urojonych: 0 0 0 4 0Rs Na koniec można jeszcze dokonać przeskalowania amplitudy. Na samym początku stwierdziliśmy, iż amplituda sygnału to 1, natomiast w dyskretnym widmie otrzymujemy 4, co koryguje się wzorem: Dzięki czemu otrzymujemy: |̂ P»R| 8 0 8 ̂ P»R , Ì ̂ P»R ë ̂ P»R 2 , Ì 4 2 0 0 8 »0 ¤ » 1, … , Ì 1 s 4 0 2 0 P1 0 1 8 0 0 0 1 0 Rs INTERPRETACJA DYSKRETNEGO WIDMA W początkowej fazie, nasze widmo miało postać zawierającą jednostki urojone. Jeśli widmo zawiera części urojone, to jest to dla nas znak, iż sygnał jest nieparzysty. Czy ma to odwzorowanie w naszym przykładzie? Otóż tak, bowiem jak stwierdziliśmy na początku (podrozdział PRÓBKOWANIE i OBLICZENIA w DFT), sygnałem tym może być sinusoida. Jest to całkiem dobry sposób sprawdzenia, czy nasze obliczenia są poprawne. Spytajmy jednak, co by było gdybyśmy nasz przykładowy sygnał przesunęli nieco, tworząc z niego cosinusa: á PR P2 1 0 1 2 1 0 1 Rs Używając MatLab’a (lub GNU Octave), po wpisaniu polecenia sygnal=[2 1 0 1 2 1 0 1], a następnie fft(sygnal), otrzymujemy wynik (fft to skrót od szybkiej transformaty Fouriera, która jest przyspieszoną metodą obliczania DFT): ans = 8 + 0i 0 + 0i 4 + 0i 0 + 0i 0 + 0i 0 - 0i 4 - 0i 0 - 0i 44 W którym wyraźnie widać, iż widmo ma formę ̂á P»R P8 0 4 0 0 0 4 0Rs . Jednakże jak odczytywać to widmo? Spróbujmy przedstawić je na rysunku, aczkolwiek już po przeskalowaniu amplitudy, tak jak zostało to opisane na końcu poprzedniego podrozdziału: |̂ P»R| P1 0 1 0 0 0 1 0Rs amplituda 2 1 numer próbki [k] 0 1 2 3 4 5 6 7 Proszę zwrócić uwagę, iż na osi poziomej występują numery próbek [k]. Aczkolwiek czego są to próbki? Otóż są to wartości związane z częstotliwością. Tylko, że stwierdziliśmy, iż sygnał ma jedną częstotliwość o wartości 1Hz, a tutaj na widmie pojawiają się 3 prążki?! Dlaczego?! Prążek w punkcie k=0, to składowa stała (umownie, częstotliwość 0Hz). Jak widać, jego amplituda zgadza się z wcześniejszymi ustaleniami, iż składowa stała jest równa 1. Teraz powstaje jednak pytanie, dlaczego drugi prążek pojawia się dla k=2, a nie k=1? Otóż poziomą oś wykresu należy jeszcze odpowiednio przeskalować (tak jak i robiliśmy to z amplitudą) za pomocą wzoru: zN ∆z » z 4 » » 0,5 » Ì 8 Dzięki czemu możemy teraz skorygować oś na wykresie: amplituda 2 1 częstotliwość [Hz] 0 0,5 1 1,5 2 2,5 3 3,5 Niby wszystko się zgadza – prążek 0Hz o amplitudzie 1, czyli składowa stała, prążek 1Hz o amplitudzie naszej sinusoidy… ale skąd ten prążek dla 3Hz? Okazuje się, iż biorąc wykres naszego przebiegu, przy tych samych „kropkach” jesteśmy w stanie narysować nieskończenie wiele sinusoid, m.in. jedną o częstotliwości 1Hz i jedną o częstotliwości 3Hz, tak jak to widać poniżej: amplituda 2 1 czas [sek] 0 0,5 1 1,5 2 45 Warto na koniec wspomnieć jeszcze o zjawisku przecieku, które pojawia się, gdy cz częstotliwość obecna w sygnale nie może pojawić się na dyskretnym widmie przez za dużą deltę częstotliwości. Np. w momencie gdyby w naszej sinusoidzie pojawił się sygnał o częstotliwości 1,75Hz, to w związku z dyskretnym wymiarem transformaty, prążki pojawiłyby się zarówno przy 1,5Hz jak i 2Hz (w odpowiedniej proporcji do siebie). W celu udowodnienia posłużymy się MatLabem (w następnym podrozdziale znajdują się szczegółowe instrukcje). Próbkujemy z szybkością 4Hz, definiując to w stałej fp=4. Jeden sinus będzie miał częstotliwość 1,75Hz f0=1.75. Generujemy teraz macierz czasu t=[0:1./fp:2-1./fp] i sinus x=sin(2*pi*f0*t)+1 zawierający składową stałą (w komendzie pojawia się jako +1 na końcu). Na koniec obliczamy dft przez polecenie fft(x): Columns 1 through 5: 8.19891 + 0.00000i 0.23463 - 0.00000i 0.41421 - 0.00000i 1.76537 - 0.00000i -5.02734 + 0.00000i Columns 6 through 8: 1.76537 + 0.00000i 0.41421 + 0.00000i 0.23463 + 0.00000i Zapisując DFT jako macierz: >P»R P8,2 0,23 0,41 1,77 5 1,77 0,41 0,23Rs Widzimy, iż ponoć w sygnale znajdują się przynajmniej 3 częstotliwości, co nie jest prawdą i pokazuje niedoskonałość metody. DFT dla MatLab Bardzo szybko można dokonać dyskretnej transformaty stosując polecenie fft(nazwa), gdzie nazwa, to macierz zawierająca sygnał wejściowy. PROSZĘ JEDNAK UWAŻAĆ ZE STOSOWANIEM TEGO POLECENIA DLA OBRAZÓW (macierze dwuwymiarowe)! Jednakże spróbujmy sami napisać kolejno polecenia, które pozwolą nam otrzymać transformatę. Na początek zacznijmy od zdefiniowania częstotliwości próbkowania i sygnału – wpisujemy dla częstotliwości próbkowania polecenie fp=8, czyli 8 Hz, a dla częstotliwości sygnału f0=2, czyli czterokrotnie mniej (dzięki czemu spełniamy warunek Nynquista – zÉ 2 z , mówiący o minimalnej częstotliwości próbkowania). Teraz definiujemy macierz czasu, która tak czy inaczej, jest skwantowana (dyskretna) poleceniem t=[0:1./fp:1-1./fp], gdzie fp jest wcześniej zdefiniowaną częstotliwością próbkowania, dzięki czemu odstępy między kolejno generowanymi próbkami czasu będą równe delcie [ czasowej (szybkość zbierania próbek ∆). Część 1-1./fp ma na celu stworzenie wektora składającego się z 8 elementów (pisząc komendę w postaci t=[0:1./fp:1] otrzymujemy 9 elementów w macierzy). Teraz musimy obliczyć poszczególne wartości sinusa w konkretnych chwilach czasu. W tym celu użyjemy wzoru, który pojawił się już wcześniej (lekcja pierwsza – PRZYKŁAD WYKORZYSTANIA MatLab): > sin2 z My do naszego sinusa dodamy składową stałą o wartości 2. W tym celu wpisujemy polecenie x=sin(2*pi*f0*t)+2. Kolejnym krokiem jest wygenerowanie macierzy przejścia w nieco bardziej złożony sposób: N=8 for n=0:N-1 for k=0:N-1 W(k+1,n+1)=exp(-j*2*pi./N*n*k) end end 46 By otrzymać DFT, mnożymy macierz przejścia W i nasz sygnał x wpisując Wout=W*x’ (macierz x musi być transponowana z poziomej, na pionową). Dzięki czemu otrzymujemy: Wout = 16.00000 - 0.00000i -0.00000 + 0.00000i -0.00000 - 4.00000i -0.00000 + 0.00000i 0.00000 - 0.00000i -0.00000 - 0.00000i -0.00000 + 4.00000i 0.00000 - 0.00000i By przedstawić wynik na wykresie, wpisujemy figure(2),plot(abs(Wout),’.’) lub by otrzymać połączone punkty – figure(2),plot(abs(Wout)). Interpretacja takiego widma znajduje się we wcześniejszym podrozdziale. DFT dla DWÓCH WYMIARÓW Wykonywanie DFT dla macierzy dwuwymiarowych (inaczej mówiąc – dla obrazu) jest w metodyce bardzo podobne do wykonywania DFT jednowymiarowego. W MatLab’ie, by wykonać DFT 2D stosujemy polecenie fft2(nazwa). Skorzystamy w tym miejscu ze wzorów znajdujących się w wykładach oraz na wielu różnych stronach, przykładowo poniżej znajdująca się: http://fourier.eng.hmc.edu/e101/lectures/Image_Processing/node6.html Jedno z zadań dotyczące transformaty obrazu pojawiło się na egzaminie (pierwszy termin, sesja letnia, a.d. 2010) i jego rozwiązanie znajduje się w lekcji trzynastej (zadanie 3 – 2D DFT), stąd tutaj zajmiemy się jedynie ogólnym omówieniem problemu. Stosując zapis macierzowy, gdzie ̂ to macierz widma częstotliwościowego, a to macierz sygnału, otrzymujemy: ̂ Ô= Ô W tym równaniu Ô= jest macierzą przejścia, którą tworzymy według schematu znanego z podrozdziału MACIERZ PRZEJŚCIA dla DFT (lekcja ósma): Ô= Iç= K Ê N ?J Gdzie = to numer wiersza, »= to numer kolumny macierzy: Ê N É = 0, 1, … , Ì= 1 »= 0, 1, … , Ì= 1 A Ì= jest wymiarem macierzy w osi X (ilość elementów w poziomie). Jeśli Ì= jest równe Ì (co niekoniecznie musi się stać – zadanie 3 z drugiego terminu egzaminu a.d. 2010, lekcja czternasta), to możemy zapisać, iż: Ô= Ô ̂ Ô= Ô= 47 Należy tu również nadmienić, iż macierze Ô= i Ô są symetryczne (ortonormalne, Ô= Ô=s Ô=?[ ). Podczas stosowania powyższego wzoru nie można zapomnieć, iż kolejność wykonywania mnożeń ma olbrzymie znaczenie! Wykonując mnożenie w formie: Ô= ̂ £ Ô= Ô= ̂ Ô= Nie otrzymujemy macierzy widma, a jedynie wracamy z powrotem do macierzy sygnału (Ô= )! Poprawną metodą jest wykonanie mnożenia w formie: Niby mała różnica, a jednak bardzo znacząca. Z tego właśnie powodu, dwukrotne zastosowanie polecenia fft(nazwa) w MatLab’ie nie powoduje wyliczenia widma, a jedynie powrót do macierzy sygnału. W tym miejscu odsyłam na początek opracowania do wstępu mówiącego o mnożeniu macierzy. IDFT – inverse discrete Fourier transform Skoro umiemy policzyć widmo sygnału, to pasuje też umieć na podstawie widma policzyć macierz sygnału (odwrotna dyskretna transformata Fourier’a). W tej kwestii istnieje bardzo duża wygoda związana z symetrią macierzy przejścia Ô ç ÊN ?J ÊN , bowiem otrzymujemy zależność: Ô Ô s Ô ?[ Stąd dla sygnałów jednowymiarowych tryb postępowania jest wyjątkowo prosty: ̂ Ô 1 Ô ̂ Ì Gdzie Ì jest liczbą elementów w sygnale. Przykładowo – mamy sygnał PR P0 3 0 Wykonujemy jego DFT: · j· i· i · ̂ Ô i i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ ø ù · ÷ ø ù · ô ù ó ø ö ÷ õ · ø · ø · ø · ø · õ ÷ ö · ó ù ô · ù ø ÷ ø ù ø ÷ · j· i· 1 1 i· Ô ̂ i Ì 8 i· i· i· h· · ó ÷ ô ø õ ù ö · ÷ ø ù · ÷ ø ù · ô ù ó ø ö ÷ õ · · ø õ · ÷ ø ö · · ø ó · ù ø ô · 0 12 j o j o ö 3 0 o i n i n ù 0 0 n n n i n i õ n i3 n i 0 n ·n i0n i12n ô n i3 n i 0 n ÷ n i0 n i 0 n ó m h3 m h 0 m Teraz chcąc znów otrzymać sygnał wykonujemy takie samo mnożenie: · ù ø ÷ ø ù ø ÷ 3 0 3 0 3 Rs . · 12 0 ö o j 0 o j3 o ù n i 0 n i0 n n i n n i õ n i 0 n i3 n ·n i12n i0n ô n i 0 n i3 n ÷ n i 0 n i0 n ó m h 0 m h3 m W MatLab’ie załatwiamy to poleceniem ifft(nazwa) (oraz ifft2(nazwa) dla macierzy dwuwymiarowych). W przypadku obliczania obrazu (dwuwymiarowa macierz) na podstawie jego widma metoda jest podobna. Przykładowe zadanie znajduje się w lekcji trzynastej – zadanie 3 – IDFT 2D. 48 TRANSFORMACJA Z LEKCJA DZIEWIĄTA WSTĘP Podczas projektowania filtrów nasz spróbkowany sygnał transformujemy do dziedziny liczb zespolonych transformacją Z. Ogólny wzór na tą transformację to: È ?Ê ÊË? By zobaczyć jak ten wzorek „działa” załóżmy, że nasz sygnał ma następującą formę: P1 , 0 , 2 , 3R Sygnał przyjmuje dla kolejnych numerów próbek wartości podane w poniższej tabeli: Numer próbki 0 1 2 3 Wartość sygnału 1 0 -2 3 Wedle wzoru na transformację Z otrzymujemy, iż nasz sygnał będzie wyglądał następująco: () È () ÊË? ?Ê \ È () ?Ê 1 ? 0 ?[ (2) ? 3 ?\ ÊË () 1 1 0 2 ? 3 ?\ 1 2 ? 3 ?\ Proszę w tym miejscu jednak zwrócić uwagę, iż dla z=0, szereg ten nie ma sensu, bowiem: ? 1 1 0 A każdy dobrze wie, że dzielić przez zero nie wolno (bo wybuchnie). PRZYKŁADY – delta Diraca Wiedząc już jak mniej-więcej działa transformata Z, spróbujmy policzyć transformatę dla delty Kroneckera (bądź jak kto woli, delty Diraca). Na podstawie definicji delty (z dyskretnym czasem, stąd n zamiast t): 0, () ¡ 1, ś¢ £ 0¤ ś¢ 0 otrzymujemy wniosek, iż wszystkie n różne od zera możemy pominąć, stąd granica naszej sigmy (sumy) będzie: () È () ?Ê ( 0) ? 1 1 1 ÊË Jednocześnie możemy stwierdzić, iż szereg ten jest zbieżny dla wszystkich z. 49 PRZYKŁADY – skok jednostkowy Osobiście zamiast zapisu 1(n) preferuję raczej u(n), stąd: ú ¡ 0, 1, ś¢ ¥ 0¤ ś¢ ¦ 0 Od razu w tym miejscu należy podkreślić, iż granica od minus do plus nieskończoności nie ma sensu, bowiem od minus nieskończoności do zera sygnał jest równy zero, stąd: ú() È ú() ÊË? ?Ê È ú() ?Ê ÊË Ponieważ dla każdego n większego lub równego zero, u(n) jest równe 1, stąd możemy zapisać: ú() È 1 ?Ê ? ?[ ? í 1 ?[ ? í ÊË Bardzo szybko da się zauważyć, iż nasz ciąg jest ciągiem geometrycznym. Wzór na sumę ciągu geometrycznego to: ì 1 Ê ? ?[ ?[ Ê?[ ?[ 1 gdzie a0 to nasze 1, a q to z-1, stąd możemy zapisać, iż: ú() È ú() ?Ê ÊË 1 ?[ 1 1 1 FILTRY i TRANSMITANCJA LEKCJA DZIESIĄTA Przykładowo mamy pewną ścieżkę dźwiękową. Chcemy z niej usunąć pasmo wysokich częstotliwości. W momencie, gdy mamy całe nagranie, nie ma żadnego problemu by policzyć transformatę Fouriera dla danego przebiegu, dokonać potrzebnych operacji, a następnie ponownie wrócić do dziedziny czasu. Problem pojawia się w momencie, gdy chcemy dźwięk (bądź inny sygnał) przetwarzać w czasie rzeczywistym. Dlatego teraz zajmiemy się tematyką filtrów. Na początek zajmiemy się filtrami FIR (Finite Impulse Response), które dają skończoną odpowiedź impulsową (co to znaczy, będzie wyjaśnione nie co dalej), a następnie IIR (Infinite Impulse Response), czyli filtry o nieskończonej odpowiedzi impulsowej. FIR (Finite Impulse Response) Ogólnym wzorem na filtr jest: É () È Ê ü ( ) ÊË 50 gdzie N jest rzędem filtru. Proszę zwrócić uwagę, iż granica sumy (Σ) pokazuje nam jak wiele próbek (od n=0 do N) wstecz sięgamy do przetworzenia bieżącej próbki m. Każdy „stopień” (czyli każde n) ma swój osobny współczynnik hn. Przykładowo, konstruując prosty wzmacniacz, który wzmacnia sygnał 2 razy, otrzymamy: È Ê ü ü 2 ü ÊË Reasumując, nasz filtr graficznie można przedstawić jako swego rodzaju pudełeczko (czarną skrzynkę zawierającą współczynniki hn), do której coś wchodzi (swe) i z której co wychodzi (swy). Na poniższej ilustracji wyraźnie widać, iż w środku mamy zbiór współczynników, których jest w ilości od n=0 do N. Õñ ñËÖ swe(m) swy(m) Okazuje się jednak, że do obliczania współczynników hn najlepiej nadaje się transformata Z. Jak więc będzie wyglądał ogólny wzór dla filtrów FIR w Z? Przypomnijmy sobie ogólny wzór na transformatę Z (jednocześnie zmieńmy granicę sumy tak, by miała swój początek w zerze, zakładając, iż nic wcześniej się nie działo, albo nie mamy o tym żadnej informacji): È ?Ò ÒË Nasze s(m) to: É È Ê ü ÊË Dzięki czemu otrzymujemy: È ÒË? ?Ò É È È Ê ü ÒË ÊË ?Ò É È Ê È ü ?Ò ÒË ÊË Teraz musimy sobie przypomnieć twierdzenie o przesunięciu w transformacie Z: È ü ?Ò ÒË > l l È ü > ?=?Ê È ü > ?= ?Ê ü ?Ê > É =Ë =Ë É È Ê È ü ?Ò ü È Ê ?Ê ÊË ÒË ÊË Suma współczynników hn jest nazywana transmitancją H(z): É È Ê ?Ê ÊË ü ZADANIE 1 51 Otrzymujemy równanie różnicowe w formie: ü [ ü 1 ü 2 \ ü 3 [ 1 2 \ 3 Naszym zadaniem jest policzenie wzmocnienia sygnału stałego. Rozwiązanie: Na początek potrzebujemy obliczyć transmitancję naszego filtru. Ogólny wzór dla filtrów to: É g È Ê > È N > » > [ > 1 > 2 í ÒË NË[ W tym momencie jesteśmy w stanie stwierdzić (porównując oba wzory – na swy(n) i y(n) ), iż współczynnik b0 będzie równy b0, współczynnik b1 będzie równy współczynnikowi b1 i tak dalej. Taki sam wynik uzyskujemy dla współczynników a: Korzystając z wzoru na transmitancję: Ê Ê Ê Ê ?Ê ∑ ∑\ÊË Ê ?Ê ? [ ?[ ? \ ?\ ÊË Ê ?Ê 1 [ ?[ ? \ ?\ 1 ∑É 1 ∑\ÊË[ Ê ?Ê ÊË[ Ê Wiedząc, iż za z możemy podstawić eksponentę w postaci: J Musimy teraz przypomnieć sobie, czym jest składowa stała. Otóż jest to wzmocnienie dla częstotliwości równej 0, czyli zapisując transmitancję częstotliwościowo otrzymujemy, że interesuje nas wartość dla: z · 0 J J 1 Jeśli f=0, to z=1, stąd wzmocnienie dla sygnału stałego to: z 0 [ \ 1 1 [ \ ZADANIE 2 Policz transmitancję filtru: x(n) y(n) z-1 y(n-1) a=(-2) 52 Rozwiązanie: Aby poznać transmitancję filtru najlepiej jest podać na wejście układu x(n) deltę Kroneckera, dzięki czemu na wyjściu y(n) otrzymamy odpowiedź impulsową filtru. W tym celu przygotujmy specjalną tabelkę: numer próbki n sygnał x(n) wejściowy sygnał y(n) wyjściowy -1 0 1 2 3 4 5 0 1 0 0 0 0 0 0 1 -2 4 -8 16 -32 Rozważmy jednak dokładniej, co dzieje się z naszym sygnałem. W chwili n=-1 zarówno na wejściu jak i wyjściu otrzymujemy 0. W gdy pojawia się próbka n=0, na wejście przekazywany jest impuls równy 1: x(0)=1 Σ=1+0=1 y(0)=1 z-1 y(-1)=0 a=(-2) ∙ 0=0 Sytuacja drastycznie się zmienia wraz z próbką n=1, bowiem dla y(n-1) otrzymujemy wartość 1, która następnie jest wzmacniana -2 razy. Jednocześnie na wejściu nie ma już żadnego sygnału, w związku z czym wyjście filtru zaczyna działać w sprzężeniu zwrotnym, co pokazuje, iż filtr jest niestabilny: x(1)=0 Σ=0-2=-2 y(1)=-2 z-1 y(0)=1 a=(-2) ∙ 1=-2 Mimo tego, iż na wejście podany został sygnał o skończonej energii, na wyjściu otrzymujemy szereg, który nie jest zbieżny. Spróbujmy zapisać równanie różnicowe naszego filtru: g > g 1 53 We wzorze współczynnik b0 jest równy 1, a współczynnik a1=a, stąd otrzymujemy transmitancję: 1 1 1 ?[ 1 2 ?[ Porównując nasz wynik ze znanymi już transformatami Z: 1 1 ?[ ¡ Otrzymujemy odpowiedź, iż: g() ¡ 0, (2)Ê , 0, Ê , ś¢ ¥ 0 ¤ ś¢ ¦ 0 ś¢ ¥ 0 ¤ ś¢ ¦ 0 ZADANIA LEKCJA JEDYNASTA ZADANIE 1 – dualizm ¯ Jaka musi być częstotliwość próbkowania sygnału () ¯ aby uniknąć aliasingu? Rozwiązanie: Korzystając z właściwości symetrii (dualizm) przekształcenia Fourier’a: 2 0, ¡ 1, sin 2 z 1 Odpowiedź – częstotliwość winna wynosić 2 Hz. Na wejście filtru ?^û 2z || ¬ ¤ || À z 2 z 2 ZADANIE 2 – filtry/transformata Z [?û 0, ü Ê 2 , ¥ 0¤ ¦0 podano sygnał: Jakie wartości ma sygnał wyjściowy ? Rozwiązanie: ü È ÊË? ?Ê ü È2 ÊË Ê ?Ê 2 Ê 2 2 È 1 í ÊË 54 2 ?[ ü [ 1 1 1 2 ?[ ü 2 4 ?[ 1 2 ?[ ?[ 1 1 2 1 ?[ 0, 2 ú 2, ¥ 0¤ ¦0 ZADANIE 3 – filtry/FIR Jaki jest model matematyczny FIR drugiego rzędu, z liniową charakterystyką fazową, jeśli jego charakterystyka częstotliwościowa przyjmuje wartości 0 0 oraz 0,5 1? Rozwiązanie: z È Ê ?JÊ [ ?J ?J^ ÊË 0 [ ?J ?J^ [ 0 0,5 [ ?J,Æ ?J^,Æ [ ?J ?J [ 1 Musimy teraz skorzystać z symetrii współczynników, mówiącej, iż: Z czego w konsekwencji wynika: 2 1 4 2 1 [ 1 2 [ 2 1 1 ?[ 1 ? 4 4 2 1 2 ZADANIE 4 – stabilność Zbadać stabilność filtru przyczynowego, którego odpowiedź na impuls: wynosi 2Ê . Rozwiązanie: 1, 0, 0¤ £0 ü 2Ê 55 Przejście do dziedziny z: ü È ?Ê 1 ÊË È2 Ê ÊË ?Ê 2 ?[ 2 Ê È ÊË [ 1 [ 1 1 1 2 ?[ 1 ü 1 2 ?[ [ … [ … Warunek stabilności wymaga, by moduł każdego ze współczynników N był mniejszy od jedynki: |N | ¥ 1 1 ?[ 2 1 2 Warunek nie jest spełniony, bowiem moduł z 2 jest większy od 1. ZADANIE 5 – transformata Fouriera Oblicz transformatę Fouriera sygnału: 1, « 1, © 1, ª 3, © 0, ¨ 1 À ¥ 0 0À¥1 1À¥2 ¤ 2¥À3 ± Rozwiązanie: Na początek rysunek: Út × 1 t -1 0 1 2 3 Jak widać, sygnał składa się z dwóch trójkątów, stąd dokonamy transformaty jedynie pierwszego (znajdujący się w przedziale -1 do 1), a następnie użyjemy twierdzenia o przesunięciu. Widmo trójkąta: 56 ∆z ¼ q ¼ sin 2z 2 2z ¼ 2 r ¼ sin 2z 2 z W przypadku naszego trójkąta, okres jest równy jeden ¼ 1, stąd możemy zapisać: ∆ z sin z z Nasz sygnał składa się z 2 połączonych trójkątów, co możemy zapisać jako: ∆ ∆ 2 Korzystając z twierdzenia o przesunięciu: ∆ z ∆ z ?J¯ sin z sin z ?J ?J^ z z z ∆ z ∆ z ZADANIE 6 – aproksymacja/baza Walsh’a Dokonaj aproksymacji sygnału: 0,5, , 0, za pomocą pierwszych czterech funkcji Walsha. sin z G1 ?J^ L z 0 À À 0,5 0,5 À ¥ 1¤ ± Ú× 0,5 t 0 0,5 1 Rozwiązanie: Nie będę się tu rozpisywał o tym skąd się biorą pierwsze 4 funkcje Walsha, bowiem zostało to już zrobione wcześniej, w dziale na temat bazy Haara i Walsha. Jednakże dla wygody zapiszmy je w postaci macierzowej (przypominam, iż wektory bazy są PIONOWO, aczkolwiek ortonormalność bazy Walsha sprawia, iż wektory pionowe pokrywają się z również z poziomymi): 1 1 1 1 Ô¢ ã 1 1 1 1 1 1 1 1 ä 1 1 1 1 Ponieważ wektory bazy są w stosunku do siebie ortogonalne, nie będziemy używać błędu kwadratowego. Przez oznaczenie rozumiemy sygnał, a przez oznaczenie ç , pierwszą funkcję Walsha (ç P1 1 1 1R). 57 ̃ ç [ ç[ ç \ ç\ ,Æ [ [ ¥ ; ç ¬ ç } 0,5 1 } 1 } P0,5R ,Æ 0,5 P0,5 R 1 0,5 0 0,25 0,5 1 0,25 0,25 0,5 0,75 0,625 Otrzymaliśmy już pierwszy współczynnik. Czas na następny: ,Æ [ [ [ ¥ ; ç[ ¬ ç[ } 0,5 1 } 1 } P0,5R ,Æ [ 0,25 0,5 0,75 0,125 0,5 P0,5 R 1 0,5 0 W przypadku trzeciego współczynnika, w wektorze pojawiają się aż 4 przedziały, które musimy uwzględnić w zakresach całek: ,Æ ,Æ ,îÆ [ ¥ ; ç ¬ 0,5 1 } 0,5 1 } 1 } 1 } ,Æ 0,25 0,5 0,5 0,5 0,25 P0,5 R Teraz jeszcze tylko współczynnik \ : ,Æ ,îÆ ,Æ 1 0,75 P0,5 R 0,5 1 0,75 0,75 0,5 0,75 0,5 0,0625 ,Æ ,îÆ [ \ ¥ ; ç\ ¬ 0,5 1 } 0,5 1 } 1 } 1 } ,Æ \ 0,25 0,5 0,5 0,5 0,25 P0,5 R ,Æ ,îÆ 1 0,75 P0,5 R 0,5 0,75 0,5 1 0,75 0,75 0,5 \ 0,0625 Reasumując, nasz przybliżony sygnał wygląda w sposób następujący: ̃ 0,625ç 0,125ç[ 0,0625ç 0,0625ç\ Zapisując współczynniki macierzowo: Otrzymujemy mnożenie: P0,625 0,125 0,0625 0,0625Rs 0,625 0,5 1 1 1 1 0,125 0,5 1 1 1 1 ̃ Ô¢ ã äã äã ä 0,625 0,0625 1 1 1 1 0,875 0,0625 1 1 1 1 58 Przedstawiając rozwiązanie graficznie: Ú× 0,5 t 0,5 0 1 Jak widać, przybliżenie w zakresie od 0 do 0,5 dokładnie pokrywa się z przebiegiem oryginalnego sygnału. ZADANIE 7 – transmitancja/filtry Znaleźć odpowiedź częstotliwościową dla z 0 i z 0,25 transmitancji (treść tego zadania niestety gdzieś mi zaginęła, stąd istnieje prawdopodobieństwo, że brzmiała nieco inaczej): 1 ?[ 1 0,5 ? J Rozwiązanie: Dla z 0: Dla z 0,25: z 0 1 ?J 1 0,5 ?^J 1 2 4 1 0,5 1,5 3 H || 4 3 1 ?J,Æ 1 ? J 1 0,25 2 2 ?^J,Æ ?J 1 0,5 1 0,5 1 0,5 H 2 2 √4 4 2√2 ZADANIE 8 – stabilność/filtry Zbadać stabilność filtru o równaniu różnicowym: ü ü 1 ü 2 3 1 2 2 4 3 59 Rozwiązanie: 3 1 2 2 4 3 ü ü 1 ü 2 ∑ÊË Ê ?Ê ü 1 ∑ÊË[ Ê ?Ê È Ê ÊË ü É È Ê ÊË 1 1 ?[ 1 ? 1 ?[ ? \ \ 1 3 ?[ 2 ? 4 ?\ 1 3 ?[ 2 ? 4 ?\ \ \ 3 2 4 Warunek stabilności to |N | ¥ 1, stąd zajmiemy się tylko dolną częścią ułamka (mianownikiem? :P ). W tym miejscu musimy użyć schematu Hornera: 1 1 1 2 1 -3 -1 -2 -2 -4 -4 4 -4 0 Jak widać powyżej, liczba 2 nie może być pierwiastkiem wielomianu, aczkolwiek liczba 1 już tak (1 1 3 2 i dalej 1 2 2 4 oraz na koniec 1 4 4 0): \ 3 2 4 2 4 1 Teraz jeszcze musimy rozbić równanie kwadratowe: 2 4 0 ∆ 4Q 4 16 20 [ 2 2√5 1 √5 2 √∆ 2√5 1 √5 \ 3 2 4 1G 1 √5LG 1 √5L Ponieważ √5 2,23, więc otrzymujemy współczynniki, których moduły są większe od 1, co oznacza, iż filtr jest niestabilny: [ 1 √5 |1 2,23| 3,23 ¬ 1 Niech sygnał posiada widmo Fouriera ̂ z ZADANIE 9 – własności transformaty Fouriera . Jakie jest widmo sygnału 2 1? Rozwiązanie: 60 ̂ z 1 ² a ² ² ½ a ?J sin 2 4 1 1 sin 2 2 sin 4 2 1 2 4 2 8 sin 8 ?J sin 4 4 2 1 ?J[ 8 ZADANIE 10 – FFT Wyznaczyć schemat algorytmu wyliczania FFT i szczegółowo przeanalizować jego realizację, jeżeli sygnał poddawany analizie ma postać P0 1 0 2Rs Rozwiązanie: Na początek tworzymy macierz przejścia: 2 2 ?J É NÊ cos » sin » Ì Ì Ì4 » ! 0, … , Ì 1 P0 »1 ! 1 »2 ! 1 »3 ! 1 Pomijając już pozostałe obliczenia, otrzymujemy: 1 1 Hã 1 1 cos 1 2 sin 0 2 2 3R cos sin 1 cos 3 3 sin 0 2 2 1 1 1 1 ä 1 1 1 1 Natomiast po wymnożeniu macierzy przejścia i sygnału: 3 1 1 1 1 0 1 1 1 äã äã ä ̂ » H ã 1 1 1 1 3 0 1 1 2 Co w schemacie (algorytmie) motylkowym wygląda następująco: 61 0 0 0 0 2 0 0 0 1 1 3 3 2 1 3 ̂ 0 ̂ 1 3 3 ̂ 2 ̂ 3 A rozpisując na równania: É ?[ É ?[ ̂ » È 2 çÉNÊ çÉN È 2 1 çÉNÊ ÊË ÊË Gdzie çÉ ?J , a ç ?J , co w rezultacie daje nam (przykładowo dla k=0 i k=1): " ^ ?[ ^ ^ ?[ ^ ̂ 0 È 2 ?J ^ NÊ ?J ^ N È 2 1 ?J ^ NÊ [ ̂ 0 È 2 ÊË ÊË ?J [ [ ?J È 2 1 ?J 0 2 1 3 3 ̂ 1 È 2 ÊË ÊË ÊË ?J[Ê ?J [ [ È 2 1 ?J[Ê ÊË ̂ 1 0 ?J 2 ?J[ ?J I1 ?J 3 ?J[ K ̂ 1 0 ?J 0 ?J[ ?J I1 ?J 2 ?J[ K P1 1 2 1R Jak widać, wszystkie 3 metody dają te same rozwiązania. Należy w tym miejscu podkreślić, iż to, co dzieje się na schemacie motylkowym jest ściśle związane z powyższymi wzorami (jeśli schemat motylkowy zdaje się mieć błąd, bądź niejasność, to należy wyprowadzić rozwiązanie według wzorów). ZADANIE 11 – transformata Z Jaka jest z-transformata sygnału: Rozwiązanie: È ?Ê ÊË? 1, ¡ Ê? 0,5 , [ À 1¤ ¦2 1 Ê? ?Ê 1 Ò 2 ?Ê Ê È È l l È È ?Ò? 2 2 2 ÊË? È ÒË?[ Ò ? ÊË ÊË?[ ÒË 1 Ò 1 Ò ?Ò ?[ Ò ? È È È ?Ò 2 2 ÒË ÒË ÒË 62 È ? ÒË Ò 1 [ í 1 1 [ 1 Ò 1 1 1 ? È 1 í ? 1 2 2 2 1 ÒË 2 1 ? 1 1 1 ?[ 2 ZADANIE 12 – transmitancja/filtry Wyznaczyć charakterystyki częstotliwościowe i składową stałą dla 2 ?[. Rozwiązanie: G J L 2 J?[ 2 ?J 2 cos 2z sin 2z G J L 2 cos 2z sin 2z G J L 4 4 cos 2z cos 2z sin 2z 4 4 cos 2z 1 5 4 cos 2z Obliczenia dla fazy: sin 2z IG J LK ±Q tg ±Q tg 2 cos 2z Obliczenia dla składowej stałej: G J L }¢ z 0 · G J L 2 cos 0 sin 0 2 1 1 ZADANIE 13 – filtry Zapisz równanie filtru: #ñ Rozwiązanie: v?° %Ö PÕ°R %Ö PÕÖR $ñ g > [ > 1 63 MARATON LEKCJA DWUNASTA MARATON ZADAŃ – 18 czerwca 2010 r. ZADANIE 1 – szereg Fouriera Jakie jest dyskretne widmo sygnału s(t)? 1, 1, 0 ¥ À 1¤ 1¥À2 Rozwiązanie: Widmo sygnału dyskretnego to rozwinięcie w szereg Fouriera: A 1 T t & u 0 -1 Ponieważ z podobnym zadaniem problem był podczas kolokwium, stąd nieco zmodyfikowana została treść zadania – obliczenia zostały wykonane dla poniższego sygnału (taki sam sygnał był zadaniem 3 podczas drugiego dużego kolokwium): s(t) A t & u 0 T Na początek musimy policzyć współczynniki ck według wzoru: ¯ ps ¯ ps ¯ ¯ 1 1 QN ?JN¯ } ?J N¯ } ¼ ¼ 64 Całkujemy jedynie pół okresu (od 0 do T/2): s s s 1 1 H 1 H ?J N¯ ?J N¯ QN H } | ?J N ¼ ¼ » ¼ » QN s 1 H H ?J s N 1 G ?JN 1L ¼ 2 » 2» ¼ Musimy w tym miejscu stwierdzić jakie wartości przyjmują współczynniki ck dla k parzystych i dla k nieparzystych (z wyłączeniem k=0, bowiem dzielić przez zero nie wolno, bo jak każdy dobry i niedobry student wie – bo wybuchnie). Można tego dokonać na dwa sposoby – przechodząc do sinusa i cosinusa, albo bawiąc się płaszczyzną liczb zespolonych: metoda SIN/COS QN I teraz podstawiamy: H H cos » sin » 1 G ?JN 1L 2» 2» k '() *ð ò )+, *ð 1 -1 0 2 1 0 -ð H » 0 metoda e–jπk W tej metodzie posługujemy się płaszczyzną liczb zespolonych. Nasza eksponenta to wirujący wektor. Ponieważ ma znak minus przy jednostce urojonej (-jπk), stąd obrót wektora następuje zgodnie ze wskazówkami zegara (bodaj to jest obrót w prawo). Dla k=1 otrzymujemy wyrażenie: ?JN ?J[ ?J ?J[° Czyli nasz wektor obraca się do tyłu o 180 stopni, co graficznie wygląda tak: Im(z) -1 Re(z) 0 Teraz parzyste k - dla k=2 otrzymujemy wyrażenie: ?JN ?J ?J ?J\° Czyli nasz wektor obraca się do tyłu o 360 stopni, co graficznie wygląda tak: 65 Im(z) Re(z) -1 0 1 A w praktyce oznacza, iż wektor przyjmuje wartość 1. Teraz wyznaczamy współczynnik c0 (albo z granicy i tw. D’Hospitala, albo z wartości średniej za pomocą całki): HG1 ?JN L H H ?JN H ?JN H lim ¸¹ lim Q lim N· N· N· 2» 2» 2 2 Q s s 1 1 H ¼ H ¼ H } H} 0 ¼ ¼ ¼ 2 ¼ 2 2 2H , « © » QN 0, ª H © , ¨ 2 » 2¢ 1 » 2¢ »0 ¤ È QN J N¯ NË? H H H H H J ¯[ J ¯?[ J ¯\ J ¯?\ í 2 1 1 3 3 H H J ¯ H G ?J ¯ L G \J ¯ ?\J ¯ L í 2 3 H H H P2 sin3 R í P2 sin R 2 3 H 2H 1 1 sin sin3 sin3 í 2 3 5 66 -3ω0 -2ω0 -ω0 u0 1 0 u 0 ZADANIE 2 – transformata Fourier’a/splot Jakie jest widmo sygnału s(t)? u0 Ý1 ω0 2ω0 3ω0 t [ ½ ½}½ [ / ? [ ¡ 1, 0, 1, 1, 0, 1 ¥ ¥ 1¤ || ¦ 1 1 ¥ ¥ 0 0¥¥1 ¤ || ¬ 1 Rozwiązanie: Splot w dziedzinie czasu to iloczyn w dziedzinie widm: [ / · z [ z z s1(t) 1 t -1 Widmo bramki to: 0 1 [ z sin 2z z s2(t) W przypadku sygnału komplikuje: s2(t) sytuacja się nieco 1 t -1 0 1 67 By policzyć widmo sygnału trójkątnego, najpierw musimy policzyć jego pochodną: ÚÝ 1 2Úu × 2× t 1 0 -1 -1 Otrzymujemy dwie przesunięte bramki (plus, druga bramka obrócona), stąd możemy skorzystać z twierdzenia o przesunięciu: s1(t) 1 t -0,5 >z sin 2z ¼ z 0 1 sin 2z 2 z 0,5 × Ö, ß t -1 0 × Ö, ß 1 68 § 0,5 §[ z sin 2z 0,5 ?J?,Æ sin z J z z § 0,5 § z 1 \ z §[ z § z Korzystając z wzorów Eulera: sin 2z 0,5 ?J,Æ sin z ?J z z sin z sin z sin z J J ?J G ?J L z z z <= ?<= cos > sin > cos > sin > 2 sin > sin z sin z 2 sin z 2 z z Na koniec nie wolno zapomnieć o policzeniu całki z widma, bowiem policzyliśmy tutaj dopiero widmo pochodnej! Wedle definicji: \ z ¯ >3}3 4 ? a a0 Jednak przed dokonaniem podstawienia do wzoru musimy policzyć s3(0). Korzystając z reguły d’Hospitala otrzymujemy: sinz cosz lim ¸¹ lim 1 =· =· z z \ 0 sin z P2 sin 0R 1 0 0 z \ z 1 sin z sin z a0 z 2 0 2z 2z z z No i teraz łączymy finalnie nasze dwa widma – impulsu prostokątnego i trójkątnego dając odpowiedź na pytanie o widmo sygnału s(t), będącego splotem: z [ z z sin 2z sin z sin z sin 2z \ \ z z z ZADANIE 3 – transformata Fourier’a Jakie jest widmo sygnału s(t), pomnożone przez okno Bartlett’a (Bartlett window): [ sin 100 ç ¡ 1 ||, 0, || À 1¤ || ¬ 1 69 Rozwiązanie: Okno Bartlett’a to poniekąd impuls trójkątny (triangular, hat, tent function): w(t) 1 t -1 0 1 Należy w tym miejscu zastosować twierdzenie o modulacji rzeczywistej dla sinusa: > sin · Pa a R 2 ç sin100 Korzystając z poprzedniego zadania, widmo trójkąta to (i tutaj jest zonk, bowiem nie całkowaliśmy widma, które uzyskaliśmy z przesuniętych bramek, stąd odpowiedź będzie tu dla BŁĘDNEGO widma): çz 2 sin z z sin z z sin z z z 2 2 2 z z z z Przy czym częstotliwość f0=50, bowiem: sin100 sin sin2z ZADANIE 4 – splot x(n) h(n) y(n) É g È > ÒË > P0, 1, 2, 3, 4, 3, 2, 1R P0, 1, 1R 70 Rozwiązanie: Ogólny wzór na splot sygnałów dyskretnych to: g È >» » È »> » NË? NË? Na początek zajmiemy się drugą wersja wzoru (zawierającą h(k) ), a następnie pokażemy, iż pierwsza daje takie same rezultaty jak druga. Na początek wzór: g È »> » NË? Musimy się teraz zastanowić nad granicą naszej sumy (sigmy). Czy potrzebujemy zawierać w naszej sumie wszystkie współczynniki h(k) od minus do plus nieskończoności? Otóż nie! Według naszego wzoru: P0, 1, 1R wystarczą jedynie k od 0 do 2 (ba! nawet k od 1 do 2, bowiem h(0)=0, co w rezultacie również da zero). Reasumując zapisujemy: g È »> » NË Możemy oczywiście w tym miejscu zaznaczyć, iż górna granica sumy to N=2 (nawiązując do wzoru z samego początku zadania). Teraz potrzebujemy naszego sygnału wejściowego: > P0, 1, 2, 3, 4, 3, 2, 1R Dla n=0 mamy x(0)=0, dla n=1 mamy x(1)=1, a dla np. n=6 otrzymujemy wynik x(6)=2. Sprawa prosta, więc możemy przystąpić do obliczenia splotu dla y(0): g0 È »>0 » 0>0 0 1>0 1 2>0 2 NË g0 0>0 1>1 2>2 W tym miejscu dokonujemy założenia, iż wszystko co działo się przed chwilą n=0 jest równe również 0: g0 0 0 1 0 1 0 0 Co by czasu nie marnować i siłą rozpędu dalsze współczynniki wyliczyć, przeskoczymy od razu do próbki wyjściowej n=7, czyli y(7): g7 È »>7 » 0>7 0 1>7 1 2>7 2 NË g7 0>7 1>6 2>5 g7 0 1 1 2 1 3 2 3 1 71 Wszystkie te obliczenia można zawrzeć w bardzo ładnej tabeli, która wyłania się poniżej. Jedyne o czym trzeba pamiętać, to o zamianie współczynników dla h(n) – pierwszy współczynnik jest ostatnim, a ostatni pierwszym. Wynika to z definicji splotu, iż dla h(0) przypada np. x(5), a dla h(2) przypada x(3). n -2 -1 0 1 2 3 4 5 6 7 8 9 x(n) 0 0 0 1 2 3 4 3 2 1 0 0 h(n) -1 1 0 y(n) - - 0 0 1 1 1 1 -1 -1 -1 -1 Podczas wykonywania obliczeń z wykorzystaniem tabelki, należy pamiętać o przenoszeniu współczynników transmitancji w prawo, robiąc co próbkę jedno przesunięcie. Jednocześnie można w tym miejscu zaznaczyć, iż cały wiersz dla h(n) można dopełnić zerami (miejsca dla próbek od 1 do 9), bowiem nie zmienia to w żaden sposób wyniku. Poniżej znajdują się przykładowe rozwiązania dla różnych n, według schematu (zapis schematu jest tylko i wyłącznie moim wymysłem, ale działa): g > 2 1 > 1 1 > 0 y(n) dla n równego 0 0*(-1)+0*1+0*0=0 3 1*(-1)+2*1+3*0=1 7 3*(-1)+2*1+1*0=-1 Teraz wykonajmy obliczenia dla pierwszej części wzoru, czyli: g È >» » NË? Dokonajmy stosownych podstawień prowadzących do obliczenia y(7). W tym miejscu musimy jednak wspomnieć, iż granica k się zmienia! Już nie od 0 do 2, lecz od 0 do 7, bowiem tym razem mamy x(k), który składa się z 8 próbek (oczywiście moglibyśmy wszystko liczyć od minus do plus nieskończoności, jedynie pozostaje pytanie po co, skoro zakładamy, że poza tymi 8 próbkami, sygnał ma wartość równą zero): î g7 È >»7 » NË g7 >07 >16 >25 >34 >43 >52 >61 >70 Ponieważ wszystkie h od 3 do 7 uznajemy za zerowe (np. h(5)=0 ), więc w konsekwencji w obliczeniach pozostaną jedynie h(2), h(1) oraz h(0): g7 >52 >61 >70 Podstawiając odpowiednie wartości z obu wektorów (> P0, 1, 2, 3, 4, 3, 2, 1R oraz P0, 1, 1R) otrzymujemy: g7 4 1 3 1 1 0 4 3 1 72 W konsekwencji otrzymaliśmy identyczną odpowiedź. Drugą metodą obliczenia splotu jest przejście do dziedziny Z, ale z tego co widzę, nie jest to opłacalne, bo moje notatki zaraz się ucinają: > ?[ 2 ? 3 ?\ 4 ?^ í ZADANIE 5 – falki Hd 2÷ 2ù Hs swe + 2÷ Gd 2ù swy Gs 5~ ~ » 1 1Ê?[ ~ » 1 5 5~ » 1 ~ É?[ 1 √2 ; 1 √2 È 2» » ÊË Rozwiązanie: Coś nie coś na temat tego zagadnienia można znaleźć tu: http://wavelet.elektro.agh.edu.pl/wyklad/pdf/FalkiCyfrowo.pdf By układ pracował poprawnie(?), filtry muszą spełniać warunki ortogonalności: É?[ È ~ √2 ÊË Musimy teraz policzyć pozostałe transmitancje (Gd, Hs, Gs). By się nam lepiej liczyło dokonamy małej zmiany (modyfikacja powoduje bodaj brak ortogonalności): ~ P1 ; 1R · » 2 Wiemy, iż transmitancja Hd składa się z dwóch elementów, czyli k=2, Hd(0)=1 oraz Hd(1)=1. Podstawiając wartości do wzoru obliczamy: 5~ ~ » 1 1Ê?[ 5~ 0 ~ 2 0 1 1?[ ~ 1 1 1 1 1 5~ 1 ~ 2 1 1 1[?[ ~ 0 1 1 1 1 Stąd otrzymujemy, że transmitancja Gd jest równa: 73 5~ P1 ; 1R Analogicznie powinniśmy otrzymać transmitancję Hs ( P1 ; 1R) oraz Hs (5 P1 ; 1R). Nie będzie spełniony warunek ortogonalności, stąd trzeba będzie przemnożyć s1 przez normę (w naszym przypadku bodaj 2). n -1 0 1 2 3 4 5 6 7 swe 0 1 2 3 0 -1 -2 -3 0 Hd 1 1 0 0 0 0 0 0 0 s1 - 1 3 5 3 -1 -3 -5 -3 Gd 1 -1 s2 - -1 -1 -1 3 1 1 1 -3 Teraz musimy zająć się przejściem sygnałów s1 i s2 przez układ 2÷ (wybierający do 2gą próbkę) i 2ù (nadpróbkowywujący – wypełnia zerami). [ P1, 3, 5, 3, 1, 3, 5, 3R [ " P1, 0, 5, 0, 1, 0, 5, 0R Całe zadanie opiera się na 4-krotnym obliczeniu splotu oraz 2-krotnym podpróbkowaniu i nadpróbkowaniu. ZADANIE 6 – kryterium stabilności W dziedzinie Z mamy warunek (twierdzenie o stabilności filtrów IIR) – filtr IIR jest asymptotycznie stabilny wtedy i tylko wtedy, gdy wszystkie zera wielomianu charakterystycznego leżą wewnątrz koła jednostkowego, tzn.: |Ê | ¥ 1, }¢ 1, 2, 3, … Ì Im(z) Re(z) 0 Reasumując, transmitancję filtru można zapisać również w postaci: 74 [ … [ … Gdzie współczynniki (bieguny transmitancji) pk muszą mieścić się w kole: |N | ¥ 1 Jednocześnie w dziedzinie s (Laplace’a) jest warunek, iż wszystkie współczynniki c są większe od zera: Im(z) Re(z) 0 Przy czym przejście z Z do s dokonuje się za pomocą podstawienia: Przykładowo – niestabilny filtr: 1 1 [ 1 2 2 Q\ 1 Q 3 Q[ 4 Q 8 \ 2 2 1 1P 2 2RP 2 2R 1 \ 3 4 8 Im(z) 2 Q ¥ 0 -2 2 Re(z) 0 75 -2 Przykładowo – stabilny filtr: Im(z) 2 -2 2 Re(z) 0 -2 Przykładowo – poprawne współczynniki: QÊ?[ jQ i Ê?\ ∆É iQÊ?Æ i … h 0 QÊ QÊ? QÊ?^ … 0 Q Q ∆\ S 0 \ 0 QÊ?[ QÊ?\ … 0 Q\ Q[ 0 1 4 8 3 0 QÊ QÊ? … 0 0 0 QÊ?[ … 0 0 5 1 Q W S8 12 Q 0 0 ∆[ 5 ¬ 0 0 0 QÊ … 0 0 5W 8 … 0 … 0 … 0 … … … 0 0 0o n 0n …n Q m ∆ 5 12 8 1 52 ¬ 0 Układ jest stabilny. ZADANIE 7 – energia ∆\ 8 ∆ 416 ¬ 0 Ï |>| } ? Energia w częstotliwości jest równa energii w czasie. Stąd licząc energię dla sygnału: > sin 76 przy całkowaniu otrzymalibyśmy granicę od minus nieskończoności do plus nieskończoności, co mogłoby być bardzo niewygodne do obliczenia. Jednocześnie możemy skorzystać z własności, iż widmem sinc’a jest bramka, której energię bardzo łatwo obliczyć. EGZAMIN 2010 – termin I LEKCJA TRZYNASTA ZADANIE 1 – ortogonalność Czy funkcje Haar’a są ortogonalne do funkcji Walsh’a? Rozwiązanie: Jak zapowiedział Pan Prof. Ziółko - „czegoś takiego jeszcze nie było”. Tak więc byliśmy swego rodzaju ewenementem w dziedzinie Przetwarzania Cyfrowych Sygnałów na naszej Alma mater AGH. Ale wracając do zadania! Sednem okazało się być pisemne uzasadnienie swojego zdania na temat ortogonalności dwóch baz. Na początek należało sobie przypomnieć warunek ortogonalności: ¥ >; g ¬ 0 Ewentualnie warunek ortogonalności dwóch baz („Cyfrowe przetwarzanie sygnałów – od teorii do zastosowań” - T. Zieliński, WKŁ, Warszawa 2009, str. 51) É 0, ¥ %N ; %7 ¬ È N 7 ¡ Q, ÊË[ » £ ¢¤ »¢ Gdzie b* oznacza sprzężenie zespolone (jednostka urojona z przeciwnym znakiem), ale że nasze funkcje są czysto rzeczywiste, stąd ten element nas nie interesuje. Reasumując losujemy dwie dowolne funkcje – jedną z bazy Walsh’a, drugą z bazy Haar’a: P1 , 1 , 1 , 1 , 0 , 0 , 0 , 0R ç P1 , 1 , 1 , 1 , 1 , 1 , 1 , 1R HAAR WALSH 1 1 1 0,5 0 -1 1 0 0,5 -1 Co otrzymamy po wymnożeniu tych dwóch funkcji? Jaki będzie ich iloczyn skalarny? ¥ ; ç ¬ 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 77 ¥ ;ç ¬ 1 1 1 1 0 0 0 0 4 1 0 0,5 1 -1 I w tym miejscu powinno już być po zadaniu. Bazy nie są do siebie ortogonalne i kropka… Ale czemu nie jest? Bo jak ktoś miał pecha (i nie sprawdził większej ilości konfiguracji) to mógł trafić na: P0 , 0 , 0 , 0 , 1 , 1 , 1 , 1R ç P1 , 1 , 1 , 1 , 1 , 1 , 1 , 1R ¥ ; ç ¬ 0 0 0 0 1 1 1 1 1 1 1 1 ¥ ;ç ¬ 1 1 1 1 0 No i jeśli wyciągnęło się za szybko wnioski, to błędna odpowiedź gotowa. Jednakże pojawia się tutaj pewna kontrowersja (abstrahując od tego, iż już stwierdziliśmy, że funkcje nie są do siebie ortogonalne, a jeśli są, to nie wszystkie). Ortogonalność dwóch pierwszych baz. Obie są takie same: ç P1 , 1 , 1 , 1 , 1 , 1 , 1 , 1R Warunek ortogonalności mówi, że funkcje powinny być różne. Tutaj jednak sprawdzamy bardziej warunek unormowania, niż ortogonalności (wzór na warunek unormowania poniżej). ¥ >; > ¬ 1 Powstaje jednak pytanie, czy funkcje unormowane można z góry traktować jako ortogonalne? Na szczęście (lub nie), rozważania te nie wpływają na generalny wniosek o tym, iż bazy ortogonalnymi nie są. ZADANIE 2 – transformata Fouriera Policz transformatę Fourier’a sygnału: ¡ ||, 0, || ¥ 1¤ || ¦ 1 Rozwiązanie: Sygnał kryjący się pod powyższą formułą prezentuje się następująco: 78 Ú× 1 t 0 -1 1 Zadanie to można było rozwiązać na przynajmniej dwa sposoby. Oba w konsekwencji powinny dać odpowiedź: sin 2z sin z z z z SPOSÓB PIERWSZY – widmo pochodnej sygnału: Musimy na początek policzyć pochodną sygnału. Nasz sygnał składa się z 4 elementów. Skok z 0 do 1 w punkcie 1 na osi x, funkcja s(t)=–t w przedziale od -1 do 0, funkcja s(t)=t w przedziale od 0 do 1 oraz skok z 1 na 0 w punkcie 1 na osi x. Ú2 2Ú× 2× 1 t -1 0 1 -1 Teraz konieczne jest właściwe rozbicie sygnału na poszczególne elementy. Otrzymaliśmy dwie delty Diraca (bądź Kroneckera – jak kto woli) oraz dwie bramki prostokątne. Wzór na przesunięcie w czasie wygląda następująco: > ?J¯ a Jeśli w chwili t=(-1) chcemy otrzymać to, co dzieje się dla δ(0), to musimy do sygnału dodać jedynkę, czyli otrzymujemy δ(t+1). 8× ×° t -1 0 79 Ponieważ widmo delty Diraca to 1, stąd otrzymujemy: 1 [ z ?J?[ 1 J Sumaryczne widmo delt to: 1 z ?J[ 1 ?J Îz [ z z J G ?J L J ?J Musimy teraz odwołać się do wzorów Eulera: Czyli: ?<= cos > sin > <= cos > sin > <= ?<= cos > sin > cos > sin > 2 sin > Îz 2 sin 2 sin 2z Teraz musimy obliczyć widma bramek. Korzystając z wyprowadzonych widm dla sygnałów standardowych, widmo impulsu prostokątnego to: 2 sin ¼ sin 2z¼ z Π(t) 1 t -T 0 T Czas trwania naszych bramek to 1, co oznacza, że T=0,5. Jednocześnie musimy stwierdzić jakie są przesunięcia w czasie obu impulsów. × Ö, ß -1 t 0 1 × Ö, ß 80 Po raz drugi odwołujemy się do wzoru dotyczącego przesunięcia sygnału w czasie: § 0,5 §[ z 1 sin z J sin 2z 0,5 ?J?,Æ z z Minus przy powyższym widmie wziął się z tego, iż ten impuls prostokątny jest jeszcze dodatkowo obrócony. Teraz jeszcze musimy zapisać wzór dla drugiej bramki: § 0,5 § z Korzystając z liniowości transformaty Fourier’a: Mz § z §[ z sin 2z 0,5 ?J,Æ sin z ?J z z sin z ?J sin z J sin z ?J G J L z z z Odwołując się po raz kolejny do wzorów Eulera: Otrzymujemy: ?<= <= cos > sin > cos > sin > 2 sin > Mz sin z ?J sin z sin z 2 sin z 2 G J L z z z Dodając teraz do siebie widmo delt Kroneckera oraz bramek otrzymujemy: sin z sin z ~ z Îz Mz 2 sin 2z 2 2 Esin 2z F z z Ponieważ mamy już widmo pochodnej, musimy teraz całkując „wrócić” do widma funkcji pierwotnej. Musimy jednak skorzystać ze specjalnego wzoru („Teoria sygnałów” Izydorczyk, Płonka, Tyma, Helion, Gliwice 2006, str. 35): ¯ >3}3 4 ? a a0 Nim podstawimy wszystko do powyższego wzoru, musimy najpierw sprawdzić, czy X(0)=0: ~ 0 2 sin2 0 2 sin 0 sinz z W tym miejscu rodzi się problem, bowiem nie można dzielić przez zero. W związku z tym skorzystamy z reguły d’Hospitala: sinz cosz ¸¹ lim 1 lim =· =· z Dzięki czemu otrzymujemy, iż: 81 ~ 0 2 sin0 2 sin0 1 0 ~ z 1 sin z 0 z z ~ 2 Esin 2z F 0 z 2z 2z z z sin 2z sin z z z SPOSÓB DRUGI – addytywność: Drugi sposób wymaga nieco innego spojrzenia na sygnał (pozdrowienia dla Rafała M.). Należy w pierwszej kolejności zobaczyć na schemacie bramkę prostokątną, a następnie odjęty od niej impuls trójkątny: Ú× 1 t -1 1 0 Widmo zarówno impulsu prostokątnego, jak i trójkątnego są widmami standardowymi, stąd nie będziemy ich wyprowadzać. Dla impulsu prostokątnego o T=1 otrzymujemy: §z sin 2z ¼ sin 2z 1 sin 2z z z z Natomiast dla impulsu trójkątnego o T=1 otrzymujemy („Teoria sygnałów” Izydorczyk, Płonka, Tyma, Helion, Gliwice 2006, str. 43): 9z 9 4H ¼ sin ¼ 2 41 2z 1 sinz sin 1 2 z 2 z Możemy teraz albo odjąć impuls trójkątny od bramki prostokątnej, lub dodać obrócony impuls trójkątny do bramki prostokątnej – tak czy inaczej wychodzi to samo: z §z 9z z sin 2z sin z z z ZADANIE 3 – DFT 2D Policz DFT następującego obrazu: 82 1 j1 i1 i 1 i i1 i1 i1 h1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1o 1n n 1n 1n 1n 1n 1m Rozwiązanie (podziękowania dla Andrzeja G.): Sam wstęp do rozwiązania tego zadania znajduje się w lekcji 8 o DFT (macierz przejścia dla DFT). Teraz jednak wracając do sedna zadania. Musimy w tym miejscu skorzystać ze wzorów znajdujących się w wykładach CPS dla MSiB (Macierzowy zapis 2-D DFT, strona 24, wykład Analiza częstotliwościowa sygnałów dyskretnych – prof. Mariusz Ziółko): ̂ Ô= Ô Ponieważ Ì= jest równe Ì , więc możemy całe działanie zapisać jako: ̂ Ô Ô Proszę w tym miejscu pamiętać, iż mnożenie macierzy nie jest obojętne w kwestii kolejności! Z tego też powodu stosowanie polecenia fft(nazwa) w MatLabie w przypadku obrazu NIE SPEŁNIA SWEGO ZADANIA, w tym celu stosujemy polecenie fft2(nazwa)! Wykonując dwukrotnie mnożenie: Ô ̂ Ô Ô ̂ Ô NIE OTRZYMUJEMY WIDMA! Przy takim sposobie mnożenia (przez ortonormalność macierzy przejścia) ponownie wracamy do obrazu (w tym miejscu odsyłam do działu dotyczącego bazy Walsha – lekcja piąta)! Mnożenie musi być wykonane w formie: Czyli reasumując wykonujemy działanie: · · · · · · · · 1 j· ó ÷ ô ø õ ù ö o j1 i· ÷ ø ù · ÷ ø ù n i1 i ni · ô ù ó ø ö ÷ õ n i1 ̂ Ô Ô i i· ø · ø · · ø ·n i1 i· õ ÷ ö ø ó ù ô n i1 i· ù ø ÷ · ù ø ÷ n i1 h· ö ù õ ø ô ÷ ó m h1 Po pierwszym mnożeniu otrzymujemy: 8 j0 i0 i 0 ̂ Ô i i0 i0 i0 h0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 · 0o j· 0n i· ni 0n i· 0n i· 0n i· 0n i· 0m h· 0 0 0 0 0 0 0 0 · ó ÷ ô ø õ ù ö 0 0 0 0 0 0 0 0 · ÷ ø ù · ÷ ø ù 0 0 0 0 0 0 0 0 1 · · · · · · · · 1o j· ó ÷ ô ø õ ù ö o 1n i· ÷ ø ù · ÷ ø ù n ni n 1n i· ô ù ó ø ö ÷ õ n 1n i· ø · ø · · ø ·n 1n i· õ ÷ ö ø ó ù ô n 1n i· ù ø ÷ · ù ø ÷ n 1m h· ö ù õ ø ô ÷ ó m · ô ù ó ø ö ÷ õ · ø · ø · ø · ø · õ ÷ ö · ó ù ô · · ù öo ø ùn n ÷ õn ø ·n ù ôn ø ÷n ÷ óm Dlaczego tylko dwie ósemki w rogach? Ponieważ przyjęliśmy, iż strzałka w prawo · to 1, więc mnożąc pierwszą kolumnę macierzy przez pierwszy wiersz macierzy przejścia otrzymujemy: 83 11111111111111118 W pozostałych mnożeniach strzałki się zerują. Wykonanie drugiego mnożenia daje nam rezultat: j16 i0 i0 ̂ Ô i 0 i0 i0 i0 h0 8 4√21 0 0 0 0 0 0 0 8 1 0 0 0 0 0 0 0 8 4√21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 0 0 0 8 4√21 0 0 0 0 0 0 0 8 4√21 o 0 n 0 n 0 n 0 n n 0 n 0 m 0 Dlaczego tak? Ano, ponieważ: 8 · 8 · j 0 i 0 i 0 i 0 i 0 i i 0 h 0 8 · 8 ö 8 · 8 ù 8 · 8 õ 8 · 8 ø 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 · 8 ô 8 · 8 ÷ 8 · 8 ó o 0 0 0 n 0 0 0 n 0 0 0 n 0 0 0 n 0 0 0 n n 0 0 0 m 0 0 0 Kolejnym krokiem w rozwiązaniu jest podstawienie odpowiednich wartości liczbowych pod odpowiednie strzałki (lekcja ósma): 16 8 · ö 8 · ù 8 · õ j0 0 0 0 i 0 0 0 i0 0 0 0 i0 0 0 0 i0 0 0 0 i0 i0 0 0 0 h0 0 0 0 √u √u ò u u ó j16 8 E1 √u ò √uF 8 1 u u i i0 0 0 i0 0 0 i 0 0 i0 0 0 i0 0 0 i0 i0 0 0 h0 0 0 0 8 · ô 8 · ÷ 8 · ó o 0 0 0 0 n 0 0 0 0 n 0 0 0 0 n 0 0 0 0 n 0 0 0 0 n n 0 0 0 0 m 0 0 0 0 √u √u ò u u ô 8 E1 √u √u ò F u u 0 0 0 0 0 0 0 j16 G8 4√2 4√2L 8 1 G8 4√2 4√2L 0 0 0 i0 0 0 0 i0 0 0 0 i0 0 0 0 i0 i0 0 0 0 i0 0 0 0 h0 0 0 0 j16 8 4√21 8 1 8 4√21 0 0 0 i0 0 0 0 i0 0 0 0 i0 0 0 0 i0 i0 0 0 0 i0 0 0 0 h0 0 0 0 √u √u ò u u √u √u ò u u õ 0 8 E1 0 0 0 0 0 0 0 ö √u √u ò F 8 1 u u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 E1 √u √u ò Fo u u n n 0 n 0 n 0 n 0 n 0 n n 0 m 0 0 G8 4√2 4√2L 8 1 G8 4√2 4√2Lo 0 0 0 0 n 0 0 0 0 n 0 0 0 0 n 0 0 0 0 n n 0 0 0 0 n 0 0 0 0 m 0 0 0 0 0 8 4√21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 0 0 0 8 4√21 o 0 n 0 n 0 n 0 n n 0 n 0 m 0 84 ZADANIE 4 – filtry Jaka jest odpowiedź impulsowa filtru [pû ? Czy jest to filtr stabilny? Rozwiązanie: Na początek przypomnijmy sobie wzór na sumę wyrazów nieskończonego ciągu geometrycznego: ì , || ¥ 1 1 Porównując ze sobą wzór na transmitancję H(z) oraz sumę ciągu, otrzymujemy niemalże gotową odpowiedź na pierwszą część zadania: 2 1 1 2 ?[ 2 2 ?[ Skoro mamy już te wszystkie informacje, to wiemy, że nasz ciąg musiał wyglądać w przybliżeniu w sposób następujący: 2 2 2 \ a í 2P1 í R p p Ê 2 a 2 È 2 È2Ê ?Ê ÊË ÊË Przyrównując powyższe wyprowadzenie z wzorem na transformatę Z otrzymujemy bardzo łatwo odpowiedź: p a È > ?Ê ÊË? Tak więc otrzymujemy informację, iż odpowiedź impulsowa filtru to: 2 2Ê Teraz druga część pytania – czy filtr jest stabilny? Skorzystajmy z drugiego sposobu zapisu transmitancji w dziedzinie Z: ?Ê ∑ [ í ÊË Ê ?Ê [ í 1 ∑É ÊË[ Ê Warunek mówi, iż filtr jest stabilny jeśli: |N | ¥ 1 Dlaczego? Ponieważ w momencie gdy dół ułamka (tak tak, nie pamiętam, że to się nazywa mianownik) zbliża się do zera, to cała funkcja zmierza do nieskończoności. 2 2 ?[ 2 1 2 85 [ 2 |[ | 2 ¬ 1 Warunek stabilności filtru niespełniony – filtr nie jest stabilny. EGZAMIN 2010 – termin II LEKCJA CZTERNASTA ZADANIE 1 – aproksymacja Który z sygnałów , s[ sin 2 czy s cos 2 jest lepiej, w sensie minimalizacji energii odchyłki w przestrzeni : 0,1, reprezentowany przez pierwsze cztery funkcje Walsha? (2pkt) Rozwiązanie: Zadanie 6 w lekcji jedenastej jest bardzo podobne, stąd będziemy się nim posiłkować. W zadaniu mamy dane dwie funkcje aproksymowane (sinus i cosinus) i cztery funkcje aproksymujące – pierwsze cztery funkcje Walsha. Na początek przypomnijmy sobie jak one wyglądają korzystając z zapisu macierzowego: 1 1 1 1 Ô¢ ã1 1 1 1ä 1 1 1 1 1 1 1 1 Na początek zajmiemy się sinusem. Nasz sygnał ma formę: [ sin Jednakże w tym miejscu pojawia się ACHTUNG! Funkcje Walsha zmieniają się od 0 do 1, a sinus od 0 do 2π, stąd nasz sygnał zapiszemy w formie: [ sin2 WSPÓŁCZYNNIKI Zabieramy się więc za zadanie. Przez oznaczenie [ rozumiemy sygnał, a przez oznaczenie ç , pierwszą funkcję Walsha (ç P1 1 1 1R). Nasz sygnał po aproksymacji to ̃[ . [ [ ̃[ ç [ ç[ ç \ ç\ ¥ [ ; ç ¬ [ ç } sin2 1 } Współczynnik [ : [ [ ,Æ 1 1 1 Pcos2R Pcos2 cos0R 0 0 2 2 [ [ ¥ [ ; ç[ ¬ [ ç[ } sin2 1 } sin2 1 } ,Æ 1 1 1 1 0,5 0,5 Pcos2R 1 Pcos2R Pcos2R Pcos2R 0,5 0,5 0 0 2 2 2 86 [ Współczynnik : 1 1 2 Pcos cos0 cos2 cosR P1 1 1 1R 2 2 ,Æ ,Æ ,îÆ [ ¥ [ ; ç ¬ sin2 1 } sin2 1 } sin2 1 } sin2 1 } ,Æ 1 0,25 Pcos2R 0,5 Pcos2R0,75 Pcos2R 1 Pcos2R 0,75 0,25 0,5 0 2 1 3 3 cos 1 1 cos cos 1 1 cos 2 2 2 2 2 Ponieważ cos cos 0, więc: Współczynnik \ : ,îÆ ,Æ \ ,Æ 1 3 2 cos 2 cos 0 2 2 2 ,Æ ,îÆ [ \ ¥ [ ; ç\ ¬ sin2 1 } sin2 1 } sin2 1 } sin2 1 } \ \ ,Æ ,Æ ,îÆ 1 0,25 Pcos2R 0,5 Pcos2R0,75 Pcos2R 1 Pcos2R 0,75 0,25 0,5 0 2 1 3 3 cos 1 1 cos cos 1 1 cos 0 2 2 2 2 2 Czyli nasz aproksymowany sygnał ma postać: 2/ 0 1 1 1 1 2/ 2/ ̃[ ã1 1 1 1ä ã äã ä 2/ 1 1 1 1 0 2/ 1 1 1 1 0 Teraz współczynniki musimy wyliczyć dla cosinusa. By nie rozpisywać wszystkiego od początku, zamieniamy [ [ cosinusy na sinusy jako wyniki całek oraz zamiast , ponieważ: [ [ cos2 } 1 sin2 2 ¥ ; ç ¬ ç } cos2 1 } Współczynnik [ : 1 1 1 Psin2R Psin2 sin0R 0 0 2 2 87 [ 1 1 1 1 0,5 0,5 Psin2R 1 Psin2R Psin2R Psin2R 0,5 0,5 0 0 2 2 2 1 [ P0 0 0 0R 0 2 Współczynnik : 1 0,25 Psin2R 0,5 Psin2R0,75 Psin2R 1 Psin2R 0,75 0,25 0,5 0 2 Współczynnik \ : 1 2 P1 0 0 1 1 0 0 1R 2 1 0,25 Psin2R 0,5 Psin2R0,75 Psin2R 1 \ Psin2R 0 0,75 0,25 0,5 0 2 Reasumując, nasz aproksymowany sygnał ma postać: 2/ 0 1 1 1 1 0 ä ã2/ä ̃ ã1 1 1 1ä ã 2/ 2/ 1 1 1 1 2/ 1 1 1 1 0 Teraz musimy skorzystać z minimalizacji energii odchyłki, czyli wzorku: ÂÒ<Ê ì ç [ ç[ ç \ ç\ } ÂÒ<Ê <Ê ÂÒ<Ê á [ 2 sin2 ç[ } [ 2 cos2 ç } ODCHYŁKA SINUS No i teraz policzenie tych całek wymaga trochę ekwilibrystyki… Pomijając na moment granicę i podstawiając, iż ç : [ Psin2 R } Psin 2 2 sin2 R } Rozbijamy całkę na 3 mniejsze (stałe w wynikach całek pomijamy, ponieważ i tak później pojawia się oznaczenie w całce, które samo w sobie eliminuje stałą): 88 Psin2 R } sin 2 } 2 sin2 } } Problematycznym elementem jest całka z sin 2, ale nam, jako wytrawnym matematykom, na pewno nie sprawi trudności… > sin2 g | sin2 1 sin2 } | > 2 cos2 g cos2 2 sin2 } 1 1 cos2 sin2 P2 cos2R cos2 } 2 2 Ponieważ całka z sin2 jest całką pętlącą się (zwrotną), stąd licząc całkę znajdującą się po prawej stronie równania (całka z cos 2), powinniśmy powrócić do całki znajdującej się po lewej stronie równania (całka z sin 2): sin 2 } 1 cos2 sin2 cos 2 } 2 Korzystając z własności trygonometrycznej (cos 2 1 sin2) otrzymujemy: sin 2 } sin 2 } 1 cos2 sin2 P1 sin 2R } 2 1 1 cos2 sin2 } sin 2 } cos2 sin2 } sin 2 } 2 2 Dodajemy teraz stronami całkę z sinus kwadrat: 2 sin 2 } 1 cos2 sin2 2 Otrzymując wynik (korzystając z tożsamości trygonometrycznej 2 cosH sinH sin 2H): sin2 } Wprowadzając oznaczenie otrzymujemy: 1 4 sin4 cos2 sin2 4 2 8 4 sin4 1 4 1 sin4 1 4 0 1 sin 2 } 0 8 8 8 2 0 [ Wracając teraz do naszych do pełnej formy rozwiązania zadanej całki: Psin2 R } sin 2 } 2 sin2 } } Musimy pamiętać, iż funkcja ç[ też jest zmienna w czasie, stąd dwie ostatnie całki po prawej muszą być liczone przedziałami: [ [ 2 sin2 } 2 2 ç sin2 } [ 89 ,Æ [ ,Æ ,îÆ [ 4 2 sin2 } q 1 sin2 } 1 sin2 } 1 sin2 } 1 sin2 }r [ ,Æ ,Æ ,Æ ,Æ ,îÆ ,îÆ [ 4 2 sin2 } q sin2 } sin2 } sin2 } sin2 }r [ 2 sin2 } [ ,Æ 4 1 1 0,5 0,75 0,25 Pcos2R Pcos2R Pcos2R Pcos2R 0,75 0,25 0,5 0 2 2 sin2 } 2 2 4 P1 0 1 0 0 1 1 0R 2 Teraz druga całka: [ ,îÆ ,Æ [ ,Æ [ ,Æ ,îÆ [ 2 4 4 } ç[ } ç[ } q 1 } 1 } 1 } 1 }r ,Æ [ ,Æ ,îÆ [ ,Æ [ ,Æ ,îÆ 4 4 4 4 } q } } } }r } P1 0R ,Æ ,Æ ,îÆ Dzięki czemu otrzymujemy wreszcie wynik: [ ÂÒ<Ê <Ê sin2 2 1 4 4 1 ç[ } 2 2 ODCHYŁKA COSINUS Dla cosinusa wynik całki wyglądają podobnie: ÂÒ<Ê á [ 2 cos2 ç } Pcos2 R } cos 2 } 2 cos2 } } Korzystając już z tablic matematycznych oraz od razu wprowadzając oznaczenie otrzymujemy: [ cos 2 } 4 sin4 1 4 1 sin4 1 1 0 8 8 2 0 2 2 ç P1 1 1 1Rs 90 [ [ 2 cos2 } 2 ,Æ [ ,Æ 2 ç cos2 } [ ,îÆ [ 4 2 cos2 } q cos2 } cos2 } cos2 } cos2 }r [ 2 cos2 } [ [ ,Æ ,îÆ 2 1 0,5 0,75 0,25 Psin2R Psin2R Psin2R Psin2R 0,75 0,25 0,5 0 2 cos2 } ,Æ [ 2 2 4 P1 1 1 1R 2 [ [ 2 4 4 4 4 } ç[ } ç[ } } P1 0R [ ÂÒ<Ê á cos2 2 1 ç } 2 WNIOSKI Podsumowując, otrzymaliśmy, iż odchyłka dla cosinusa i sinusa jest taka sama, co oznacza, iż są one w takim samym stopniu aproksymowane (pierwsze 4 funkcje Walsha tak samo dobrze nadają się do przybliżenia cosinusa jak i sinusa, ponieważ posiadają taki sam błąd). ÂÒ<Ê <Ê ÂÒ<Ê á 1 2 Post Scriptum: Wniosek z tego zadania jest taki – na egzaminie warto mieć tablice matematyczne. Oczywiście znając tożsamość [?;< trygonometryczną w postaci sin H całkę liczymy w tempie ekspresowym: 1 1 1 1 1 1 sin 2 } P1 cos4R } } cos4 } sin4 2 2 2 2 2 4 ZADANIE 2 – energia Jaka jest energia sygnału, w sensie całki z kwadratu sygnału, jeśli jego widmo Fouriera ma postać ? (2 pkt) Rozwiązanie (nie do końca jestem pewien jego poprawności): W tym zadaniu należało skorzystać ze wzoru na energię sygnału, przy czym najlepiej było obliczyć tą energię dla sygnału w dziedzinie czasu, bowiem energia zarówno dla widma jak i sygnału jest identyczna – równość Parsevala: 91 1 |>| } |a| } ? ? Na początek zacznijmy od transformaty Fourier’a bramki prostokątnej (impuls prostokątny): s ? ?J¯ s } ?J¯ } ?s ¼ 1 ?Js Js sin ¼ sin 2z¼ sin 2z¼ ?J¯ b ¤ 2 2 2z z ¼ Ponieważ widmo naszego sygnału to przekształcając sinc do dziedziny czasu: , więc możemy wywnioskować, iż ¼ 1. Reasumując, sin2z sin 0, 2 s ¡ 1, z || ¬ ¼¤ || À ¼ Ponieważ musimy obliczyć pole pod prostokątem, stąd zajmiemy się jedynie jego połową, mnożąc wynik całki dwukrotnie, ponownie wracając do równości Parsevala: s s s |>| } 2 |s | } 2 |1| } 2 } 2 P¼ 0R 2 1 2 ? Sygnał z tego zadania okazuje się być znaną bramką, a jego energia wynosi 2. ZADANIE 3 – IDFT Jaki obraz ma widmo ̂ ? (1 pkt) ̂ X 6 0 2 0 Z 6 0 2 0 Rozwiązanie: Mając na egzaminie program MatLab, zadanie rozwiązujemy wpisując komendę ifft2(nazwa)… Nie mając jednak programu i rozwiązując to zadanie na kartce, dobrze jest przypomnieć sobie schemat postępowania podczas obliczania DFT 2D (lekcja ósma). Wzór na DFT 2D to: ̂ Ô= Ô Ponieważ macierz widma nie jest kwadratowa, stąd będziemy musieli stworzyć dwie macierze przejścia o różnych wymiarach. Należy jednak pamiętać, iż mimo tego, wciąż są to macierze symetryczne: Ô= Ô=?[ Ô Ô?[ Co powoduje, iż nie musimy wykonywać procesu odwracania macierzy, by wykonać poniższe działanie: Ô=?[ ̂ Ô?[ Ô= ̂ Ô By wykonać działanie Ô= ̂ , macierz Ô= musi mieć wymiary 2 na 2. Musimy jednak skorzystać z wzoru (MACIERZ PRZEJŚCIA dla DFT – lekcja ósma): ç N Ê ?J N Ê É cos 2 2 »= = sin »= = Ì= Ì= 92 Gdzie Ì= 2: ç N Ê cos »= = sin »= = ç , cos 0 0 sin 0 0 1 0 1 ç ,[ cos 0 1 sin 0 1 1 0 1 ç ,[ cos 1 0 sin 1 0 1 0 1 ç [,[ cos 1 1 sin 1 1 1 0 1 Ô= ̂ Ô= X 1 1 Z 1 1 1 1 6 0 2 0 0 X ZX 1 6 0 2 0 12 0 0 0 Z 0 4 0 Teraz potrzebujemy wykonać działanie Ô . W tym celu macierz przejścia Ô musi mieć tyle wierszy, co macierz kolumn, czyli Ì 4: 2 2 ç N= Ê= cos E » F sin E » F cos » sin » Ì Ì 2 2 Wypełniając według wzoru przykładowe 4 elementy: ç , cos 0 0 sin 0 0 1 0 1 ç [,[ cos 1 1 sin 1 1 0 1 ç , cos 2 2 sin 2 2 1 0 1 ç \,\ cos 3 3 sin 3 3 1 0 1 1 1 Ô ã 1 1 1 1 1 1 ä 1 1 1 1 1 W celu weryfikacji zawsze można skorzystać z MatLab’a (DFT dla MatLab – lekcja ósma, w serii poleceń zamieniamy stałą z N=8 na N=4). Wykonujemy teraz drugie mnożenie: Ô= ̂ Ô Ô X 0 12 1 1 1 1 1 1 0 0 0 0 Zã äX 1 1 1 1 0 4 0 8 1 1 1 By wykalibrować obraz dzielimy macierz przez odpowiednie współczynniki: 1 1 0 0 X Ì= Ì 8 16 1 1 0 0 0 Z X 8 16 2 4 8 0 16 0 0 0 0 ZX 8 16 1 2 0 0 16 8 0 Z 16 0 0 Z 1 2 ZADANIE 4 – filtry Jaka jest odpowiedź impulsowa filtru [?,Æû ? (1 pkt) Rozwiązanie: Na początek przypomnijmy sobie wzór na sumę wyrazów nieskończonego ciągu geometrycznego: 93 ì , || ¥ 1 1 Porównując ze sobą wzór na transmitancję H(z) oraz sumę ciągu, otrzymujemy niemalże gotową odpowiedź na pierwszą część zadania: 2 1 1 2 ?[ 1 ?[ 2 2 Skoro mamy już te wszystkie informacje, to wiemy, że nasz ciąg musiał wyglądać w przybliżeniu w sposób następujący: 1 1 1 \ a í 2P1 í R 2 2 2 p p 1 Ê 1 Ê a 2 È 2 È ?Ê 2 2 ÊË ÊË Przyrównując powyższe wyprowadzenie z wzorem na transformatę Z otrzymujemy bardzo łatwo odpowiedź: p a È > ?Ê ÊË? Tak więc otrzymujemy informację, iż odpowiedź impulsowa filtru to: 1 Ê 2 2 0, ¥0 Ê ¤ 1 > 2 , ¦0 2 94