Szybka transformata Fouriera

Transkrypt

Szybka transformata Fouriera
7. Szybka transformata Fouriera fft
Dane pomiarowe sygnałów napięciowych i prądowych często obarczone są
dużym błędem, wynikającym z istnienia tak zwanego szumu. Jedną z metod
wspomagających analizę sygnałów jest szybka transformata Fourier'a [1]. Metoda umożliwia wydzielenie z analizowanego sygnału częstotliwości i amplitud
sygnałów składowych. Wynika to z założenia, że każdy sygnał można aproksymować złożeniem sygnałów sinusoidalnych o określonych częstotliwościach. W
środowiskach obliczeniowych, takich jak Matlab czy Scilab, zostały zaimplementowane funkcje realizujące metodę szybkiej transformaty Fourier'a [3]. W
programie Scilab jest to funkcja fft. Analiza sygnału funkcją fft umożliwia
uzyskanie informacji o amplitudach i częstotliwościach sygnałów sinusoidalnych budujących analizowany sygnał. W efekcie możliwe jest łatwe odfiltrowanie szumu i uzyskanie "czystego" sygnału do dalszej analizy.
7.1. Funkcje szybkiej transformaty Fouriera w Scilab'ie
Podstawową funkcją analizy Fourier'owskiej jest funkcja fft, której podstawową składnię zapisano poniżej [2], [4],
x=fft(a)
gdzie: x - wektor lub macierz (rzeczywisty lub zespolony) przekształcenia
Fouriera,
a - wektor lub macierz (rzeczywisty lub zespolony) analizowanego
sygnału – okres lub wielokrotność okresu.
Podstawowe zastosowanie funkcji szybkiej transformaty Fourier'a pokazany
w skrypcie zapisanym poniżej i rysunku 7.1. W przykładzie analizowany jest
sygnał z "szumem". W sygnale przetworzonym szybką transformatą Fourier'a
zauważyć można symetryczne rozłożenie impulsów odpowiadających poszczególnym harmonicznym sygnału. Wystarczy więc analizować połowę wektora
wynikowego funkcji fft [5].
clear;clc;clf;
f=50; //częstotliwość podstawowa
N=200; //liczba próbek na okres
Q=2;
//liczba okresów
w=2*%pi*f;
for k=1:Q*N+1 //generowanie sygnału i kroków czasowych
t(k)=(k-1)/(f*N);
x(k)=(5*sin(w*t(k)-0.5*%pi) +
2*sin(3*w*t(k)+0.5*%pi))*(1+0.2*rand());
end
X = fft(x); //transformata Fourier’a
subplot(211);
plot2d(t, x);
subplot(212);
plot2d(X,rect=[0,-1200,Q*N+1,500]);
Uzyskane wyniki nie pozwalają bezpośrednio uzyskać informacji o amplitudzie, fazie i częstotliwości analizowanego sygnału. Konieczne jest przekształcenie wektora wynikowego w celu uzyskania informacji o amplitudzie i fazie oraz
wygenerowanie zbieżnego z nim wektora częstotliwości w celu określenia częstotliwości analizowanego sygnału.
Rys. 7.1. Przebieg analizowanego sygnału i odpowiadającej mu transformaty
Zespolony wektor uzyskany po przetworzeniu sygnału przez funkcję szybkiej
transformaty Fouriera’a zawiera informacje o amplitudzie, fazie, a znając częstotliwość próbkowania lub czas pomiędzy poszczególnymi pomiarami analizowanego sygnału możliwe jest wyznaczenie wektora częstotliwości i określenie na
jego podstawie częstotliwości poszczególnych harmonicznych
Amplitudy poszczególnych harmonicznych można określić z modułu macierzy przetworzonego sygnału, liczby próbek zawartych w tym wektorze N oraz
liczbie okresów sygnału Q, jak pokazano na rysunku 7.2
plot2d(abs(X)/(Q*N/2));
Rys. 7.2. Przebieg zmodyfikowanego sygnału transformaty
Kolejnym etapem jest utworzenie wektora częstotliwości zgodnego z uzyskaną transformatą, jak pokazano na rysunku 7.3. Skalę częstotliwościową wyznacza się z wykorzystanie informacji o częstotliwości próbkowania sygnału
oraz liczbie próbek w analizowanym wektorze analizowanego sygnału.
f_p=1/(t(2)-t(1));
//częstotliwość próbkowania
fw=(f_p/(Q*N+1))*(0:Q*N); //wektor częstotliwości
Rys. 7.3. Spektrum częstotliwościowe analizowanego sygnału
Ze względu na symetrię rozkładu amplitud, oraz po analizie otrzymanego
przebiegu widać że wystarczy przeanalizować dane do częstotliwości około
500Hz, jak pokazano na rysunku 7.4.
Rys. 7.4. Ograniczone spektrum częstotliwościowe analizowanego sygnału
Zauważyć można dwa piki, pierwszy o amplitudzie 5.54 i częstotliwości
50Hz odpowiada pierwszej harmonicznej analizowanego sygnału, oraz drugi
mniejszy o amplitudzie 2.23 i częstotliwości 150Hz odpowiadający trzeciej
harmonicznej sygnału.
W analogiczny sposób można określić kąty fazowe wyznaczonych sygnałów.
Wartość kąta zawarta jest w wartości zespolonej wektora odwróconej transformaty Fourier’a.
a=real(X);
b=imag(X);
phaz=atan(b,a)+%pi/2;
phaz_st=phaz*180/%pi;
Analizując uzyskane wyniki, określono fazę pierwszej harmonicznej na -89o,
a trzecie na 93o. Porównując uzyskane wyniki z wartościami zadanego sygnału
można zauważyć pewne rozbieżności które są konsekwencją zadanego szumu.
7.2. Zadanie
Przeanalizować sygnał podany przez prowadzącego ćwiczenia. Określić amplitudy, fazy i częstotliwości składowych sygnału. Wykreślić przebieg analizowanego sygnału i sygnału odczytanego z analizy fourierowskiej sygnału. Przedstawić w sposób graficzny amplitudy i fazy poszczególnych harmonicznych
sygnału. Określić procentową wartość szumu.
Skrypt zadaniowy można zaprogramować zgodnie z wytycznymi pokazanymi na diagramie z rysunku 7.5.
Pobranie
danych
wejściowych
z pliku xls
Wykreślić przebieg
analizowanego sygnału
N
Przypisanie danych
wejściowych do wektorów
czasu i sygnału (t, F)
Określenie częstotliwości
próbkowania
Sprawdzenie liczby próbek
(liczby danych wejściowych N)
Wyznaczenie odwrotnej
transformaty Fourier’a
analizowanego sygnału
F_od=fft(F)
Wykreślić przebieg
wyznaczonego sygnału
Zaprezentować graficzne amplitudy i fazy
poszczególnych harmonicznych (wykres słupkowy)
Podać wartości liczbowe:
Przeprowadzić filtrowanie F_od,
wyznaczyć wartości maksymalne
Numery harmonicznych
Częstotliwości
harmonicznych
Amplitudy
harmonicznych
Określić liczbę harmonicznych
Wyznaczyć częstotliwości,
Fazy harmonicznych
amplitudy i kąty fazowe
poszczególnych harmonicznych
Rys. 7.5. Diagram skryptu realizującego zadanie analizy sygnału wejściowego
Zadany sygnał pomiarowy, będący podstawą analizy, zapisany jest w postaci
pliku Excel’a. Scilab dostarcza narzędzi umożliwiających pobranie danych z
arkusza *.xls.
 [fd,SST,Sheetnames,Sheetpos] = xls_open('nazwa');
Podpięcie pliku Excel’a do zmiennej plikowej fd.
 [Value,TextInd] = xls_read(fd,Sheetpos(1));
Przypisanie do zmiennej Value danych z pierwszego arkusza pliku Excel’a.
 mclose(fd);
Zamknięcie dostępu do pliku poprzez skasowanie zmiennej fd.
W trakcie pracy nad zadaniem przy analizowaniu wektorów danych przydatne mogą być polecenia:
max(A); - wyszukuje maksymalna wartość przechowywaną w macierzy A
min(A); - wyszukuje minimalną wartość przechowywaną w macierzy A
X=find(A>3); - wyszukuje wartości z macierzy A większe od 3 i przypisuje
ich współrzędne (indeksy) w macierzy A do wektora X
size(A); - podaje liczbę elementów macierzy A
round(X); - zwraca przybliżenie liczby X do wartości całkowitej
bar(x,y); - rysuje wykres słupkowy
Literatura
[1] Brozi A., Scilab w przykładach, Poznań, Nakom, 2010
[2] Strona SCILAB Enterprises S.A.S. [online], [dostęp 23 marca 2013],
Dostępny w World Wide Web: http://www.scilab.org
[3] Lachowicza C. T., Matlab, Scilab, Maxima. Opis i przykłady zastosowań,
wydawnictwo Politechniki Opolskiej, 2005
[4] Bolkowski S., Elektrotechnika, WSiP, 2012
[5] Majchrzak E., Mochnacki B., Metody numeryczne. Podstawy teoretyczne,
aspekty praktyczne i algorytmy, Wydawnictwo Politechniki Śląskiej, Wydanie
IV, 2004

Podobne dokumenty