DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH Instrucja do laboratorium z cyfrowego przetwarzania sygnałów Ćwiczenie 5 Wybrane właściwości Dysretnej Transformacji Fouriera Przemysław Korohoda, KE, AGH Zawartość instrucji: 1 Materiał z zaresu DSP 1.1 Macierzowy zapis DFT 1.2 Symetrie transformaty DFT 1.2.1 Ciąg o długości parzystej 1.2.2 Ciąg o długości nieparzystej 1.3 Szyba Transformacja Fouriera 1.4 DFT jao rozład na ciągi bazowe 1.5 Transformata DFT ciągu pochodzącego z próbowania sygnału zespolonego typu e j2 vt i osinusoidy 1.6 Pojęcie niższej i wyższej częstotliwości 1.7 Efet Gibbsa 2 Korzystanie z paietu MATLAB 2.1 Uwagi ogólne 2.2 Przyłady rozwiązań wybranych problemów 2.2.1 Badanie efetu sończonej precyzji obliczeń dla FFT pojedynczej długości ciągu - wyznaczanie błędu średniowadratowego (rmse) powstałego po przeprowadzeniu transformacji w przód i wstecz: 2.2.2 Test na ilość operacji zmiennoprzecinowych w FFT w zależności od długości ciągu: 2.2.3 Macierzowa interpretacja DFT. 2.2.4 Rozład ciągu na ciągi bazowe 2.2.5 Sprawdzanie ortonormalności uładu ciągów (wetorów) bazowych 2.2.6 Transformaty ciągów pochodzących z próbowania wybranych sygnałów ciągłych 2.2.7 Błąd w dziedzinie pierwotnej wyniający ze zmiany wartości współczynniów transformaty 3 Zadania do wyonania 1
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH a instrucję sładają się następujące części: 1 Materiał z zaresu DSP 2 Korzystanie z paietu MATLAB 3 Zadania do wyonania Do sprawnego wyonania ćwiczenia nie jest onieczna wcześniejsza pratyczna znajomość nie wprowadzonych w ramach poprzednich ćwiczeń funcji paietu MATLAB, jedna niezbędna jest dobra orientacja w materiale przedstawionym w częściach 1 oraz 2 tej instrucji oraz w zagadnieniach będących przedmiotem poprzednich ćwiczeń. Dlatego też wsazane jest doładne przeczytanie obu wymienionych części instrucji oraz zanalizowanie podanych przyładów. UWAGA: znajomość i zrozumienie części 1 i 2 oraz materiału z poprzednich ćwiczeń mogą zostać przez prowadzącego sontrolowane w tracie zajęć. W realizacji zadań z części 3 może pomóc ich wcześniejsze przemyślenie w powiązaniu z częściami 1 i 2. W razie niejasności należy sonsultować się z prowadzącym przed zajęciami - na przyład w terminie onsultacji - bezpośrednio lub poprzez e-mail: orohoda@uci.agh.edu.pl 2
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH 1 Materiał z zaresu DSP 1.1 Macierzowy zapis DFT Wzór (33) z poprzedniej instrucji definiujący transformatę DFT (a taże transformatę odwrotną) przedstawia ombinację liniową elementów ciągu x[ n]. Wynia z tego, że można go zapisać w postaci macierzowej i transformację DFT zinterpetować jao przeształcenie macierzowe. Fatycznie, jeśli ciągi x[ n] oraz X[ ] przedstawimy w postaci wetorów olumnowych, to równanie (33) przybierze postać: X[ 0] X[ 1] X[ 1] x[ 0] x[ 1] A x[ 1] (1) gdzie ażdy element macierzy A jest oreślony następująco: a j 2 n, exp n Analogicznie można zapisać transformację odwrotną, wyrażoną poprzez macierz B ażdy element jest oreślony równaniem: 1 j 2 n b, n exp A (2) 1, tórej (3) 1.2 Symetrie transformaty DFT W więszości przypadów ciąg pierwotny zawiera wyłącznie elementy o zerowej części urojonej. W taiej sytuacji transformata DFT wyazuje pewne charaterystyczne symetrie. W pewnym uproszczeniu można stwierdzić, że jeżeli dla ciągu transformaty X[ ] ciągu rzeczywistego x[ n] zostanie oreślony (w przybliżeniu) punt środowy, to wartości amplitud transformaty w puntach położonych symetrycznie po obu stronach tego środa będą taie same, natomiast wartości faz będą taie same co do modułu, jedna przeciwnego znau. Można to stwierdzenie sformułować również ta: wartości amplitud będą względem tego środowego puntu parzyste, a wartości faz nieparzyste. W pewnych przypadach onieczne jest jedna doładniejsze oreślenie zarówno puntu środowego, ja i powstałych symetrii. Szczegółowe wyjaśnienie zawierają poniższe podrozdziały. 1.2.1 Ciąg o długości parzystej W przypadu, gdy długość ciągu x[ n] jest parzysta, to jao punt środowy należy przyjąć element transformaty o numerze i ani ten element, ani element X[ 0 ] nie posiadają swoich bliźniaczych 2 odpowiedniów. Przedstawiono to na rys.1. Ponadto ani X[ 0 ], ani X[ / 2 ] nie może mieć części urojonej. Warto się zastanowić, ja taą właściwość zaobserwować na wyresach amplitudy i fazy. 3
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH Rys.1. Ilustracja symetrii transformaty parzystego ciągu rzeczywistego - z lewej amplituda, z prawej faza 1.2.2 Ciąg o długości nieparzystej W przypadu, gdy długość ciągu x[ n] jest nieparzysta, to punt środowy leży pomiędzy elementami 1 1 o numerach i. W taiej sytuacji jedynie element X[ 0 ] nie posiada swojego 2 2 bliźniaczego odpowiednia. Przedstawiono to na rys.2. Ponadto element X[ 0 ] nie może mieć w taiej sytuacji niezerowej części urojonej. Rys.2. Ilustracja symetrii transformaty nieparzystego ciągu rzeczywistego - z lewej amplituda, z prawej faza Warto zauważyć, że symetria amplitudy jest identyczna z symetrią części rzeczywistej, natomiast symetria fazy jest taa sama, ja symetria części urojonej. W ramach ćwiczenia domowego proszę udowodnić za pomocą odpowiednich przeształceń równania (33) powstawanie opisanych symetrii. 1.3 Szyba Transformacja Fouriera Można zauważyć, że bezpośrednie stosowanie wzoru (33), (35) lub (39) z poprzedniej instrucji powoduje wielorotne przeprowadzanie podobnych operacji na podobnych liczbach. Ponieważ DFT jest dość powszechnie stosowaną transformacją, więc opracowano wiele algorytmów wyliczających transformatę za pomocą znacznie mniejszej liczby operacji arytmetycznych niż wynia to ze wspomnianych wzorów. W literaturze uzupełniającej można znaleźć szereg przyładów oraz oszacowanie zmniejszenia liczby operacji w wyniu zastosowania algorytmów ta zwanej Szybiej Transformacji Fouriera, w srócie FFT (ang. Fast Fourier Transform). Ponieważ powszechnie dostępne są gotowe procedury algorytmów FFT, zagadnienie szczegółowych rozwiązań tych algorytmów nie zostało zawarte w zaresie niniejszego laboratorium. Zainteresowani studenci z łatwością znajdą odpowiednią literaturę uzupełniającą. Ze względu jedna na prawidłowe posługiwanie się gotowymi procedurami, w ramach ćwiczeń zostanie zbadana efetywność obliczeniowa algorytmu FFT w zależności od długości ciągu pierwotnego. ależy podreślić, że FFT to nie olejna wersja Transformacji Fouriera, lecz algorytm do szybszego wyliczania DFT. Zatem, jeśli interesuje nas wyni transformacji, a nie sposób jego wyznaczania, i mówimy srótowo transformata FFT, to zawsze oznacza to transformatę DFT. 4
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH 1.4 DFT jao rozład na ciągi bazowe Ciąg o długości można przedstawić jao liniową ombinację ciągów bazowych o tej samej długości: K x[ n] a b [ n] : n 0, 1,..., 1 0 (4) Transformata DFT zawiera współczynnii (zespolone) taiego rozwinięcia dla ciągów bazowych o postaci: b [ n] e : 0, 1,..., 1 (5) j2 n Gdy ciąg x[ n] jest rzeczywisty, to można również przyjąć ciągi bazowe w postaci: 2 n b [ n] cos : 0, 1,..., K (6) Przy czym dla parzystego: K, dla nieparzystego: K 1 2 2 : 0 0 lub 0, natomiast dla parzystego dodatowo taże: /2 0 /2.. Ponadto dla dowolnego lub Po to by stwierdzić, że dla ciągów bazowych (5) prawdziwy jest wzór (4) wystarczy podstawić ciągi bazowe (5) do (4) i porównać otrzymaną zależność ze wzorem na odwrotną transformację DFT: 1 x[ n] X[ ] e 1 j2 n 0 Z powyższego porównania otrzymuje się natychmiast zależność pomiędzy współczynniami rozwinięcia (4) - czyli a - i współczynniami transformaty X[ ]: a X[ ] Zależność ta jest, ja widać, bardzo prosta. iestety ciągi (5) są zespolone. Dla rzeczywistych ciągów bazowych (6) pomiędzy współczynniami rozwinięcia i współczynniami transformaty zachodzi nieco inny związe uwzględniający obecność fazy w opisie -tego ciągu bazowego: Przez X a 2 X [ ] X [ ] (9) [ ] oznaczono fazę elementu X[ ] transformaty. Właśnie obecność w ażdym ciągu bazowym (6) fazy, zależnej od ciągu x n ciągów bazowych jest w taim przypadu równa ooło połowie. (7) (8) [ ], powoduje, że ilość Warto zauważyć, że ciągi bazowe (5) tworzą uład ortogonalny i wszystie te ciągi mają taie same normy (w metryce eulidesowej). Co można na ten temat powiedzieć w przypadu ciągów bazowych (6)? Uwaga - zależności (7), (8) i (9) oraz wypływające z nich wniosi dotyczą wersji DFT zaimplementowanej w MATLAB ie. 5
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH 1.5 Transformata DFT ciągu pochodzącego z próbowania sygnału zespolonego typu e j2 vt i osinusoidy Z powyższych rozważań na temat rozładu na ciągi bazowe można wywniosować co następuje. Jeżeli ciąg pierwotny o długości jest typu: x[ n] e j2 n (10) dla 01,,..., 1, to jego transformata DFT zawiera same zera poza jednym elementem o indesie oraz X[ ]. Ponieważ ciąg (10) nie jest rzeczywisty, więc jego transformata nie posiada symetrii typowych dla transformaty ciągu rzeczywistego. Jeżeli ciąg pierwotny jest typu: 2 n x[ n] cos (11) 01,,..., 1, to jego transformata zawiera jedynie jeden lub dwa elementy niezerowe. Gdy jest parzyste, wówczas jedyny element niezerowy pojawi się dla 0 lub. Dla 2 dla nieparzystego jedyny element niezerowy pojawi się tylo dla 0. W pozostałych przypadach pojawią się doładnie dwa elementy niezerowe, o indesach oraz, tóre muszą dodatowo spełniać odpowiednie symetrie, ponieważ ciąg (11) jest rzeczywisty, czyli: X[ ] X[ ] X[ ] X[ ] 2 (12) Gdy ciąg pierwotny jest typu: x[ n] cos 2 f n (13) i częstotliwość cyfrowa f nie spełnia zależności (14): f (14) to transformata taiego ciągu zawiera więcej niż dwie wartości niezerowe. Ponadto można zauważyć, że w taim przypadu olejnych odcinów rozdzielających na osi ciągłego czasu punty próbowania nie odpowiada całowitej ilości oresów osinusoidy. Warto pamiętać, że transformacja DFT jest operacją liniową, zatem dowolny stały współczynni zmieniający amplitudę wszystich wyrazów ciągu (10), (11) lub (13) pojawi się również jao współczynni salujący amplitudy wszystich elementów transformaty. 1.6 Pojęcie niższej i wyższej częstotliwości Opierając się na poprzednich dwóch podrozdziałach można wyjaśnić, dlaczego uważa się, że w dziedzinie transformaty DFT najwyższa częstotliwość znajduje się w oolicy elementu środowego. Doładniej, dla parzystego masymalna częstotliwość jest reprezentowana przez element 6
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH transformaty o indesie, natomiast dla nieparzystego masymalną częstotliwość reprezentuje 2 1 1 para elementów o indesach oraz. Dla dowolnej długości ciągu sładowa stała jest 2 2 reprezentowana przez element o indesie 0, natomiast najniższa niezerowa częstotliwość odpowiada parze elementów transformaty o indesach 1 oraz 1 i częstotliwość ta rośnie w miarę zbliżania się do elementów odpowiadających częstotliwości masymalnej. ależy jedna pamiętać, że powyższe wniosi odnośnie wysoości częstotliwości dotyczą wyłącznie dysretnych wartości częstotliwości cyfrowej oreślonych dla 01,,..., 1 przez wzór (14). Wartości te można z olei, dysponując częstotliwością próbowania, przeliczyć na dysretne wartości częstotliwości w Hz. Każdej innej częstotliwości cyfrowej z przedziału 0, 1) nie spełniającej warunu (14) będzie odpowiadać więsza ilość prążów rozłożona po całym przedziale, więc ciąg tai zawiera z puntu widzenia taiej interpretacji różne częstotliwości - zarówno te wyższe, ja i niższe. Przyładowo, dla 64 ciąg: x[ n] cos 2 0, 125 n (15) odpowiada w dziedzinie transformaty DFT dwóm prążom o indesach 8 i 56. Identycznie opisany ciąg, jedna dla 66, będzie odpowiadał wielu prążom, choć dominować będą elementy 8 i 58. Zatem w tym drugim przypadu nie da się powiedzieć, że z puntu widzenia DFT jest to ciąg o oreślonej częstotliwości, bowiem zawiera tych częstotliwości wiele. Jest to dość istotna różnica w stosunu do D-TFT, gdzie niemal zawsze (z wyjątiem sytuacji prowadzącej do ciągu nieoresowego) próbowana osinusoida o f 0 odpowiada dwóm prążom loalizującym jednoznacznie częstotliwość, przy czym częstotliwość ta w przypadu D-TFT rośnie wraz z oddalaniem się od puntu f 0. Opisana różnica wynia z fatu, iż DFT operuje na sończonym ciągu próbe. Ja, opierając się na obserwacjach poczynionych dla DFT oraz relacjach pomiędzy DFT i D-TFT zbadanych w ramach poprzedniego ćwiczenia, wyazać słuszność powyższego porównania? Ciąg transformaty DFT jest dla rzeczywistego ciągu pierwotnego symetryczny oraz częstotliwości rosną w ierunu środowego elementu tej transformaty, by następnie maleć w miarę zbliżania się do elementu ostatniego, zatem często rozważa się jedynie połowę (w przybliżeniu) ciągu transformaty zawierającą ompletną informację o wszystich częstotliwościach typu (14). 1.7 Efet Gibbsa Jeżeli w dziedzinie transformaty wprowadzi się pewien błąd zmieniając nieco wartość jednego tylo współczynnia tej transformaty - na przyład o indesie - to po powrocie do dziedziny pierwotnej odtworzony ciąg x[ n ] nie będzie już identyczny z ciągiem początowym x[ n]. Z liniowości transformacji DFT oraz rozważań na temat rozładu na ciągi bazowe można wywniosować, że zmiana elementu X[ ] transformaty o X[ ] spowoduje wprowadzenie do ciągu pierwotnego błędu w X [ ] postaci ciągu bazowego o amplitudzie (w implementacji MATLAB a): X X[ ] X [ ] [ ] X [ ] x [ n ] x [ n ] e j2 n (16) Gdyby transformatę ciągu rzeczywistego zmodyfiować ta, że zachowane będą odpowiednie symetrie, na przyład ta: X [ ] X [ ] X [ ] X [ ] X [ ] conj X [ ] (17) 7
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH to do ciągu pierwotnego zostanie wprowadzony błąd, będący odwrotną transformatą ciągu X err sładającego się z samych zer i tylo dwóch elementów niezerowych: X err[ ] X[ ] oraz X err[ ] conj X[ ], czyli: x [ n ] x [ n ] X n x [ n ] 2 [ ] 2 err cos X [ ] (18) Biorąc pod uwagę liniwość transformacji DFT można zatem stwierdzić, że wprowadzenie błędu typu (16) dla pewnej ilości wartości spowoduje, że w dziedzinie pierwotnej wprowadzony błąd będzie ombinacją liniową ciągów typu (18). W przypadu wyreślenia taiego ciągu błędu otrzymuje się zazwyczaj obraz oscylacji. Opisany efet pojawienia się zmian w ciągu pierwotnym w wyniu wprowadzenia błędu w dziedzinie transformaty nazywa się efetem Gibbsa. Często rozważa się szczególny przypade tego błędu, gdy w dziedzinie transformaty pomija się zupełnie pewną grupę współczynniów, przyjmując w ich miejsce wartości zerowe. Efet Gibbsa może dotyczyć taże sytuacji odwrotnej - gdy błąd wprowadza się do wybranych elementów ciągu pierwotnego, co daje w rezultacie błąd o wyglądzie oscylacji w dziedzinie transformaty. Wyjaśnienie taiego wariantu jest bardzo podobne, co wynia z podobieństwa wzorów na transformatę DFT w przód i odwrotną. 8
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH 2 Korzystanie z paietu MATLAB 2.1 Uwagi ogólne Warto pamiętać, że numeracja elementów wetorów w MATLAB ie rozpoczyna się od 1, zatem indesy czasowe i częstotliwościowe z rozważań z zaresu DSP - rozdział 1 instrucji - są w stosunu do tej numeracji przesunięte o 1 (pierwszy element ciągu pierwotnego lub transformaty ma tam zwyle indes 0 ). Z puntu widzenia czytelnego przedstawienia zagadnienia dość istotne jest jaa forma wizualizacji zostanie wybrana dla danego zestawu danych. ieiedy lepsze jest wypisanie na eranie wartości - wszystich lub tylo wybranych - w postaci liczbowej, a innym razem orzystniejszy jest wyres typu plot, stem lub mesh. 2.2 Przyłady rozwiązań wybranych problemów Poniżej przedstawiono przyłady częściowych rozwiązań problemów podobnych do tych, tóre będą tematem ćwiczeń. Przyłady nie zawierają etapu badania otrzymanych wyniów - ten fragment należy uzupełnić samodzielnie. 2.2.1 Badanie efetu sończonej precyzji obliczeń dla FFT pojedynczej długości ciągu - wyznaczanie błędu średniowadratowego (rmse) powstałego po przeprowadzeniu transformacji w przód i wstecz: >> =128; >> x=rand(1,); X=fft(x); xi=ifft(x); >> rmse=sqrt(sum(abs(x-xi).^2)/); sqrt jest funcją Matlab a wyznaczającą pierwiaste wadratowy 2.2.2 Test na ilość operacji zmiennoprzecinowych w FFT w zależności od długości ciągu: >> for =2:2^8, x=rand(1,); flops(0); X=fft(x); oper(-1)=flops; end; 2.2.3 Macierzowa interpretacja DFT. >> =32; >> MDFT=fft(eye()); >> x=rand(,1); uwaga - wetor x jest tym razem olumnowy >> X=MDFT*x; Jaie przyłady należałoby zbadać, by się upewnić, czy metoda wyznaczania macierzy MDFT jest poprawna? 2.2.4 Rozład ciągu na ciągi bazowe W tym przyładzie najpierw zostanie wygenerowany zestaw ortogonalnych ciągów bazowych ułożonych w postaci olumn macierzy B : >> =8; >> x=rand(,1); olumnowy wetor reprezentujący ciąg przeznaczony do rozwinięcia >> B0=zeros(,); >> for =1:, B0(1:,)=rand(,1)+0.5; end; olumny powinny być liniowo niezależne >> ran(b0) sprawdzenie, czy fatycznie ta jest >> B(:,1)=B0(:,1)/sqrt(sum(abs(B0(:,1)).^2)); normalizacja pierwszej olumny poniżej procedura ortonormalizacyjna: >> for =2:, b=b0(:,); for m=1:-1; b=b-(b *B(:,m))*B(:,m);end; B(:,)=b./sqrt(sum(abs(b).^2)) ;end ciąg x jest teraz rozwijany w szereg, gdzie olumny macierzy B to ciągi bazowe: >> X=B*x; >> x2=zeros(,1); for =1:, x2=x2+x()*b(:,);end >> err=x2-x; 9
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH Ja uzasadnić sposób, w jai macierz B została wyorzystana do wyznaczania współczynniów poszuiwanego rozwinięcia? 2.2.5 Sprawdzanie ortonormalności uładu ciągów (wetorów) bazowych ieiedy może się oazać przydatne stwierdzenie, czy dany uład wetorów jest ortogonalny oraz, czy jest znormalizowany. Zbadamy zatem ortogonalność olumn macierzy B0 oraz B z poprzedniego przyładu: >> for =1:, for m=1:, ILSKAL(,m)=conj(B0(:,) )*conj(b0(:,m)); end; end; >> mesh(ilskal); >> for =1:, for m=1:, ILSKAL(,m)=conj(B(:,) )*conj(b(:,m)); end; end; >> mesh(ilskal); Ja powinna wyglądać macierz ILSKAL dla uładu ortogonalnego, a ja dla nieortogonalnego? Sprawdzenie normy ciągów bazowych: >> for =1:, ORMA()=sqrt(conj(B(:,) )*conj(b(:,))); end Można również sprawdzić, że dla uładu ortonormalnego macierz odwrotną do macierzy B można otrzymać przez transpozycję macierzy B. O czym powinna przypominać zastosowana przy wyznaczaniu iloczynu salarnego i normy funcja conj (wartość sprzężona)? Czy można by w tym przyładzie z tej funcji zrezygnować? 2.2.6 Transformaty ciągów pochodzących z próbowania wybranych sygnałów ciągłych >> =64; >> =7; >> n=0:63; i następnie: >> x=exp(j*2*pi**n/+pi/7); albo: >> x=cos(2*pi**n/+pi/7); po czym: >> X=fft(x); i pozostaje już tylo sprawdzić odpowiednie hipotezy. 2.2.7 Błąd w dziedzinie pierwotnej wyniający ze zmiany wartości współczynniów transformaty >> =64; >> x=rand(1,); >> X=fft(x); >> =4; >> DX=3*exp(j*pi/5); wyraźnie widać jaą amplitudę i fazę ma błąd >> X()=X()+DX; >> X(-)=X(-)+conj(DX); >> xinv=ifft(x); >> xerr=xinv-x; i teraz można postudiować właściwości ciągu xerr. 10
DSP-MATLAB, Ćwiczenie 5, P.Korohoda, KE AGH 3 Zadania do wyonania 1. Poazać na przyładzie, na czym polega macierzowa interpretacja DFT. 2. Sprawdzić poprawność algorytmu FFT zaimplementowanego w funcji fft Matlab a. 3. Zbadać efetywność algorytmu FFT w zależności od długości ciągu. 4. Potwierdzić istnienie odpowiednich symetrii w transformacie DFT rzeczywistego ciągu pierwotnego. Poazać, że symetrie te powstają taże w ciągu pierwotnym, gdy transformata jest rzeczywista (bez części urojonej) i wyjaśnić ten efet. 5. Zademonstrować, co oznacza stwierdzenie, że transformata DFT zawiera współczynnii rozwinięcia sygnału w szereg sygnałów bazowych. 6. Wyazać, na czym polega podział na wyższe i niższe częstotliwości w onteście transformaty DFT. 7. Wyznaczyć transformaty DFT wybranych ciągów cyfrowych i wyjaśnić zaobserwowane cechy tych transformat. 8. Poazać za pomocą przyładów, na czym polega efet Gibbsa. 11