Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf ·...

16

Click here to load reader

Transcript of Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf ·...

Page 1: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

1

Instrukcja do laboratorium z cyfrowego przetwarzania sygnałów

Ćwiczenie 1

Sygnały z czasem dyskretnym i podstawy korzystania z pakietu MATLAB

Przemysław Korohoda, KE, AGH Zawartość instrukcji: 1 Materiał z zakresu DSP 2 Korzystanie z pakietu MATLAB 3 Zadania do wykonania 4 Dodatek teoretyczny nr 1 - Próbkowanie i odtwarzanie sygnałów ciągłych - twierdzenie o minimalnej częstotliwości próbkowania

Page 2: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

2

Laboratorium Cyfrowego Przetwarzania Sygnałów (ang. skrót DSP = Digital Signal Processing) w znacznej mierze bazuje na oprogramowaniu MATLAB funkcjonującym w systemie Windows, na komputerze klasy PC. Dlatego też oprócz wiedzy z zakresu DSP, do poprawnej realizacji ćwiczeń konieczna jest znajomość podstaw korzystania z komputera PC z systemem okienkowym (Windows) oraz pakietu MATLAB. Zakłada się, że pierwszy z wymienionych elementów studenci mają już opanowany, natomiast wybrane elementy obsługi pakietu MATLAB będą stopniowo wprowadzane w ramach kolejnych ćwiczeń. Przygotowanie się do ćwiczeń może być w tym zakresie ułatwione dzięki korzystaniu z dostępnej literatury, np.: Mrozek B., Mrozek Z.: MATLAB 5.x, SIMULINK 2.x - poradnik użytkownika, PLJ, Warszawa 1998. Na instrukcję składają się następujące części: 1 Materiał z zakresu DSP 2 Korzystanie z pakietu MATLAB 3 Zadania do wykonania 4 Dodatek teoretyczny nr 1 - materiał przypominający i uzupełniający Do sprawnego wykonania ćwiczenia nie jest konieczna wcześniejsza praktyczna znajomość pakietu MATLAB, jednak niezbędna jest dobra orientacja w materiale przedstawionym w częściach 1 oraz 2. Dlatego też wskazane jest dokładne przeczytanie tych części oraz przemyślenie podanych przykładów. UWAGA: znajomość i zrozumienie części 1 oraz 2 mogą zostać przez prowadzącego skontrolowane w trakcie zajęć. “Znajomość i zrozumienie” materiału podanego w Dodatku nr 1 nie jest w tym ćwiczeniu niezbędna, jednak stanowi wprowadzenie do późniejszych ćwiczeń i dlatego nie warto tego odkładać “na potem”. W razie niejasności należy skonsultować się przed zajęciami ( tzn. na przykład w terminie konsultacji ) z prowadzącym, bezpośrednio lub poprzez e-mail: [email protected]

Page 3: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

3

1 Materiał z zakresu DSP Sygnał cyfrowy jest to ciąg liczb zapisanych z określoną precyzją, którym przypisane są indeksy. Zazwyczaj indeksy są kolejnymi liczbami całkowitymi z przedziału zawartego w zakresie od minus do plus nieskończoności. W przypadku ćwiczeń z wykorzystaniem pakietu MATLAB precyzja zapisu danych liczbowych jest kilkubajtowa i w większości przypadków będzie ją można uznać za niemal nieskończoną. Sygnał, w którym dyskretyzacji poddano jedynie dziedzinę, nazywa się często sygnałem z czasem dyskretnym. Słowo “czas” należy tutaj rozumieć umownie, gdyż wspomniany sygnał może na przykład reprezentować temperaturę wody jeziora w zależności od (zdyskretyzowanej) głębokości. W dalszej części instrukcji termin “sygnał cyfrowy” będzie oznaczał przybliżenie sygnału z czasem dyskretnym z dokładnością ograniczoną do skończonej precyzji pakietu MATLAB. Należy pamiętać, że w rzeczywistych systemach cyfrowych precyzja zapisu odgrywa znaczną rolę w projektowaniu algorytmu DSP. Poznaniu tych zagadnień będą służyły ćwiczenia z wykorzystaniem sprzętowego pakietu MOTOROLI z procesorem stałoprzecinkowym. Sygnał cyfrowy może pochodzić z próbkowania i przetwarzania analogowo-cyfrowego sygnału ciągłego. Może jednak również powstać wprost w postaci ciągu liczb określonego w jakiś inny sposób. Przykładowo można przyjąć, że ciąg liczb całkowitych od 1 do 10 o indeksach od -5 do +4 jest sygnałem cyfrowym, bez konieczności wiązania tego ciągu z jakimkolwiek sygnałem ciągłym. Przy tak określonym przedziale indeksów zakłada się zazwyczaj, że poza nim wartości sygnału są zerowe:

x x x x x x x xx x

x n dla n

[ ] ; [ ] ; [ ] ; [ ] ; [ ] ; [ ] ; [ ] ; [ ] ;[ ] ; [ ] ;

[ ] { , , , , }

− = − = − = − = − = = = == == ∉ − −

5 1 4 2 3 3 2 4 1 5 0 6 1 7 2 83 9 4 10

0 5 4 3 4

(1)

Dygresja: Zapis indeksu w nawiasie kwadratowym jest stosowany dla podkreślenia, że jest to zdyskretyzowana zmienna niezależna. Jednak w notacji MATLAB’a nawias kwadratowy służy do opisu zawartości (a nie indeksów) macierzy - patrz przykłady w części 2 - natomiast indeksy podaje się w nawiasach okrągłych. Należy więc rozróżniać zapis za pomocą wzoru od zapisu elementu syntaktycznego MATLAB’a. Zatem sygnał cyfrowy można przedstawić w postaci układu dwóch wektorów o tej samej długości: wektora wartości ciągu oraz wektora indeksów. Dla powyższego przykładu (zapis wektorów już w notacji MATLAB’a):

xn== − − − − −

[ , , , , , , , , , ][ , , , , , , , , , ]1 2 3 4 5 6 7 8 9 10

5 4 3 2 1 0 1 2 3 4 (2)

W przypadku domniemanego wydłużenia powyższego fragmentu sygnału zerami zapis (2) można w razie potrzeby zastąpić na przykład takim:

xn== − − − − − − − −

[ , , , , , , , , , , , , , , ][ , , , , , , , , , , , , , , ]0 0 0 1 2 3 4 5 6 7 8 9 10 0 0

8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 (2a)

Niekiedy przyjmuje się, że podany ciąg reprezentuje fragment sygnału okresowego - jak w takiej sytuacji wyglądałoby przedstawienie dłuższego fragmentu sygnału?

Page 4: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

4

Sygnał x n[ ] można przedstawić również na wykresie:

Rys. 1.1. Wykres przykładowego sygnału z “czasem” dyskretnym

Niekiedy dla potrzeb pewnych rozważań wystarczy rozpatrywać jedynie wartości ciągu i wówczas do opisu sygnału cyfrowego wystarczy wektor x . Naturalnie w pakiecie MATLAB nie jest konieczne używanie nazw x oraz n , jednak z punktu widzenia wymiany informacji z pozostałymi studentami oraz z prowadzącym korzystne jest stosowanie się do pewnej umowy. Jeżeli sygnał cyfrowy traktujemy domyślnie jako pochodzący z sygnału ciągłego określonego w czasie, to indeksy można nazwać indeksami czasowymi. Związek pomiędzy sygnałem ciągłym x tC ( ) - określonym dla dziedziny t - a cyfrowym - określonym przez idealne równomierne próbkowanie z okresem T - można przedstawić następująco:

x n x n TC[ ] ( )= ⋅ (3) Określonemu ciągowi x n[ ] może odpowiadać nieskończenie wiele sygnałów ciągłych. Jednak jeżeli założymy, że sygnały ciągłe spełniają pewien warunek (patrz twierdzenie o próbkowaniu w dodatku teoretycznym nr 1), to związek (3) jest obustronnie jednoznaczny. Warto podkreślić, że powszechnie stosuje się dwie interpretacje słowa “próbkowanie”: a) z punktu widzenia teorii sygnałów jest to pomnożenie danego sygnału (funkcji) ciągłego przez ciąg delt

Diraca (czyli pseudo-funkcję określoną na tej samej, co próbkowana funkcja, ciągłej dziedzinie ) - wynikiem jest zmodulowana amplitudowo pseudo-funkcja x tS ( ) , w dalszym ciągu określona na dziedzinie ciągłej:

x t x t g t g t n T tS C T Tn

( ) ( ) ( ) : ( ) ( )= ⋅ = ⋅ −=−∞

+∞

∑δ (4)

x t x n T n T tS Cn

( ) ( ) ( )= ⋅ ⋅ ⋅ −=−∞

+∞

∑ δ (5)

b) z punktu widzenia zastosowań praktycznych oznacza to utworzenie ciągu wartości chwilowych sygnału

ciągłego (wzór (3)) - wynikiem jest zatem ciąg wartości z odpowiednimi indeksami.

Page 5: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

5

Rys. 1.2. Dwie interpretacje pojęcia próbkowania: a) przez pomnożenie z funkcją grzebieniową,

b) przez utworzenie ciągu z wartości chwilowych próbkowanej funkcji Pomiędzy oboma powyższymi podejściami istnieje ścisły związek, umożliwiający wykorzystanie teorii sygnałów do opisu właściwości próbkowania w wersji b). Wartości ciągu x n[ ] odpowiadają amplitudom odpowiednich delt Diraca otrzymanym w wyniku próbkowania w wersji a). Z punktu widzenia rozmaitych rozważań różnica nie jest istotna, jednak chcąc, przykładowo, stosować ścisłe zależności matematyczne do wykazania powiązań pomiędzy sygnałem cyfrowym i ciągłym, należy o niej pamiętać. Pakiet MATLAB w swojej podstawowej wersji nie ma możliwości tworzenia zmiennych będących funkcjami ciągłymi. Można jednak określić ciąg cyfrowy korzystając z przepisu funkcji ciągłej spróbkowanej w równych odstępach dziedziny (czyli “czasu”):

x nn T

TC[ ] cos=⋅ ⋅ ⋅

2

1

πϕ (6)

W rozważaniach z zakresu DSP istotną rolę odgrywa pewien sygnał, którego nie otrzyma się z próbkowania żadnego rzeczywistego sygnału ciągłego - ciąg spróbkowanej zespolonej funkcji eksponencjalnej:

x n ee

j n TT[ ] =

⋅ ⋅ ⋅ ⋅−

2

1

πϕ

(7) gdzie j to jednostka urojona. Sygnał cyfrowy xe n[ ] jest zatem zespolony. Jak wynika z powyższych stwierdzeń, w celu przygotowania się do ćwiczeń należy sobie również powtórzyć podstawowe wiadomości z zakresu liczb zespolonych.

Page 6: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

6

Dwa inne, istotne z punktu widzenia teorii DSP sygnały cyfrowe to: 1) delta Kroneckera:

d ndla ndla n

[ ] ==≠

1 00 0

(8)

2) skok jednostkowy:

u ndla ndla n

[ ] =≥<

1 00 0

(9)

Skok jednostkowy można wyrazić za pomocą kombinacji liniowej delt Kroneckera (proszę się nad tym wzorem zastanowić):

u n d kk

n

[ ] [ ]==−∞∑ (10)

Przesunięcie w dziedzinie indeksów (np. czasowych) oznacza, że sygnał poddany jest następującej zmianie:

x n x n kopoźnienie o k[ ] [ ] → − (11) Korzystając z (11) można wyrazić deltę Kroneckera za pomocą kombinacji liniowej przesuniętych skoków jednostkowych - jak? Inną ciekawą zależnością jest wyrażenie dowolnego ciągu za pomocą kombinacji liniowej przesuniętych delt Kroneckera (warto ten wzór zrozumieć):

x n x k d n kk

[ ] [ ] [ ]= ⋅ −=−∞

∑ (12)

W zapisach takich jak (10) lub (12) należy zwrócić uwagę na oznaczenie indeksów. Jeżeli użyjemy litery “n” dla indeksu sygnału po lewej stronie, to, jeśli tylko sygnał ten nie jest ciągiem stałym, litera ta musi się pojawić gdzieś po prawej stronie zależności. Ponadto żadna operacja typu sumowanie nie może być realizowana po indeksie oznaczonym taką literą. Zatem na przykład taki zapis:

x n y nn

[ ] [ ]==−∞∑

0

(13)

byłby najprawdopodobniej efektem pomyłki, gdyż oznacza, że x[n] jest stałe (nie zależy od “n”). Jeżeli jednak jesteśmy w pełni świadomi tego, jak powinna wyglądać dana zależność, to nic poza przyjętą umową nie wymusza stosowania takich, a nie innych, liter dla oznaczenia indeksów. Zależność (12) będzie nadal słuszna, gdy zapiszemy ją na przykład tak:

x k x n d k nn

[ ] [ ] [ ]= ⋅ −=−∞

∑ (12b)

W przypadku indeksów delt Kroneckera kolejność indeksów k oraz n we wzorze (12) lub (12b) nie ma żadnego znaczenia (dlaczego?).

Page 7: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

7

2 Korzystanie z pakietu MATLAB MATLAB jest środowiskiem programistycznym, w którym dane liczbowe reprezentowane są w postaci macierzy. Dlatego też należy przypomnieć sobie podstawowe wiadomości z zakresu rachunku macierzowego - w szczególności mnożenie. Ponadto warto zwrócić uwagę na to, że a) pojedyncza liczba to macierz o jednym wierszu i jednej kolumnie, natomiast b) ciąg liczb można przedstawić w postaci wektora wierszowego lub kolumnowego (z punktu widzenia

obliczeń macierzowych różnica jest w tym przypadku istotna). Zapis macierzowy jest szczególnie wygodny w przedstawianiu operacji z zakresu DSP i dlatego też pakiet MATLAB jest dobrym narzędziem do poznawania tej dziedziny. Zestawienie najważniejszych uwag i spostrzeżeń: • Praca z programem MATLAB może polegać na uruchamianiu opracowanych wcześniej programów lub

podawaniu odpowiednich poleceń na bieżąco.

• Polecenia w trybie komend podaje się z klawiatury po wypisanym przez komputer na ekranie znaku zachęty czyli: >> . Komenda taka jest wykonywana dopiero po naciśnięciu klawisza [Enter].

• Zakończenie komendy średnikiem powoduje, że wynik operacji nie jest wypisywany na ekranie.

• Podstawowym typem danych jest macierz - wektor poziomy lub pionowy oraz pojedyncza liczba są szczególnymi przypadkami macierzy.

• Indeksy elementów macierzy rozpoczynają się w MATLAB’ie od “1” - zatem pierwszy element wektora “x” to x(1), a nie x(0).

• Rozróżniane są litery duże i małe.

• Zmienne są inicjalizowane automatycznie, bez ingerencji użytkownika, w trakcie pierwszego przypisania im wartości. Nie jest zatem konieczne podawanie rozmiaru ani typu zmiennej przed jej zapisaniem.

• Stałe tekstowe podaje się w pojedynczym cudzysłowie, np: ‘sygnal delty’.

• Istotne jest rozróżnianie opisu wymiarów macierzy, czyli (M,N), co oznacza M wierszy i N kolumn, od wektora o wartościach od M do N z krokiem 1, czyli M:N.

• Istnieje predefiniowana zmienna ans, która przyjmuje wynik operacji, jeśli użytkownik nie określi zmiennej wynikowej. Zmienna ans zawiera jedynie wynik ostatniej operacji, dla której użytkownik nie podał nazwy zmiennej wynikowej; można się nią posługiwać jak każdą inną zmienną; jej wymiary jako macierzy zależą od wyniku operacji.

• Inne przydatne zmienne predefiniowane to jednostka urojona ( i oraz j ) oraz π ( pi ). Są one automatycznie inicjalizowane za każdym razem bezpośrednio po uruchomieniu programu MATLAB.

• Jeżeli utworzymy zmienną o nazwie identycznej z nazwą funkcji (na przykład rand ) , to funkcja ta przestanie być dostępna do czasu ponownego uruchomienia programu MATLAB.

• Klawisze pionowego ruchu kursora umożliwiają przeszukiwanie bufora podanych uprzednio komend; po wyświetleniu wybranej linii można ją dowolnie modyfikować i podać jako nową komendę do wykonania przez naciśnięcie klawisza [Enter]. UWAGA - bufor ten może ulec przepełnieniu.

Page 8: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

8

Wybrane polecenia i funkcje - część 1 (trójkątne nawiasy “< >” oznaczają część opcjonalną): Polecenie Opis quit zakończenie pracy, wyjście z programu (zlikwidowanie wszystkich

zmiennych) clear <nazwa zmiennej> usunięcie wszystkich zmiennych (lub wskazanej zmiennej) who wypisanie (tylko) nazw istniejących zmiennych whos to samo co who, jednak wraz z parametrami zmiennych help nazwa komendy lub funkcji wypisanie opisu dla danej komendy lub funkcji ones(M,N) wygenerowanie macierzy o M wierszach i N kolumnach,

wypełnionej jedynkami zeros(M,N) wygenerowanie macierzy o M wierszach i N kolumnach,

wypełnionej zerami rand(M,N) wygenerowanie macierzy o M wierszach i N kolumnach,

wypełnionej liczbami pseudolosowymi z przedziału [0,1) eye( N ) wygenerowanie macierzy jednostkowej ( wartości “1” tylko na

przekątnej, poza tym “0” ) o wymiarach NxN Operator “:” (dwukropek) służy do określania ciągów liczb w sposób następujący: początek : krok : koniec W przypadku podania wersji uproszczonej: początek : koniec, wartość “krok” jest przyjmowana jako “1”. Wyjątek - rozwinięcie macierzy do postaci wektora kolumnowego: >>B=A(:); “B” to wektor kolumnowy zbudowany z kolejnych kolumn macierzy “A” UWAGA: użytkownik nie wpisuje znaku “>>” - to robi komputer. W podanych przykładach opis, który jest odpowiednikiem informacji ustnej prowadzącego i który nie należy do treści komendy , zapisano kursywą. Operatory arytmetyczne (odnoszą się do macierzy!):

Operator Opis * mnożenie (dla macierzy nie jest przemienne) / dzielenie \ dzielenie lewostronne + 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

- w tym przypadku mnożenie, ale dotyczy to także dzielenia i potęgowania W przypadku niezgodności wymiarów macierzy podanych jako operandów dla danego operatora operacja nie jest realizowana, a program sygnalizuje błąd. MATLAB posiada wiele wbudowanych funkcji. Oto niektóre z nich:

cos (kosinus), sin (sinus), exp (eksponenta), tan (tangens), atan (arcus tangens), atan2 (arcus tangens czteroćwiartkowy).

Page 9: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

9

Inne funkcje, użyteczne przy pracy z macierzami (ciągami) zespolonymi: abs (moduł - amplituda), angle (faza), real (część rzeczywista), imag (część urojona), conj (liczba sprzężona), unwrap (monotonicznie rosnący lub malejący odpowiednik ciągu wartości faz).

Przykłady inicjalizowania lub modyfikowania zmiennych:

>>t=0:5; powstanie wektor sześcioelementowy “t” o wartościach od 0 do 5, jeżeli

istniała już zmienna o tej samej nazwie, to zostanie uprzednio zlikwidowana (uwaga: można w ten sposób niechący zlikwidować zmienne predefiniowane, jak np. jednostka urojona)

>>k=7:-2:-3; powstanie wektor “k” o wartościach od 7 do -3 (krok wynosi -2) >>a=rand(3,2); powstanie macierz pseudolosowa “a” o 3 wierszach i 2 kolumnach >>B=[1,2,3; 3:5; 5:-1:3]; powstanie macierz “B”, 3x3, wypełniona podanymi wartościami średnik oznacza przejście do kolejnego wiersza >>Mat=B*0.5; powstanie macierz “Mat” o rozmiarach takich jak macierz “B” >>t=0:63; powstanie wektor “t” o wartościach od 0 do 63 >>s=cos(2*pi*t/32); wektor “s” będzie miał tyle samo elementów co wektor “t”; każdy

element wektora “s” będzie miał wartość wyznaczoną dla odpowiadającego mu elementu wektora “t”; gdyby ”t” było macierzą, to “s” byłoby macierzą o tych samych wymiarach

>>s(3)=Mat(2,1); trzeci element wektora “s” przyjmie wartość elementu macierzy “Mat”

znajdującego się w drugim wierszu i pierwszej kolumnie >>XYZ=[ones(3,3); B^2; rand(1,3)]; powstanie macierz XYZ o wymiarach 7x3 >>B(5,6) = 10; ponieważ przypisujemy wartość 10 do elementu macierzy “B” spoza

dotychczasowego rozmiaru tej macierzy, zatem macierz ta zostanie powiększona, tak by wskazany element (5,6) do niej należał, pozostałe nowe elementy zostaną wypełnione zerami

>>C2=B^2; macierz “B” jest podnoszona do kwadratu (macierzowo) >>C3=B.^2; każdy element macierzy “B” jest podnoszony do kwadratu jako skalar

Dwa sposoby generowania ciągów zespolonych - zesp oraz zesp2: >>modul=1:10; >>faza=(1:2:19)*pi/10; >>zesp=modul.*exp(j*faza); >>rzecz=1:5; >>uroj=5:-1:1; >>zesp2=rzecz+j*uroj;

Page 10: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

10

Jako zmienną docelową lub źródło danych można wybrać fragment istniejącej macierzy, np: >>X=B(3:4,1:2:5); powstanie macierz “X”, 2x3, wybrana z macierzy “B” z jej 3. i 4. wiersza

oraz 1.,3. oraz 5. kolumny >>X(4:-1:2)=V(1:3); elementy od 2 do 4 wektora “X” będą pochodziły z elementów od 1 do 3

wektora “V”, ale w odwróconej kolejności Szczególnym przypadkiem jest wybranie pojedynczego elementu macierzy, np: A(5,1). Ważne jest odróżnienie powyższego zapisu od określania wymiarów macierzy np. dla komendy “rand”. Polecenia związane z tworzeniem i edytowaniem wykresów:

Polecenie Opis plot( dane wejściowe funkcji ) wykreślenie wykresu dla zadanych wektorów dla osi poziomej i pionowej,

można wybrać kolor oraz sposób wykreślania stem( dane wejściowe funkcji ) jak plot, ale tylko do wykreślania ciągów wartości hold <on/off> zachowanie zawartości okna graficznego przy kreśleniu kolejnego

wykresu lub skasowanie zawartości tego okna xlabel( stała tekstowa ) podpis dla osi poziomej ylabel( stała tekstowa ) podpis dla osi pionowej title( stała tekstowa ) podpis okna graficznego gtext( stała tekstowa ) umieszczenie tekstu w oknie graficznym za pomocą myszy lub kursora grid <on/off> naniesienie (lub usunięcie) siatki axis( wektor opisu osi ) modyfikacja zakresów obu osi figure(numer okna graficznego) ustawienie wskaźnika okien graficznych na oknie o podanym numerze,

jeżeli nie ma takiego okna graficznego, to utworzenie nowego okna delete wskaźnik elementu usunięcie z okna graficznego elementu o podanym wskaźniku

Przykłady użycia poleceń do tworzenia i modyfikowania wykresów: >>plot(x); wykres z interpolacją odcinkowo-liniową wartości współrzędnych wektora

“x”, oś pozioma będzie opisana przez indeksy wektora “x”, czyli od 1 do długości wektora

>>plot(0:7,x); wykres wektora “x” , wartości dla osi poziomej to ciąg od 0 do 7 >>plot(t,x,’ro’); wykres wektora “x” względem wektora “t”, w kolorze czerwonym, za

pomocą “kółeczek” >>plot(abs(z)); wykres modułu wektora “z” względem indeksów tego wektora; gdybyśmy w

przypadku zespolonego wektora “z” nie określili, czy chcemy oglądać moduł, amplitudę, część rzeczywistą lub urojoną, to program wykreśli kolejne elementy wektora “z” na płaszczyźnie zespolonej - część rzeczywistą względem części urojonej, a nie względem indeksów wektora

>>plot(t,abs(z)); wykres modułu wektora “z” względem wektora “t”; gdybyśmy w przypadku

zespolonego wektora “z” nie określili, czy chcemy oglądać moduł, amplitudę, część rzeczywistą lub urojoną, to program wykreśli część rzeczywistą wypisując jednocześnie na ekranie ostrzegawczy komunikat

>>plot(t, x, ‘r-‘, t, x, ‘go’); wykres w jednym okienku wektora “x” względem wektora ”t” w

dwóch wersjach: linii ciągłej w kolorze czerwonym oraz kółeczek w kolorze zielonym

Page 11: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

11

>>stem(t,x); wykres ciągu opisanego przez wektor “x” względem wektora “t” >>axis([0,10,-5,5]); ustawienie zakresu osi: oś pozioma od 0 do 10, oś pionowa od -5 do 5 >>h1=gtext(‘sygnal’); wpisanie tekstu do okna wykresu oraz zainicjalizowanie wskaźnika jako h1 >>delete h1; usunięcie wyżej wpisanego tekstu z okna graficznego >>figure(2); wskazanie okna numer 2 jako okna bieżącego, gdy okno to nie istnieje, to

otwarcie kolejnego okna i ustawienie jako okna bieżącego >>grid on naniesienie na bieżące okno graficzne siatki współrzędnych >>ylabel(‘wartosci’); naniesienie na bieżące okno graficzne opisu osi pionowej Funkcje graficzne dotyczą tego okna graficznego, na które ustawiony jest wewnętrzny wskaźnik MATLAB’a. Wskaźnik ten można ustawić za pomocą funkcji figure lub też poprzez wybranie tego okna na przykład przez wskazanie i kliknięcie klawiszem myszy. Do sprawdzenia wymiarów macierzy można użyć komendy whos albo wbudowanych funkcji: >>size( nazwa macierzy ) zwracane są dwie liczby: ilość wierszy i kolumn >>length( nazwa wektora ) zwracana jest jedna liczba: długość wektora Wyniki powyższych funkcji (podobnie jak wszystkich innych) mogą stanowić wartości wejściowe dla innych funkcji lub operacji, np: >>x=1:length(y)

Page 12: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

12

3 Zadania do wykonania 1. Zapoznać się z podstawami posługiwania się programem MATLAB 2. Wygenerować i zaprezentować w postaci wykresów następujące sygnały z czasem dyskretnym: 1) próbkowanej kosinusoidy, 2) skoku jednostkowego w punkcie zero oraz przesuniętego w czasie, 3) delty Kroneckera w punkcie zero oraz przesuniętej w czasie, 4) próbkowanej rzeczywistej funkcji eksponencjalnej, 5) próbkowanej zespolonej funkcji eksponencjalnej o zadanych parametrach, 6) wybranych kombinacji sygnałów z poprzednich punktów (np. demonstracja dla wzoru (12)). Przykład wykreślonego ciągu, określonego jako różnica dwóch skoków jednostkowych:

(uwaga - indeksy oznaczone zostały tym razem literą t)

u t u t u t[ ] [ ] [ ]= −1 2

u tdla tdla t1

10

33

[ ] =≥ −< −

u tdla tdla t2

10

55

[ ] =≥<

Przykładowa sekwencja komend umożliwiająca otrzymanie powyższego wykresu: >>t=-20:20; >>u1=zeros(1,41); >>u1(18:41)=ones(1:24); >>u2=[zeros(1,25),ones(1,16)]; >>u=u1-u2; >>stem(t,u); >>xlabel(‘indeksy czasowe’); >>ylabel(‘wartosci ciagu’); >>title(‘ciag “box car”’); >>axis([-15,15,-0.5,1.5]);

Page 13: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

13

Dodatek teoretyczny nr 1 Próbkowanie i odtwarzanie sygnałów ciągłych - twierdzenie o minimalnej

częstotliwości próbkowania Najpierw wykażemy, że transformata funkcji grzebieniowej jest także funkcją grzebieniową ( jednak ze zmienioną amplitudą ). Funkcja grzebieniowa w dziedzinie pierwotnej ( nazwijmy ją umownie dziedziną czasu ), składająca się z oddalonych o T delt Diraca, określona jest następująco:

g t t n TTn

( ) ( )= − ⋅=−∞

∑δ (D1.1)

Ponieważ funkcja grzebieniowa (D1.1) jest okresowa z okresem T, zatem można ją rozwinąć w szereg

Fouriera (przyjmując oznaczenie częstotliwości dla tej funkcji jako vT01

= ):

g t c eT kj v k t

k

( ) = ⋅ ⋅ ⋅ ⋅ ⋅ ⋅

=−∞

∑ 2 0π (D1.2)

gdzie:

cT

x t e dtT

t n T e dtkj v k t

T

T

n

j v k t

T

T

= ⋅ = − ⋅

− ⋅ ⋅ ⋅ ⋅ ⋅

+

=−∞

∞− ⋅ ⋅ ⋅ ⋅ ⋅

+

∫ ∑∫1 12

2

22

2

20 0( ) ( )π πδ

(D1.3) i korzystając z właściwości dystrybucji związanej z deltą Diraca, że całka z funkcji pomnożonej przez deltę Diraca przesuniętą o ∆T jest równa wartości tej funkcji w punkcie ∆T , czyli przykładowo:

p t t T dt p T( ) ( ) ( )−∞

∫ ⋅ − =δ ∆ ∆ (D1.4)

oraz z tego, że w przedziale całkowania w całce z prawej strony (D1.3) mieści się jedynie delta Diraca d t( ) (nie przesunięta), otrzymujemy:

cTk =1

(D1.5)

Podstawiając (D1.5) do (D1.2):

g tT

eTj v k t

k

( ) = ⋅ ⋅ ⋅ ⋅ ⋅ ⋅

=−∞

∑ 1 2 0π (D1.6)

Page 14: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

14

Z tw. o przesunięciu ( można je łatwo udowodnić wprost ze wzoru na transformatę Fouriera ), które brzmi następująco:

[ ] [ ]F x t X v F x t e X v vj v t( ) ( ) ( ) ( )= ⇒ ⋅ = −⋅ ⋅ ⋅ ⋅2 π ∆ ∆ (D1.7)

oraz liniowości transformacji Fouriera i zależności (D1.6), otrzymujemy:

[ ] [ ]F g tT

F eT

v k vTj v k t

k k

( ) ( )= = − ⋅⋅ ⋅ ⋅ ⋅ ⋅

=−∞

=−∞

∑ ∑1 120

0π δ (D1.8)

Prawa strona (D1.8) opisuje funkcję grzebieniową określoną w dziedzinie v i posiadającą okres v0 , zatem:

[ ]F g tT

g vT v( ) ( )= ⋅1

0 (D1.9)

CBDU

Ponieważ vT01

= , więc także:

Fv

g t g vT v1

00

( ) ( )

= (D1.10)

Rys. D1.1. Transformata Fouriera (FT - skrót od ang. Fourier Transform) funkcji grzebieniowej jest także

funkcją grzebieniową Przyjmijmy, że interesuje nas sygnał x t( ) o transformacie Fouriera:

[ ]F x t x t e dt X vj v t( ) ( ) ( )= ⋅ =− ⋅ ⋅ ⋅ ⋅

−∞

∫ 2 π (D1.11)

Sygnał ten jest próbkowany z okresem T za pomocą odpowiedniej funkcji grzebieniowej (inaczej można to próbkowanie opisać jako modulowanie amplitudy funkcji grzebieniowej za pomocą sygnału x t( ) ) i w efekcie powstaje sygnał spróbkowany:

x t x t g tT T( ) ( ) ( )= ⋅ (D1.12)

Page 15: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

15

Jest to równoważne innemu zapisowi:

x t x k T t k TTk

( ) ( ) ( )= ⋅ ⋅ − ⋅=−∞

∑ δ (D1.12a)

W dalszych rozważaniach skorzystamy z dwóch twierdzeń (przytoczonych bez dowodu). Tw.1. Iloczyn sygnałów w dziedzinie czasu odpowiada splotowi w dziedzinie częstotliwości:

[ ] [ ] [ ]F x t x t F x t F x t1 2 1 2( ) ( ) ( ) ( )⋅ = ∗ (D1.13) Tw.2. Splot funkcji z przesuniętą deltą Diraca (w dowolnej dziedzinie) daje tę samą funkcję, ale przesuniętą o tyle w tej samej dziedzinie, o ile jest przesunięta delta Diraca:

p v v v p v vp t t t p t t

( ) ( ) ( )( ) ( ) ( )

∗ − = −∗ − = −δδ

∆ ∆∆ ∆

(D1.14)

Oznaczając transformatę sygnału spróbkowanego z okresem T jako:

[ ]F x t X vT T( ) ( )= (D1.15) można wobec (D1.12) oraz (D1.13) napisać, że:

X v X vT

g vT v( ) ( ) ( )= ∗ ⋅

10

(D1.16)

W oparciu o (D1.14) i liniowość splotu (funkcja grzebieniowa jest sumą poprzesuwanych delt Diraca) zależność (D1.16) można przekształcić do następującej postaci:

X vT

X v k vTk

( ) ( )= − ⋅=−∞

∑10 (D1.17)

Wzór (D1.17) oznacza, że ciągła transformata Fouriera sygnału spróbkowanego z okresem T (czyli inaczej z częstotliwością v0 ) jest powiązana z transformatą sygnału przed próbkowaniem tak, że transformata sygnału spróbkowanego składa się z dodanych do siebie poprzesuwanych o całkowitą wielokrotność v0 kopii transformat sygnału oryginalnego, przy czym amplituda tych poprzesuwanych kopii jest T-krotnie mniejsza niż amplituda transformaty oryginalnej. Wynika stąd ważny warunek określający, kiedy z sygnału spróbkowanego możliwe jest odtworzenie sygnału oryginalnego: Aby było to możliwe, maksymalna częstotliwość sygnału oryginalnego (czyli największa wartość v , dla której transformata nie przyjmuje jeszcze wartości zero) musi być mniejsza od połowy częstotliwości próbkowania; lub inaczej: częstotliwość próbkowania musi być większa niż podwojona maksymalna częstotliwość sygnału oryginalnego. Jeżeli warunek powyższy jest spełniony, to przesunięte o całkowitą wielokrotność v0 kopie transformaty oryginalnej nie zachodzą na siebie i możliwe jest dokładne wyodrębnienie pojedynczej kopii. W celu

Page 16: Instrukcja do laboratorium z cyfrowego przetwarzania sygnałódydaktyka:dsp2000_1_p.pdf · DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH 1 . Instrukcja do laboratorium z cyfrowego

DSP-MATLAB, Ćwiczenie 1, P.Korohoda, KE AGH

16

odtworzenia sygnału oryginalnego wybiera się zatem pojedynczy okres zawierający w środku punkt v = 0 , mnoży się ten pojedynczy okres przez T i wyznacza transformatę odwrotną. Operację “wybierania pojedynczego okresu” z transformaty X vT ( ) można zrealizować za pomocą odpowiedniego filtru zerującego pozostałe okresy. Jak łatwo zauważyć, musi to być filtr dolnoprzepustowy. Po to, by sygnał oryginalny był wiernie odtworzony, filtr ten nie może wprowadzać w pasmie przepustowym żadnych zniekształceń. Reasumując, jeżeli maksymalna częstotliwość sygnału to vmax , a częstotliwość próbkowania to v0 , wówczas idealne odtworzenie sygnału próbkowanego jest możliwe, gdy:

v vmax < ⋅12 0 (D1.18)

a transformata Fouriera dolnoprzepustowego filtru odtwarzającego powinna spełniać warunek:

X vv

dla v v

dla v v vdowo e dla pozost v

F ( ) ( )ln .

max

max=

≥ ⋅ −

1

0 20

0 (D1.19)

Rys. D1.2. Widmo Fouriera sygnału oraz widmo tego samego sygnału po próbkowaniu:

a) zapewniającym możliwość odtworzenia, b) uniemożliwiającym odtworzenie UWAGA - przedstawione rozważania na temat twierdzenia o próbkowaniu nie uwzględniają szczególnego przypadku, gdy sygnał jest kosinusoidą o częstotliwości dokładnie równej połowie częstotliwości próbkowania.