Przekształcenie Fouriera - WEMiF

Transkrypt

Przekształcenie Fouriera - WEMiF
Politechnika Wrocławska
Wydział Elektroniki Mikrosystemów i Fotoniki
Przetwarzanie sygnałów – laboratorium
ETD5067L
Ćwiczenie 2.
Przekształcenie Fouriera
1. Liczby zespolone
Liczby zespolone są uogólnieniem liczb rzeczywistych. Liczba zespolona jest sumą liczby
rzeczywistej i liczby rzeczywistej przemnożonej przez jednostkę urojoną j ( a  jb ), która jest
zdefiniowana jako spełniająca równość j 2 = –1. Zatem liczbę zespoloną można podzielić na dwie
części: część rzeczywistą a i część urojoną b. Liczba zespolona, której część urojona jest równa
zero, jest po prostu liczbą rzeczywistą. Zbiór liczb zespolonych oznacza się zwykle dużą literą ℂ,
podobnie jak zbiór liczb rzeczywistych oznacza się dużą literą ℝ. Liczby zespolone można
przedstawić na płaszczyźnie zespolonej jako punkty. Oś pozioma płaszczyzny informuje
o wartościach części rzeczywistej liczb zespolonych, natomiast oś pionowa – o wartościach części
urojonej.
Zatem oś poziomą można traktować jako oś liczb rzeczywistych, które stanowią podzbiór liczb
zespolonych. Dla liczb zespolonych zdefiniowane są operacje algebraiczne, takie jak:
●
dodawanie
a jbc jd =ac  j bd  ,
●
odejmowanie
a jb−c jd =a−c  j b−d  ,
●
mnożenie
a jbc jd =ac−bd  j ad bc ,
●
dzielenie
a jb acbd
bc−ad
=
j 2
.
c jd  c 2 d 2
c d 2
1
Płaszczyznę liczb zespolonych można przedstawić również w układzie biegunowym,
w którym położenie punktu definiuje się za pomocą długości wektora i kąta jaki tworzy on
z dodatnią półosią poziomą.
Położenie punktu w układzie biegunowym można łatwo wyznaczyć, przechodząc z algebraicznej
postaci liczby zespolonej do postaci trygonometrycznej a jb=r cos  j sin  lub
wykładniczej a jb =r e
j
. Aby takiego przejścia dokonać, należy obliczyć r i  , korzystając
b
z zależności r = a 2b 2 , =arctg  a  . Aby przejść z postaci wykładniczej na algebraiczną,
wykorzystuje się postać trygonometryczną oraz oblicza wartości r sin  i r cos  , co daje nam
wartości odpowiednio części urojonej i rzeczywistej.
Reprezentacja liczb zespolonych w układzie biegunowym wiąże się z pewnymi niedogodnościami.
Pierwsza z nich wynika z okresowości funkcji trygonometrycznych sin =sin 2 n
j
j 2  n
i cos =cos 2  n dla n∈ℤ . Dlatego r e =r e
dla n∈ℤ . Drugą niedogodnością
jest konieczność rozpatrzenia przypadku, w którym część rzeczywista liczby zespolonej jest równa
 
0. Należy też pamiętać, że funkcja arcus tangens (arctg) przyjmuje wartości z przedziału 〈− 2 , 2 〉 ,
podczas gdy kąt  powinien przyjmować wartości od 〈− ,〉 . Aby zatem obliczyć poprawny
kąt fazowy  należy odpowiednio skorygować wynik funkcji arctg dla przypadków, kiedy część
rzeczywista liczby zespolonej jest ujemna. Wówczas – w zależności od tego, czy część urojona jest
dodatnia czy ujemna – należy do wyniku funkcji arctg dodać lub od tego wyniku odjąć liczbę  .
2. Przekształcenie Fouriera
Przekształcenie Fouriera służy do rozkładu dowolnego sygnału na sygnały sinusoidalne.
Funkcja sinusoidalna ma szczególne znaczenie dla systemów liniowych, dlatego że niezmienny
w czasie system liniowy przekształca dowolną funkcję sinusoidalną na funkcję sinusoidalną o innej
amplitudzie i przesunięciu fazowym. Jeżeli dysponuje się przekształceniem, które rozkłada
dowolny sygnał na zbiór funkcji sinusoidalnych, to można teoretycznie przewidywać, w jaki sposób
sygnał ten zostanie przetworzony przez dowolny niezmienny w czasie system liniowy. Ten fakt
zadecydował o niezwykłej przydatności przekształcenia Fouriera.
Rodzina przekształceń Fouriera składa się z czterech rodzajów przekształceń. Pierwszym
przekształceniem są tzw. szeregi Fouriera. Przekształcenie to transformuje dowolny sygnał
okresowy na nieskończony zbiór sinusoid i kosinusoid o ściśle określonych dyskretnych
częstotliwościach.
2
2.1. Równania analizy do obliczania współczynników szeregu Fouriera
Aby dowolny sygnał rozłożyć na zbiór sinusoid i kosinusoid, należy posłużyć się
odpowiednim równaniem analizy. Istnieją dwie postacie tego równania. Pierwsza może być
wykorzystana tylko do analizy sygnałów rzeczywistych, druga zaś do analizy zarówno sygnałów
rzeczywistych, jak i zespolonych.
2.1.1. Dla rzeczywistych sygnałów okresowych
 
 
T
2  mt
2
x t  cos
dt
∫
T 0
T
R[m] =
T
2  mt
2
I [ m] = − ∫ x tsin
dt
T 0
T
2.1.2. Dla zespolonych sygnałów okresowych
T
−j
1
X [m]= ∫ x t e
T 0
2 m t
T
dt
2.2. Równania syntezy sygnału na podstawie znanych współczynników
szeregu Fouriera
Aby na podstawie znanych współczynników szeregu Fouriera odtworzyć z powrotem
okresowy sygnał w dziedzinie czasu należy posłużyć się odpowiednimi równaniami syntezy. Jeżeli
współczynniki Fouriera opisują sygnał rzeczywisty, to można posłużyć się równaniami syntezy
dla sygnałów rzeczywistych. Jeżeli natomiast syntezowany sygnał jest sygnałem zespolonym,
to należy zastosować równania syntezy dla okresowych sygnałów zespolonych.
2.2.1. Równania dla ciągłych okresowych sygnałów rzeczywistych
∞

x t = ∑ R[m]cos
m=0



2 mt
2  mt
−I [m]sin
T
T

Należy pamiętać, aby przed zastosowaniem tego równania współczynnik R[ 0] podzielić przez 2.
2.2.2. Równania dla ciągłych okresowych sygnałów zespolonych
∞
x t = ∑ X [m] e
j 2 mt
T
m=0
3
Szeregi Fouriera służą do przekształcania sygnałów okresowych na zbiór dyskretnych
współczynników. Do rozkładu na zbiór funkcji sinusoidalnych sygnałów nieokresowych służy tzw.
ciągłe przekształcenie Fouriera (ang. continuous Fourier transform, CFT). Przekształcenie to jest
przekształceniem bardziej ogólnym dlatego, że można z niego korzystać zarówno do sygnałów
okresowych, jak i nieokresowych. Dla sygnałów okresowych daje ono jednak takie same wyniki
jak rozkład na współczynniki szeregu Fouriera. Dla sygnałów nieokresowych w wyniku CFT
otrzymuje się ciągłą funkcję rozkładu. Oznacza to, że sygnał nieokresowy rozkładany jest
na nieskończony zbiór sinusoid i kosinusoid, których częstotliwość zmienia się w sposób ciągły.
Dlatego w wyniku przekształcenia otrzymujemy ciągłą funkcję rozkładu, która pokazuje, jaka jest
amplituda sinusoidy lub kosinusoidy o danej częstotliwości f lub pulsacji =2 f .
Do wyznaczenia funkcji rozkładu wykorzystuje się równania analizy.
2.3. Równania analizy do obliczania widma ciągłego przekształcenia Fouriera
2.3.1. Równania analizy dla ciągłych nieokresowych sygnałów rzeczywistych
1 ∞
R =
∫ x t cos t d t
 −∞
1 ∞
I  = − ∫ x t sin t d t
 −∞
2.3.2. Równania analizy dla ciągłych nieokresowych sygnałów zespolonych
1 ∞
X =
x t e− j t d t
∫
2  −∞
2.4. Równania syntezy sygnału na podstawie znanego widma CFT
Podobnie jak szeregi Fouriera CFT jest przekształceniem odwracalnym. Istnieją więc
odpowiednie równania syntezy.
2.4.1. Równania syntezy dla ciągłych nieokresowych sygnałów rzeczywistych
∞
x t =∫ R cos t− I  sint d 
0
2.4.2. Równania syntezy dla ciągłych nieokresowych sygnałów zespolonych
∞
x t =∫ X  e j  t d 
−∞
4
Wszystkie omawiane dotychczas przekształcenia Fouriera służyły do przekształcania
w czasie sygnałów ciągłych. Szybki rozwój technologii układów cyfrowych sprawił, że popularne
stało się przetwarzanie sygnałów dyskretnych. Sygnały takie można przetwarzać za pomocą
wyspecjalizowanych układów cyfrowych, albo za pomocą komputera. Należy zdawać sobie sprawę
z faktu, że omówione wcześniej transformaty mogą być wykorzystywane tylko do obliczeń i analiz
symbolicznych. Za pomocą urządzeń cyfrowych można wykonać tylko jeden rodzaj przekształcenia
Fouriera, dlatego najważniejszym przekształceniem jest dyskretne przekształcenie Fouriera
(ang. discrete Fourier transform, DFT). Za pomocą tej techniki można rozkładać każdy dyskretny
rzeczywisty i zespolony sygnał na zbiór dyskretnych w czasie i częstotliwości sinusoid i kosinusoid.
2.5. Równania analizy do obliczania współczynników
dyskretnego przekształcenia Fouriera
2.5.1. Równania analizy dla dyskretnych okresowych sygnałów rzeczywistych
N −1




2  mn
N
n=0
N −1
2 mn
2
I [ m] = − ∑ x [n]sin
N n=0
N
2
N
R[m] =
∑ x [n]cos
2.5.2. Równania analizy dla dyskretnych okresowych sygnałów zespolonych
X [ m]=
N −1
1
N
∑
x [ n] e
− j 2 mn
N
n=0
2.6. Równania syntezy sygnału na podstawie współczynników DFT
2.6.1. Równanie syntezy sygnału rzeczywistego na podstawie współczynników DFT
N
−1
2

x [n ]= ∑ R [m] cos
m=0



2  mn
2  mn
− I [m]sin
N
N

Należy pamiętać, aby podzielić X [ 0] przez 2 przed podstawieniem do równania syntezy.
2.6.2. Równanie syntezy sygnału zespolonego na podstawie współczynników DFT
N −1
X [ n]= ∑ X [m] e
j 2  mn
N
m=0
Istotne jest, aby po wykonaniu DFT wiedzieć, jakiej częstotliwości odpowiadają poszczególne
składowe. Częstotliwość m-tej składowej możemy obliczyć według wzoru f m=
jest częstotliwością próbkowania.
5
f s⋅m
N
, w którym f s
W przypadku dyskretnych sygnałów nieokresowych jeżeli sygnał jest określony od −∞
do ∞ , to stosuje się dyskretne w czasie przekształcenie Fouriera (ang. discrete-time Fourier
transform, DTFT).
2.7. Równania analizy przekształcenia DTFT
2.7.1. Równania analizy dla dyskretnych nieokresowych sygnałów rzeczywistych
1 ∞
R =
∑ x [ n]cos n
 n=−∞
1 ∞
I  = − ∑ x [n]sin n
 n=−∞
2.7.2. Równanie analizy dla dyskretnych nieokresowych sygnałów zespolonych
X =
1 ∞
x [ n] e− j n
∑
2 n=−∞
2.8. Równania syntezy przekształcenia DTFT
2.8.1. Równanie syntezy dyskretnego nieokresowego sygnału rzeczywistego
na podstawie widma DTFT
2
x [n ]=∫ R  cos n−I sin n d 
0
2.8.2. Równanie syntezy dyskretnego nieokresowego sygnału zespolonego
na podstawie widma DTFT
2
x [n ]=∫ X  e j n d 
0
Dyskretne w czasie przekształcenie Fouriera, mimo że transformuje sygnał dyskretny, nie może
zostać obliczone numerycznie na komputerze. Przyczyną tego jest fakt, że nie sposób
przechowywać w pamięci nieskończenie długich przebiegów; nie chodzi tylko o sygnał
transformowany, ale również o zapisanie wyniku transformaty, który to wynik jest funkcją ciągłą
na przedziale od 0 do 2  .
6
3. Zadania do realizacji
Na zajęciach laboratoryjnych należy rozwiązać 5 podanych poniżej zadań. Każde z zadań
polega na usunięciu błędów w podanych definicjach funkcji. Każda z definicji wykonuje operacje,
które zostały teoretycznie omówione w poprzednich rozdziałach niniejszej instrukcji. Za każde
zadanie można otrzymać jeden punkt pod warunkiem, że zostanie ono całkowicie poprawnie
zrealizowane.
Zadanie nr 1
W zadaniu pierwszym należy poprawić funkcje do obliczania modułu (gj_mag) i wartości
kąta fazowego (gj_arg) dla tablicy liczb zespolonych zaimplementowanej w postaci dwóch tablic
liczb rzeczywistych (re dla części rzeczywistej i im dla części urojonej). Wszystkie te funkcje
zwracają tablicę liczb rzeczywistych. Ponadto należy usunąć błędy w funkcji do obliczania
częstotliwości poszczególnych składowych widma Fouriera (gj_freq). Funkcje te przyjmują jako
parametry liczbę punktów DFT N i częstotliwość próbkowania fs . Ostatnimi funkcjami
do poprawienia w zadaniu pierwszym są funkcje dodawania (gj_cadd) i mnożenia (gj_cmul)
dwóch liczb zespolonych. Parametrami tych funkcji są części rzeczywiste i urojone dwóch liczb
zespolonych. Zwracane wartości to odpowiednio część rzeczywista i urojona wyniku operacji
dodawania lub mnożenia.
function fi=gj_arg(re,im)
N=length(re);
for i=1:N
if (re(i)>0 && im(i)>0)
fi(i)=atan(im(i)/re(i));
elseif (re(i)>0 && im(i)>=0)
fi(i)=pi+atan(im(i)/re(i));
elseif (re(i)==0 && im(i)>0)
fi(i)=-pi+atan(re(i)/im(i));
elseif (re(i)=<0 && im(i)<0)
fi(i)=-pi;
elseif (re(i)>0 && im(i)<=0)
fi(i)=atan(im(i)/re(i));
else
fi(i)=pi/2;
endif
endfor
endfunction
7
function mag=gj_mag(re,im)
N=length(re);mag=zeros(1,N);
for i=1:N
mag(i-1)=sqrt(re(i)*re(i)-im(i)*im(i));
endfor
endfunction
function [Cr,Ci]=gj_cmul(Ar,Ai,Br,Bi)
Cr=Ar*Bi-Ai*Bi;
Ci=Ar*Bi+Ai*Bi;
endfunction
function [Cr,Ci]=gj_cadd(Ar,Ai,Br,Bi)
Cr=Ar+Br;
Ci=Ai+Bi;
endfunction
function f=gj_freq(N,fs)
f=zeros(1,N);
for i=1:N
f(i)=i*fs/N/2;
endfor
endfunction
Zadanie nr 2
Zadanie drugie polega na usunięciu błędów z funkcji obliczającej DFT sygnału
rzeczywistego. Funkcja jako parametr przyjmuje tablicę liczb rzeczywistych, a w wyniku zwraca
dwie tablice, odpowiednio dla części rzeczywistej i urojonej wyniku.
8
function [Re,Im]=gj_rdft(x)
N=length(x); Re=zeros(1,N/2+1); Im=zeros(1,N/2+1);
for k=0:N/2
Tr=0;
Ti=0;
for n=0:N-1
Tr+=2*x(n)*cos(2*pi*k*n/N)/N;
Ti+=-2*x(n)*sin(2*pi*k*n/N)/N;
endfor
Re(k)=Tr;
Re(k)=Ti;
endfor
endfunction
Zadanie nr 3
Zadanie trzecie polega na usunięciu błędów z funkcji obliczającej odwrotną DFT sygnału
rzeczywistego. Funkcja jako parametr przyjmuje dwie tablice liczb rzeczywistych (jedna dla części
rzeczywistej, a druga dla części urojonej widma DFT). W wyniku natomiast zwraca tablicę liczb
rzeczywistych odpowiadających kolejnym próbkom sygnału.
function x=gj_irdft(Re,Im)
N=(length(Re)-1)*2; Re(1)/=2; Im(1)/=2;
Re(N/2+1)/=2; Im(N/2+1)/=2; x=zeros(1,N);
for n=0:N-1
T=0;
for k=1:N/2
T+=Re(k)*cos(2*pi*n*k/N)-Im(k)*sin(2*pi*n*k/N);
endfor
x(n)=T;
endfor
endfunction
9
Zadanie nr 4
Zadanie czwarte polega na usunięciu błędów z funkcji obliczającej DFT sygnału zespolonego.
Funkcja jako parametr przyjmuje dwie tablice liczb rzeczywistych (jedna dla części rzeczywistej
sygnału, druga dla części urojonej sygnału), a w wyniku zwraca dwie tablice odpowiednio
dla części rzeczywistej wyniku i urojonej widma DFT.
function [Yr,Yi]=gj_cdft(Xr,Xi)
N=length(Xr);
for i=1:N
Tr=0;Ti=0;
for j=1:N
Er=cos(2*pi*(i)*(j)/N);
Ei=sin(2*pi*(i)*(j)/N);
[Er,Ei]=gj_cmul(Xr(j),Xi(j),Er,Ei);
[Tr,Ti]=gj_cadd(Tr,Ti,Er,Ei);
endfor
Yr(i)=Tr;Yi(i)=Ti;
endfor
endfunction
Zadanie nr 5
Zadanie piąte polega na usunięciu błędów z funkcji obliczającej odwrotną DFT sygnału
zespolonego. Funkcja jako parametr przyjmuje dwie tablice liczb rzeczywistych (jedna dla części
rzeczywistej, a druga dla części urojonej widma DFT). W wyniku również zwraca dwie tablice
liczb rzeczywistych (jedna dla części rzeczywistej, a druga dla części urojonej sygnału).
function [Yr,Yi]=gj_icdft(Xr,Xi)
N=length(Xr);
for i=1:N
Tr=0;Ti=0;
for j=1:N
Er=cos(2*pi*(i)*(j)/N);
Ei=sin(2*pi*(i)*(j)/N);
10
[Er,Ei]=gj_cmul(Xr(j),Xi(j),Er,Ei);
[Tr,Ti]=gj_cadd(Tr,Ti,Er,Ei);
endfor
Yr(i)=Tr;Yi(i)=Ti;
endfor
endfunction
Pytania na kartkówkę
1. Napisać funkcję obliczającą moduł liczby zespolonej
2. Napisać funkcję obliczającą argument liczby zespolonej
3. Napisać funkcję obliczającą iloczyn dwóch liczb zespolonych
4. Napisać funkcję obliczającą wartość częstotliwości dla składowych N-punktowej DFT
5. Napisać funkcję do obliczania m-tej składowej rzeczywistej DFT
6. Napisać funkcję do obliczania m-tej składowej zespolonej DFT
7. Napisać funkcję do obliczania n-tej próbki sygnału zespolonego na podstawie widma DFT
8. Napisać funkcję do obliczania n-tej próbki sygnału rzeczywistego na podstawie widma DFT
11