background image

Wrocław, dn.21.04.2005 

 
 
 
 
 
 
 
 
 

SPRAWOZDANIE Z ĆWICZENIA NR 7 

 

TEMAT: 

Dyskretna transformata Fouriera DFT.

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Wykonał:

 

 
 
 
 

termin: wtorek, godz.11

15

-13

00

 
 
 
 

background image

 

                

 

 

 

 

 

 

1.  Podstawy obliczania DFT. 
Korzystając ze skryptu Baza.m wyznaczono sygnały bazowe dyskretnego 
przekształcenia Fouriera, jeden z etapów obliczania transformaty oraz wynik 
ostateczny w postaci wykresu modułu, fazy, części rzeczywistej i urojonej 
transformaty. 

 

Rys. 1. Sygnały bazowe dyskretnego przekształcenia Fouriera. 

 

Rys. 2. Jeden z etapów obliczania dyskretnej transformaty Fouriera. 

background image

 0

 0.5

 1

 1.5

 2

 2.5

 3

 3.5

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

modul

line 1

 0

 0.5

 1

 1.5

 2

 2.5

 3

 3.5

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

modul

line 1

line 2

 0

 0.5

 1

 1.5

 2

 2.5

 3

 3.5

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

modul

 0

 0.5

 1

 1.5

 2

 2.5

 3

 3.5

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

modul

-0.2

 0

 0.2

 0.4

 0.6

 0.8

 1

 1.2

 1.4

 1.6

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc rzeczywista

-0.2

 0

 0.2

 0.4

 0.6

 0.8

 1

 1.2

 1.4

 1.6

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc rzeczywista

-0.2

 0

 0.2

 0.4

 0.6

 0.8

 1

 1.2

 1.4

 1.6

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc rzeczywista

-0.2

 0

 0.2

 0.4

 0.6

 0.8

 1

 1.2

 1.4

 1.6

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc rzeczywista

-15

-10

-5

 0

 5

 10

 15

 20

 25

-1000  0  1000 2000 3000 4000 5000 6000 7000

faza w stopniach

-15

-10

-5

 0

 5

 10

 15

 20

 25

-1000  0  1000 2000 3000 4000 5000 6000 7000

faza w stopniach

-15

-10

-5

 0

 5

 10

 15

 20

 25

-1000  0  1000 2000 3000 4000 5000 6000 7000

faza w stopniach

-15

-10

-5

 0

 5

 10

 15

 20

 25

-1000  0  1000 2000 3000 4000 5000 6000 7000

faza w stopniach

-4

-3

-2

-1

 0

 1

 2

 3

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc urojona

-4

-3

-2

-1

 0

 1

 2

 3

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc urojona

-4

-3

-2

-1

 0

 1

 2

 3

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc urojona

-4

-3

-2

-1

 0

 1

 2

 3

 4

-1000  0  1000 2000 3000 4000 5000 6000 7000

czesc urojona

 

Rys. 3. dyskretna transformata Fouriera, moduł, faza, część rzeczywista  

i urojona. 

 

Przeanalizowano dwa sposoby wektorów bazowych, to jest za pomocą  pętli i 
wektoryzacji pętli oraz napisano skrypt porównujący czas obliczania DFT z 
definicji z czasem obliczania z FFT. Listing skryptu zamieszczono na końcu 
sprawozdania. Poniżej zamieszczono wyniki otrzymane badając czasy 
obliczania transformaty obiema metodami. 
 
Tab. 1. Zestawienie wyników obliczania transformaty Fouriera: DFT, FFT. 

Długość 

sygnału 

próbkach 

 

 

16 

 

32 

 

64 

 

128 

 

256 

 

512 

 

1024 

DFT 0,043 0,045001 0,046  0,05 0,078 

0,0175 

0,564 

2,01 

FFT 0,037  0,036  0,039 0,037999 0,038 0,037 0,038 0,039 

 

background image

 

Rys. 4.Różnica czasów obliczania DFT i FFT. 

 

Listing napisanego skryptu m2freq.m dokonującego konwersji numerów 
prążków (n=0,1, … N-1) naczęstotliwości analizy zamieszczono na końcy 
sprawozdania.  
 
2.  Próbkowanie widma ciągłego. 
 
Na podstawie skryptu okresy.m  którego listing zamieszczony jest na końcu 
skryptu wyznaczono przebiegi czasowe oraz moduł widma sygnału 
sinusoidalnego o częstotliwości 125 Hz o całkowitej i obciętej części ostatniego 
okresu. 
Częstotliwość sygnału to 125 Hz natomiast częstotliwość analizy to 31,25 Hz, 
liczba próbek to 256, częstotliwość próbkowania to 8000 Hz.Parametry sygnału 
dobrano tak, aby zachodziła równość fs=fa*m/N. 

background image

 

Rys. 5.Wzkres czasowy i moduł widma sygnału sinusoidalnego o częstotliwości 

125 HZ (całkowita ilość okresów). 

 

Rys. 6.Wzkres czasowy i moduł widma sygnału sinusoidalnego o częstotliwości 

125 HZ (obcięta część ostatniego okresu). 

3.  Przeciek widma. 
Częstotliwość sygnału 100 Hz, fp=8000,fa=62,50. Parametry sygnału dobrano 
tak, aby nie zachodziła równość fa=fp*m/N 
 

background image

 

Rys. 7. Ilustracja przecieku widma. 

 
 
4.  Zwiększenie rozdzielczości DFT. 
 
Poniżej przedstawione są wykresy czasowe i moduły widm sygnałów 
sinusoidalnych z dołożonymi zerami na końcu sygnału. Operacja taka 
wykonywana jest w celu zwiększenia rozdzielczości widma sygnału. 

 

Rys. 8. Wykres czasowy i moduł widma sygnału sinusoidalnego. 

background image

 

Rys. 9.Wykres czasowy i moduł widma sygnału sinusoidalnego po zwiększeniu 

rozdzielczości 

 
5.  Zbadanie właściwości części rzeczywistej i urojonej. 
 
Modyfikując skrypty używane w ćwiczeniu wygenerowano wykresy modułu, 
części rzeczywistej i urojonej oraz fazy sygnału sinusoidalnego io dwukrotnie 
większej amplitudzie. 

 

Rys. 10. Wykresy modułu, części rzeczywistej i urojonej oraz fazy sygnału 

sinusoidalnego. 

background image

 

 0

 2

 4

 6

 8

 10

 12

 14

 16

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

modul

line 1

 0

 2

 4

 6

 8

 10

 12

 14

 16

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

modul

line 1
line 2

 0

 2

 4

 6

 8

 10

 12

 14

 16

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

modul

 0

 2

 4

 6

 8

 10

 12

 14

 16

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

modul

-1

 0

 1

 2

 3

 4

 5

 6

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc rzeczywista

-1

 0

 1

 2

 3

 4

 5

 6

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc rzeczywista

-1

 0

 1

 2

 3

 4

 5

 6

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc rzeczywista

-1

 0

 1

 2

 3

 4

 5

 6

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc rzeczywista

-10

-5

 0

 5

 10

 15

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

faza w stopniach

-10

-5

 0

 5

 10

 15

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

faza w stopniach

-10

-5

 0

 5

 10

 15

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

faza w stopniach

-10

-5

 0

 5

 10

 15

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

faza w stopniach

-20

-15

-10

-5

 0

 5

 10

 15

 20

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc urojona

-20

-15

-10

-5

 0

 5

 10

 15

 20

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc urojona

-20

-15

-10

-5

 0

 5

 10

 15

 20

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc urojona

-20

-15

-10

-5

 0

 5

 10

 15

 20

-1000  0  1000

 2000

 3000

 4000

 5000

 6000

 7000

 8000

czesc urojona

 

Rys. 11. Wykresy modułu, części rzeczywistej i urojonej oraz fazy sygnału 

sinusoidalnego o zwiększonej amplitudzie. 

 
 
 

6.  DFT sumy sygnałów. 
 
Modyfikując skrypty używane w ćwiczeniu wygenerowano wykresy czasowe 
sygnałów sinusoidalnych oraz moduły widm sumy sygnałów oraz sumy 
transformat. 
 

background image

 

Rys. 12. Wykresy czasowe sygnałów sinusoidalnych oraz moduły widm sumy 

sygnałów oraz sumy transformat. 

 

7.  Widmo fazowe. 
 
Poniżej przedstawiono przebiegi czasowe, moduł widma oraz fazę i fazę 
rozwiniętą sygnału sinusoidalnego tłumionego ekspotencjalnie.  

 

Rys. 13. Wykres czasowy moduł widma oraz faza i faza rozwinięta sygnału. 

background image

 

 
8.  Widmo sygnału przesuniętego w czasie. 
 
Wykres czasowy, moduł widma oraz faza sygnału sinusoidalnego 
 i przesuniętego w czasie przedstawiono poniżej.. 
 

 

Rys. 14. Wykres czasowy, moduł widma oraz faza sygnału sinusoidalnego 

 i przesuniętego w czasie. 

 

9.   Odwrotna dyskretna transformata Fouriera. 
 

background image

 

Rys. 15.Wykresy czasowe sygnału sinusoidalnego sinusoidalnego odtworzonego 

na podstawie odwrotnej transformaty Fouriera. 

 

 
10.  Wnioski. 
 
Na podstawi wyników otrzymanych porównując czas obliczania transformaty 
Fouriera z definicji i algorytmu FFT widać,  że przy niewielkiej długości 
transformaty czasy różnią się niewiele, natomiast wraz ze wzrostem długości 
transformaty różnica rośnie gwałtowniej. Różnice wynikają z tego, że przy 
obliczaniu z definicji dodatkowo obliczamy również bazę, natomiast przy FFT 
wykorzystujemy algorytm motylkowy. 
Widmo sygnału o całkowitej liczbie okresu posiada prążki o częstotliwości 
sygnału, natomiast przy sygnale obciętym pojawiają się dodatkowe prążki 
mówiące o zniekształceniu sygnału.  
DFT daje prawidłowe wyniki tylko wtedy, kiedy ciąg danych wejściowych 
zawiera energię rozłożoną dokładnie przy częstotliwościach, dla których 
dokonujemy analizy określonych równaniem fa=m*fp/N, będących całkowitymi 
wielokrotnościami częstotliwości podstawowej Fp/N. Przy częstotliwości 
pośrednich pojawia się tak zwany przeciek widma, czyli prążki przy wszystkich 
N wyjściowych wartościach częstotliwości DFT. 
Zwiększanie rozdzielczości DFT polega na dołożeniu wartości zerowych na 
koniec badanego sygnału. Efektem graficznym tego zabiegu jest dokładniejsze 
widmo amplitudowe badanego sygnału. 

background image

Część rzeczywista widma jest funkcją parzystą, natomiast część urojona 
nieparzystą. Dla rzeczywistego sygnału wejściowego sinusoidalnego związek 
pomiędzy wartością amplitudy widma a wartością amplitudy sygnału 
wejściowego jest następujący: Mr=Ao*N/2, natomiast dla sygnałów 
zespolonych Mc=Ao*N. 
Transformata sumy sygnałów x i y jest równa sumie transformat sygnałów x i y, 
co zostało odpowiednio zilustrowane w punkcie 6 sprawozdania.  
Moduł widma sygnału przesuniętego w czasie jest równy modułowi sygnału nie 
przesuniętego, natomiast faza jest zmieniona, co prowadzi do stwierdzenia, że 
przy odtwarzaniu sygnału z postaci częstotliwościowej do czasowej faza 
sygnału jest istotniejsza. 
Transformata Fouriera jest operacją odwracalną, pozwala na przejście z 
dziedziny częstotliwościowej do czasowej i odwrotnie. 
 
DODATEK: 
Listing skryptu por_czas.m porównującego czasy obliczania transformaty 
Fouriera z definicji DFT oraz FFT. 
 

%Oblicza DFT ,,z definicji''. i funkcji wbudowanej i wyswietla czasy 
% parametry 
N = 16;   

 

% dlugosc sygnalu w probkach 

f = [1000, 2000]; 

% czestotliwosci sygnalow skladowych 

ph = [0, (3/4)*pi]; 

% przesuniecia fazowe skladowych 

A = [1, 0.5]; 

 

% amplitudy skladowych 

bias = 0;   

% wartosc skladowej stalej 

fs = 8000;  

% czestotliwosc probkowanie 

mnoznik = 5; 

 

% zageszczenie probek dla reprezentacji ,,ciaglej'' 

 
n = 1:N;  % indeksy probek dla sygnalow bazowych 
% indeksy dla reprezentacji ,,ciaglych'' 
nContSize = mnoznik*N; 

 

% indeksy próbek 
nSamp = 1:N; 

 

 

 

% indeksy dla probek cyfrowych 

nCont = linspace(1,N,nContSize); 

% indeksy dla ,,ciaglych'' wersji sygnalow 

% synteza sygnalu 
freqLen = length(f); 
x = zeros(1, 1:N); 
xCont = zeros(1, 1:N*mnoznik); 
for k=1:freqLen 
 

x = x + A(k)*sin(2*pi*f(k)*(nSamp-1)./fs + ph(k)); 

 

xCont = xCont + A(k)*sin(2*pi*f(k)*(nCont-1)./fs + ph(k)); 

endfor 
% dodanie skladowej stalej 
x = x + bias; 
xCont = xCont + bias; 
% inicjalizacja macierzy z wektorami przestrzeni bazowej 
mSize = N; 
B  

= zeros(mSize, N); 

BCont   = zeros(mSize, nContSize); 
% wlaczenie "stopera" mierzacego czas wykonania operacji 
tic() 
% ---------------- Obliczanie bazy 
m = 1:N; 
B(m,n) = exp(-i*2*pi*(m-1)'*(n-1)/N); 
%----------- Obliczanie DFT z definicji --------------------- 
disp("Obliczam DFT z definicji") 
X = zeros(1,N); 
for iM = 1:N 
 X(iM) = x * (B(iM,:).'); 
endfor 
% zatrzymanie "stopera" 
printf("\tczas wykonania (z definicji) = %f \n",toc); 

background image

disp("Obliczam FFT ") 
% wlaczenie "stopera" mierzacego czas wykonania operacji 
tic() 
Z=fft(x,N); 
% zatrzymanie "stopera" 
printf("\tczas wykonania (FFT) = %f \n",toc); 
 
 
 
 
 

Listing napisanego skryptu m2freq.m dokonującego konwersji numerów 
prążków (n=0,1, … N-1) naczęstotliwości analizy

 

 
 
function [f] = m2freq(m, fs) 
%M2FREQ dokonuje konwersji numerów na częstotliwości analizy 
% [f] = m2freq(m, fs) 

% Wejscie: 
% m - wektor wierszowy z numerami prążków, 
% fs - częstotliwość próbkowania. 

% Wyjscie: 
% f - wektor wierszowy z częstotliwościami analizy 
% odpowiadającymi poszczegolnym numerom prążków. 
 
N=length(m); 
f_analizy=fs/N; 
f=(m-1)*f_analizy; 
 
endfunction 
 

Listing napisanego skryptu okresy.m wykreślającego przebieg czasowy i moduł 
widma sygnału o całkowitej i obciętej części okresu.

 

 
% parametry 
N = 256;   

% dlugosc sygnalu w probkach 

f = 125;  % czestotliwosci sygnalow skladowych 
fp = 8000; 

 

% czestotliwosc probkowanie 

ile=256; 
n = 1:N;  % indeksy probek dla sygnalow bazowych 
i=1:ile; 
% synteza sygnalu 
x = zeros(1, 1:N); 
x = sin(2*pi*f*(n-1)/fp); 
 
y=[ones(1,N-50),zeros(1,50)];  %obciecie sygnalu 
x=x.*y; 
%----------- Obliczanie DFT --------------------- 
disp("Obliczam DFT") 
 
X=fft(x,ile); 
 
    subplot(2,1,1);clg; 
    title("Wykres czasowy"); 
    xlabel("Czas"); 
    ylabel("Amplituda"); 
    plot((0:N-1)/fp,x,'b-'); 
     
 

i=m2freq(i,fp);  %przeskalowanie n 

     
    % WIZUALIZACJA_WYNIKU 
 % 

modul 

 subplot(2,1,2);clg;title("modul") 
    title("Modul widma"); 
    xlabel("Czestotliwosc"); 
    ylabel("Amplituda"); 
 
    plot(i-1,abs(X),'b^'); %hold "on";  grid "on"