Instrukcja do laboratorium z cyfrowego przetwarzania

Transkrypt

Instrukcja do laboratorium z cyfrowego przetwarzania
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
Instrukcja do laboratorium z cyfrowego przetwarzania sygnałów
Ćwiczenie 5
Wybrane właściwości Dyskretnej Transformacji Fouriera
 Przemysław Korohoda, KE, AGH
Zawartość instrukcji:
1 Materiał z zakresu 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 Szybka Transformacja Fouriera
1.4 DFT jako rozkład na ciągi bazowe
1.5 Transformata DFT ciągu pochodzącego z próbkowania sygnału zespolonego typu
i kosinusoidy
1.6 Pojęcie niższej i wyższej częstotliwości
1.7 Efekt Gibbsa
e j2 vt
2 Korzystanie z pakietu MATLAB
2.1 Uwagi ogólne
2.2 Przykłady rozwiązań wybranych problemów
2.2.1 Badanie efektu skończonej precyzji obliczeń dla FFT pojedynczej długości ciągu wyznaczanie błędu średniokwadratowego (rmse) powstałego po przeprowadzeniu
transformacji w przód i wstecz:
2.2.2 Test na ilość operacji zmiennoprzecinkowych w FFT w zależności od długości ciągu:
2.2.3 Macierzowa interpretacja DFT.
2.2.4 Rozkład ciągu na ciągi bazowe
2.2.5 Sprawdzanie ortonormalności układu ciągów (wektorów) bazowych
2.2.6 Transformaty ciągów pochodzących z próbkowania wybranych sygnałów ciągłych
2.2.7 Błąd w dziedzinie pierwotnej wynikający ze zmiany wartości współczynników
transformaty
3 Zadania do wykonania
1
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
Na instrukcję składają się następujące części:
1 Materiał z zakresu DSP
2 Korzystanie z pakietu MATLAB
3 Zadania do wykonania
Do sprawnego wykonania ćwiczenia nie jest konieczna wcześniejsza praktyczna znajomość nie
wprowadzonych w ramach poprzednich ćwiczeń funkcji pakietu MATLAB, jednak niezbędna jest
dobra orientacja w materiale przedstawionym w częściach 1 oraz 2 tej instrukcji oraz w zagadnieniach
będących przedmiotem poprzednich ćwiczeń.
Dlatego też wskazane jest dokładne przeczytanie obu wymienionych części instrukcji oraz
zanalizowanie podanych przykładów. UWAGA: znajomość i zrozumienie części 1 i 2 oraz materiału
z poprzednich ćwiczeń mogą zostać przez prowadzącego skontrolowane w trakcie zajęć.
W realizacji zadań z części 3 może pomóc ich wcześniejsze przemyślenie w powiązaniu z częściami 1
i 2.
W razie niejasności należy skonsultować się z prowadzącym przed zajęciami - na przykład w terminie
konsultacji - bezpośrednio lub poprzez e-mail:
[email protected]
2
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
1 Materiał z zakresu DSP
1.1 Macierzowy zapis DFT
Wzór (33) z poprzedniej instrukcji definiujący transformatę DFT (a także transformatę odwrotną)
przedstawia kombinację liniową elementów ciągu x[n] . Wynika z tego, że można go zapisać w postaci
macierzowej i transformację DFT zinterpetować jako przekształcenie macierzowe. Faktycznie, jeśli
ciągi x[n] oraz X [ k ] przedstawimy w postaci wektorów kolumnowych, to równanie (33) przybierze
postać:
 X [0] 
 x[0] 
 X [1] 
 x[1] 

  A



 






 X [ N  1]
 x[ N  1]
(1)
gdzie każdy element macierzy
A jest określony następująco:
  j  2    k  n
a k ,n  exp



N
Analogicznie można zapisać transformację odwrotną, wyrażoną poprzez macierz
każdy element jest określony równaniem:
bk ,n 
(2)
B  A 1 , której
1
 j  2    k  n
 exp



N
N
(3)
1.2 Symetrie transformaty DFT
W większości przypadków ciąg pierwotny zawiera wyłącznie elementy o zerowej części urojonej.
W takiej sytuacji transformata DFT wykazuje pewne charakterystyczne symetrie. W pewnym
uproszczeniu można stwierdzić, że jeżeli dla ciągu transformaty X [ k ] ciągu rzeczywistego x[n]
zostanie określony (w przybliżeniu) punkt środkowy, to wartości amplitud transformaty w punktach
położonych symetrycznie po obu stronach tego środka będą takie same, natomiast wartości faz będą
takie same co do modułu, jednak przeciwnego znaku. Można to stwierdzenie sformułować również tak:
wartości amplitud będą względem tego środkowego punktu parzyste, a wartości faz nieparzyste.
W pewnych przypadkach konieczne jest jednak dokładniejsze określenie zarówno punktu środkowego,
jak i powstałych symetrii. Szczegółowe wyjaśnienie zawierają poniższe podrozdziały.
1.2.1 Ciąg o długości parzystej
W przypadku, gdy długość ciągu
x[n] jest parzysta, to jako punkt środkowy należy przyjąć element
N
i ani ten element, ani element X[0] nie posiadają swoich “bliźniaczych”
2
odpowiedników. Przedstawiono to na rys.1. Ponadto ani X[0] , ani X [ N / 2] nie może mieć części
transformaty o numerze
urojonej. Warto się zastanowić, jak taką właściwość zaobserwować na wykresach 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 przypadku, gdy długość ciągu
x[n] jest nieparzysta, to punkt środkowy leży pomiędzy elementami
N 1
N 1
i
. W takiej sytuacji jedynie element X[0] nie posiada swojego
2
2
“bliźniaczego” odpowiednika. Przedstawiono to na rys.2. Ponadto element X[0] nie może mieć
o numerach
w takiej 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 taka sama, jak symetria części urojonej.
W ramach ćwiczenia domowego proszę udowodnić za pomocą odpowiednich przekształceń równania
(33) powstawanie opisanych symetrii.
1.3 Szybka Transformacja Fouriera
Można zauważyć, że bezpośrednie stosowanie wzoru (33), (35) lub (39) z poprzedniej instrukcji
powoduje wielokrotne 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ż wynika to ze
wspomnianych wzorów. W literaturze uzupełniającej można znaleźć szereg przykładów oraz
oszacowanie zmniejszenia liczby operacji w wyniku zastosowania algorytmów tak zwanej Szybkiej
Transformacji Fouriera, w skró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 zakresie niniejszego laboratorium. Zainteresowani studenci
z łatwością znajdą odpowiednią literaturę uzupełniającą. Ze względu jednak na prawidłowe
posługiwanie się gotowymi procedurami, w ramach ćwiczeń zostanie zbadana efektywność
obliczeniowa algorytmu FFT w zależności od długości ciągu pierwotnego.
Należy podkreślić, że FFT to nie kolejna wersja Transformacji Fouriera, lecz algorytm do szybszego
wyliczania DFT. Zatem, jeśli interesuje nas wynik transformacji, a nie sposób jego wyznaczania,
i mówimy skrótowo “transformata FFT”, to zawsze oznacza to transformatę DFT.
4
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
1.4 DFT jako rozkład na ciągi bazowe
Ciąg o długości
długości:
N można przedstawić jako liniową kombinację ciągów bazowych o tej samej
x[n] 
K
a
k 0
k
 bk [n] : n  0,1,..., N  1
(4)
Transformata DFT zawiera współczynniki (zespolone) takiego rozwinięcia dla ciągów bazowych
o postaci:
bk [n]  e
Gdy ciąg
j2 nk
N
: k  0,1,..., N  1
(5)
x[n] jest rzeczywisty, to można również przyjąć ciągi bazowe w postaci:
 2   k n
bk [n]  cos

N

 k 

: k  0,1,..., K
(6)
N
N 1
, dla N nieparzystego: K 
. Ponadto dla dowolnego
2
2
N : 0  0 lub 0   , natomiast dla N parzystego dodatkowo także:  N /2  0 lub
 N /2   .
Przy czym dla
N parzystego: K 
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:
j 2 k n
1 N 1
x[n]    X [ k ]  e N
N k 0
(7)
Z powyższego porównania otrzymuje się natychmiast zależność pomiędzy współczynnikami
rozwinięcia (4) - czyli a k - i współczynnikami transformaty X [ k ] :
ak 
X [k ]
N
(8)
Zależność ta jest, jak widać, bardzo prosta. Niestety ciągi (5) są zespolone. Dla rzeczywistych ciągów
bazowych (6) pomiędzy współczynnikami rozwinięcia i współczynnikami transformaty zachodzi nieco
inny związek uwzględniający obecność fazy  k w opisie k-tego ciągu bazowego:
ak 
Przez
  X [ k ]
2
 X [k ]
N
oznaczono fazę elementu
 k    X [ k ]
(9)
X [ k ] transformaty.
Właśnie obecność w każdym ciągu bazowym (6) fazy, zależnej od ciągu
ciągów bazowych jest w takim przypadku równa około połowie
x[n] , powoduje, że ilość
N.
Warto zauważyć, że ciągi bazowe (5) tworzą układ ortogonalny i wszystkie te ciągi mają takie same
normy (w metryce euklidesowej). Co można na ten temat powiedzieć w przypadku ciągów bazowych
(6)?
Uwaga - zależności (7), (8) i (9) oraz wypływające z nich wnioski 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óbkowania sygnału zespolonego typu
i kosinusoidy
e j2 vt
Z powyższych rozważań na temat rozkładu na ciągi bazowe można wywnioskować co następuje.
Jeżeli ciąg pierwotny o długości N jest typu:
x[n]  e
j 2 k n
N
(10)
dla k  0,1,..., N  1 , to jego transformata DFT zawiera same zera poza jednym elementem
o indeksie k oraz X [ k ]  N . 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   k  n
x[n]  cos

N

 

(11)
k  0,1,..., N  1 , to jego transformata zawiera jedynie jeden lub dwa elementy niezerowe. Gdy
N
N jest parzyste, wówczas jedyny element niezerowy pojawi się dla k  0 lub k  . Dla N
2
nieparzystego jedyny element niezerowy pojawi się tylko dla k  0 . W pozostałych przypadkach
pojawią się dokładnie dwa elementy niezerowe, o indeksach k oraz N  k , które muszą dodatkowo
dla
spełniać odpowiednie symetrie, ponieważ ciąg (11) jest rzeczywisty, czyli:
X [k ]

X[ N  k]

N
2
  X [ k ]     X [ N  k ]  
(12)
Gdy ciąg pierwotny jest typu:
x[n]  cos2    f  n   
i częstotliwość cyfrowa
(13)
f nie spełnia zależności (14):
f 
k
N
(14)
to transformata takiego ciągu zawiera więcej niż dwie wartości niezerowe. Ponadto można zauważyć,
że w takim przypadku N kolejnych odcinków rozdzielających na osi ciągłego czasu punkty
próbkowania nie odpowiada całkowitej ilości okresów kosinusoidy.
Warto pamiętać, że transformacja DFT jest operacją liniową, zatem dowolny stały współczynnik
zmieniający amplitudę wszystkich wyrazów ciągu (10), (11) lub (13) pojawi się również jako
współczynnik skalujący amplitudy wszystkich 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 okolicy elementu środkowego.
Dokładniej, dla N parzystego maksymalna częstotliwość jest reprezentowana przez element
6
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
N
, natomiast dla N nieparzystego maksymalną częstotliwość reprezentuje
2
N 1
N 1
para elementów o indeksach
oraz
. Dla dowolnej długości ciągu składowa stała jest
2
2
reprezentowana przez element o indeksie 0 , natomiast najniższa niezerowa częstotliwość odpowiada
parze elementów transformaty o indeksach 1 oraz N  1 i częstotliwość ta rośnie w miarę zbliżania
transformaty o indeksie
się do elementów odpowiadających częstotliwości maksymalnej. Należy jednak pamiętać, że powyższe
wnioski odnośnie wysokości częstotliwości dotyczą wyłącznie dyskretnych wartości częstotliwości
cyfrowej określonych dla k  0,1,..., N  1 przez wzór (14). Wartości te można z kolei, dysponując
częstotliwością próbkowania, przeliczyć na dyskretne wartości częstotliwości w Hz. Każdej innej
częstotliwości cyfrowej z przedziału  0, 1) nie spełniającej warunku (14) będzie odpowiadać większa
ilość prążków rozłożona po całym przedziale, więc ciąg taki zawiera z punktu widzenia takiej
interpretacji różne częstotliwości - zarówno te wyższe, jak i niższe. Przykładowo, dla N  64 ciąg:
x[n]  cos2    0,125  n
(15)
odpowiada w dziedzinie transformaty DFT dwóm prążkom o indeksach 8 i 56. Identycznie opisany
ciąg, jednak dla N  66 , będzie odpowiadał wielu prążkom, choć dominować będą elementy 8 i 58.
Zatem w tym drugim przypadku nie da się powiedzieć, że z punktu widzenia DFT jest to ciąg
o określonej częstotliwości, bowiem zawiera tych częstotliwości wiele. Jest to dość istotna różnica w
stosunku do D-TFT, gdzie niemal zawsze (z wyjątkiem sytuacji prowadzącej do ciągu nieokresowego)
próbkowana kosinusoida o f  0 odpowiada dwóm prążkom lokalizującym jednoznacznie
częstotliwość, przy czym częstotliwość ta w przypadku D-TFT rośnie wraz z oddalaniem się od punktu
f  0 . Opisana różnica wynika z faktu, iż DFT operuje na skończonym ciągu próbek.
Jak, opierając się na obserwacjach poczynionych dla DFT oraz relacjach pomiędzy DFT i D-TFT
zbadanych w ramach poprzedniego ćwiczenia, wykazać słuszność powyższego porównania?
Ciąg transformaty DFT jest dla rzeczywistego ciągu pierwotnego symetryczny oraz częstotliwości rosną
w kierunku środkowego 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ą kompletną informację o wszystkich częstotliwościach typu (14).
1.7 Efekt Gibbsa
Jeżeli w dziedzinie transformaty wprowadzi się pewien błąd zmieniając nieco wartość jednego tylko
współczynnika tej transformaty - na przykład o indeksie k - to po powrocie do dziedziny pierwotnej
odtworzony ciąg x[n] nie będzie już identyczny z ciągiem początkowym x[n] . Z liniowości
transformacji DFT oraz rozważań na temat rozkładu na ciągi bazowe można wywnioskować, że zmiana
elementu X [ k ] transformaty o X [ k ] spowoduje wprowadzenie do ciągu pierwotnego błędu w
postaci ciągu bazowego o amplitudzie
X [ k ]
(w implementacji MATLAB’a):
N
X [ k ]  X [ k ]   X [ k ] 
 X [ k ]
x[n]  x[n] 
e
N
j2 k n
N
(16)
Gdyby transformatę ciągu rzeczywistego zmodyfikować tak, że zachowane będą odpowiednie symetrie,
na przykład tak:
X [ k ]  X [ k ]  X [ k ] 
X [ N  k ]  X [ N  k ]  conjX [ k ]
(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
składającego się z samych zer i tylko dwóch elementów niezerowych:
X err [ N  k ]  conj X [ k ] , czyli:
xerr [n] 
x[n]  x[n] 
2  X [ k ]
 2   k  n
 cos

N
N
X err
X err [ k ]  X [ k ] oraz

   X [ k ]

(18)
Biorąc pod uwagę liniwość transformacji DFT można zatem stwierdzić, że wprowadzenie błędu typu
(16) dla pewnej ilości wartości k spowoduje, że w dziedzinie pierwotnej wprowadzony błąd będzie
kombinacją liniową ciągów typu (18). W przypadku wykreślenia takiego ciągu błędu otrzymuje się
zazwyczaj obraz oscylacji. Opisany efekt pojawienia się zmian w ciągu pierwotnym w wyniku
wprowadzenia błędu w dziedzinie transformaty nazywa się efektem Gibbsa. Często rozważa się
szczególny przypadek tego błędu, gdy w dziedzinie transformaty pomija się zupełnie pewną grupę
współczynników, przyjmując w ich miejsce wartości zerowe.
Efekt Gibbsa może dotyczyć takż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 takiego wariantu jest bardzo podobne, co wynika 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 pakietu MATLAB
2.1 Uwagi ogólne
Warto pamiętać, że numeracja elementów wektorów w MATLAB’ie rozpoczyna się od “1”, zatem
indeksy czasowe i częstotliwościowe z rozważań z zakresu DSP - rozdział 1 instrukcji - są w stosunku
do tej numeracji przesunięte o “1” (pierwszy element ciągu pierwotnego lub transformaty ma tam
zwykle indeks “0”).
Z punktu widzenia czytelnego przedstawienia zagadnienia dość istotne jest jaka forma wizualizacji
zostanie wybrana dla danego zestawu danych. Niekiedy lepsze jest wypisanie na ekranie wartości wszystkich lub tylko wybranych - w postaci liczbowej, a innym razem korzystniejszy jest wykres typu
plot, stem lub mesh.
2.2 Przykłady rozwiązań wybranych problemów
Poniżej przedstawiono przykłady częściowych rozwiązań problemów podobnych do tych, które będą
tematem ćwiczeń. Przykłady nie zawierają etapu badania otrzymanych wyników - ten fragment należy
uzupełnić samodzielnie.
2.2.1 Badanie efektu skończonej precyzji obliczeń dla FFT pojedynczej długości ciągu wyznaczanie błędu średniokwadratowego (rmse) powstałego po przeprowadzeniu transformacji
w przód i wstecz:
>> N=128;
>> x=rand(1,N); X=fft(x); xi=ifft(X);
>> rmse=sqrt(sum(abs(x-xi).^2)/N);
sqrt jest funkcją Matlab’a wyznaczającą
pierwiastek kwadratowy
2.2.2 Test na ilość operacji zmiennoprzecinkowych w FFT w zależności od długości ciągu:
>> for N=2:2^8, x=rand(1,N); flops(0); X=fft(x); oper(N-1)=flops; end;
2.2.3 Macierzowa interpretacja DFT.
>> N=32;
>> MDFT=fft(eye(N));
>> x=rand(N,1);
>> X=MDFT*x;
uwaga - wektor “x” jest tym razem kolumnowy
Jakie przykłady należałoby zbadać, by się upewnić, czy metoda wyznaczania macierzy MDFT jest
poprawna?
2.2.4 Rozkład ciągu na ciągi bazowe
W tym przykładzie najpierw zostanie wygenerowany zestaw ortogonalnych ciągów bazowych
ułożonych w postaci kolumn macierzy “B”:
>> N=8;
>> x=rand(N,1);
kolumnowy wektor reprezentujący ciąg przeznaczony do
rozwinięcia
>> B0=zeros(N,N);
>> for k=1:N, B0(1:k,k)=rand(k,1)+0.5; end;
kolumny powinny być liniowo niezależne
>> rank(B0)
sprawdzenie, czy faktycznie tak jest
>> B(:,1)=B0(:,1)/sqrt(sum(abs(B0(:,1)).^2));
normalizacja pierwszej kolumny
poniżej procedura ortonormalizacyjna:
>> for k=2:N, b=B0(:,k); for m=1:k-1; b=b-(b’*B(:,m))*B(:,m);end;
B(:,k)=b./sqrt(sum(abs(b).^2)) ;end
ciąg “x” jest teraz rozwijany w szereg, gdzie kolumny macierzy “B” to ciągi bazowe:
>> X=B*x;
>> x2=zeros(N,1); for k=1:N, x2=x2+X(k)*B(:,k);end
>> err=x2-x;
9
DSP-MATLAB, Ćwiczenie 5,  P.Korohoda, KE AGH
Jak uzasadnić sposób, w jaki macierz “B” została wykorzystana do wyznaczania współczynników
poszukiwanego rozwinięcia?
2.2.5 Sprawdzanie ortonormalności układu ciągów (wektorów) bazowych
Niekiedy może się okazać przydatne stwierdzenie, czy dany układ wektorów jest ortogonalny oraz, czy
jest znormalizowany.
Zbadamy zatem ortogonalność kolumn macierzy “B0” oraz “B” z poprzedniego przykładu:
>> for k=1:N, for m=1:N, ILSKAL(k,m)=conj(B0(:,k)’)*conj(B0(:,m)); end; end;
>> mesh(ILSKAL);
>> for k=1:N, for m=1:N, ILSKAL(k,m)=conj(B(:,k)’)*conj(B(:,m)); end; end;
>> mesh(ILSKAL);
Jak powinna wyglądać macierz “ILSKAL” dla układu ortogonalnego, a jak dla nieortogonalnego?
Sprawdzenie normy ciągów bazowych:
>> for k=1:N, NORMA(k)=sqrt(conj(B(:,k)’)*conj(B(:,k))); end
Można również sprawdzić, że dla układu ortonormalnego macierz odwrotną do macierzy “B” można
otrzymać przez transpozycję macierzy “B”.
O czym powinna przypominać zastosowana przy wyznaczaniu iloczynu skalarnego i normy funkcja
conj (wartość sprzężona)? Czy można by w tym przykładzie z tej funkcji zrezygnować?
2.2.6 Transformaty ciągów pochodzących z próbkowania wybranych sygnałów ciągłych
>> N=64;
>> k=7;
>> n=0:63;
i następnie:
>> x=exp(j*2*pi*k*n/N+pi/7);
albo:
>> x=cos(2*pi*k*n/N+pi/7);
po czym:
>> X=fft(x);
i pozostaje już tylko sprawdzić odpowiednie hipotezy.
2.2.7 Błąd w dziedzinie pierwotnej wynikający ze zmiany wartości współczynników transformaty
>> N=64;
>> x=rand(1,N);
>> X=fft(x);
>> k=4;
>> DX=3*exp(j*pi/5);
wyraźnie widać jaką amplitudę i fazę ma błąd
>> X(k)=X(k)+DX;
>> X(N-k)=X(N-k)+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 wykonania
1. Pokazać na przykładzie, na czym polega macierzowa interpretacja DFT.
2. Sprawdzić poprawność algorytmu FFT zaimplementowanego w funkcji fft Matlab’a.
3. Zbadać efektywność algorytmu FFT w zależności od długości ciągu.
4. Potwierdzić istnienie odpowiednich symetrii w transformacie DFT rzeczywistego ciągu pierwotnego.
Pokazać, że symetrie te powstają także w ciągu pierwotnym, gdy transformata jest rzeczywista (bez
części urojonej) i wyjaśnić ten efekt.
5. Zademonstrować, co oznacza stwierdzenie, że transformata DFT zawiera współczynniki rozwinięcia
sygnału w szereg sygnałów bazowych.
6. Wykazać, na czym polega podział na wyższe i niższe częstotliwości w kontekście transformaty DFT.
7. Wyznaczyć transformaty DFT wybranych ciągów cyfrowych i wyjaśnić zaobserwowane cechy tych
transformat.
8. Pokazać za pomocą przykładów, na czym polega efekt Gibbsa.
11