Podstawy i algorytmy przetwarzania sygnałów(2) |
|||
Kierunek |
Specjalność |
Rok studiów |
Symbol grupy lab. |
Elektronika i Telekomunikacja |
|
2 |
Wtorek/N, 13:15 |
Temat |
Numer lab. |
||
Dyskretna Transformata Fouriera (DFT) |
Ćwiczenie nr 7 |
||
Skład grupy ćwiczeniowej |
|||
Arkadiusz szczotka |
|||
Uwagi |
Ocena |
||
|
|
1.Podstawy obliczania DFT :
Korzystając ze skryptu baza1.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.
Rysunek 1. Sygnały bazowe dyskretnego przekształcenia Fouriera.
Rysunek 2. Jeden z etapów obliczania dyskretnej transformaty Fouriera.
Rysunek 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. Skrypt zamieszczono na końcu sprawozdania. Poniżej zamieszczono wyniki otrzymane badając czasy obliczania transformaty obiema metodami.
Długość sygnału w próbkach |
8 |
16 |
32 |
64 |
128 |
256 |
DFT |
0,007999 |
0,007000 |
0,022001 |
0,036000 |
0,068000 |
0,214000 |
FFT |
0,007000 |
0,017999 |
0,006000 |
0,008001 |
0,004999 |
0,004999 |
Skrypt m2freq.m dokonującego konwersji numerów prążków (n=0,1, … N-1) na częstotliwości analizy :
function [f] = m2freq(nr_pr, fs_s)
%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.
dlugosc=length(nr_pr);
f_analizy=fs_s/dlugosc
f=(nr_pr-1)*f_analizy;
endfunction
2.Próbkowanie widma ciągłego :
Na podstawie skryptu okres.m który listing zamieszczony jest na końcu sprawozdania wyznaczono przebiegi czasowe oraz moduł widma sygnału sinusoidalnego o częstotliwości 425 Hz o całkowitej i obciętej części ostatniego okresu.
Częstotliwość sygnału to 425 Hz natomiast częstotliwość analizy to 23,438 Hz, liczba próbek to 256, częstotliwość próbkowania to 6000 Hz. Parametry sygnału dobrano tak, aby zachodziła równość fs=fa*m/N.
Rysunek 5.Wzkres czasowy i moduł widma sygnału sinusoidalnego o częstotliwości 425 HZ (całkowita ilość okresów).
Rysunek 6.Wzkres czasowy i moduł widma sygnału sinusoidalnego o częstotliwości 425 HZ (obcięta część ostatniego okresu).
3.Przeciek widma :
Częstotliwość sygnału 100 Hz, fp=8000, fa=103,90. Parametry sygnału dobrano tak, aby nie zachodziła równość fa=fp*m/N.
Rysunek 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.
Rysunek 8. Wykres czasowy i moduł widma sygnału sinusoidalnego.
Rysunek 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 o dwukrotnie większej amplitudzie.
Rysunek 10. Wykresy modułu, części rzeczywistej i urojonej oraz fazy sygnału sinusoidalnego.
Rysunek 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.
Rysunek 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 rozwiniętą sygnału sinusoidalnego tłumionego ekspotencjalnie.
Rysunek 13. Wykres czasowy moduł widma oraz faza i faza rozwinięta sygnału.
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.
Rysunek 14. Wykres czasowy, moduł widma oraz faza sygnału sinusoidalnego i przesuniętego w czasie.
9.Odwrotna dyskretna transformata Fouriera :
Rysunek 15.Wykresy czasowe sygnału sinusoidalnego odtworzonego na podstawie odwrotnej transformaty Fouriera.
10.Wnioski :
Na podstawie 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.
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: Skrypt porównującego czasy obliczania transformaty Fouriera z definicji DFT oraz FFT.
%Oblicza DFT ,,z definicji''. i funkcji wbudowanej i wyswietla czasy
% parametry
N = 256; % 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);
disp("Obliczam FFT ")
% wlaczenie "stopera" mierzacego czas wykonania operacji
tic()
Z=fft(x,N);
% zatrzymanie "stopera"
printf("\tczas wykonania (FFT) = %f \n",toc);