Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

FFT algorytm - obliczeniach poszczególnych harmonicznych sygnału napięcia

wladkowy 19 Gru 2016 13:48
  • #1 19 Gru 2016 13:48
    wladkowy
    Poziom 1  

    Cześć, nie potrafię sobie poradzić z pewnym problemem.
    Naszukałem się tego w książkach i internecie, ale nadal nie rozwiązałem problemu.
    Nie potrafię wyznaczyć poszczególnych harmonicznych sygnału napięcia sieciowego po przepuszczeniu przez kalkulator FFT.

    Dla przykładu:
    -mam 1024 próbki mojego sygnału,
    -po przepuszczeniu tego przez kalkulator FFT dostaję 1024 liczby zespolone
    -połowę z nich odrzucam (od 513 do końca)
    -z każdej liczby zespolonej liczę moduł a następnie dzielę go przez N/2 (czyli 512)
    -mój okres próbkowania to 0,0002s a więc moja częstotliwość to 5000Hz
    -która próbka w zbiorze (o jakim numerze) będzie reprezentowała moją podstawową harmoniczną napięcia (czyli 50Hz) a która następne harmoniczne II, III rzędu itd?

    Zdaję sobie sprawę, że na forum jest mnóstwo podobnych tematów ale nie rozwiązują one mojego problemu.
    Nie potrzebuję rozumieć zasady obliczania FFT itp, chodzi mi tylko o algorytm, jak wydobyć przykładowo amplitudę 3-ciej harmonicznej napięcia.
    Może jest to problem trywialny, ale naprawdę nie potrafię sobie z tym poradzić i bardzo proszę o pomoc.
    Pytanie dodatkowe: czy jeżeli okres próbkowania nie jest zawsze stały, to czy da się coś takiego zrobić?

  • #2 19 Gru 2016 16:37
    chudek123
    Poziom 4  

    Witam,
    na wstępie zamieszczę kod Matlabowski z ostatnich zajęć laboratoryjnych z Sygnałów i Systemów Dynamicznych, ponieważ rozwiązywaliśmy ten problem:
    Zagadnienie: Rekonstrukcja sygnału na podstawie widma częstotliwościowego

    Kod: matlab
    Zaloguj się, aby zobaczyć kod


    Zdaję sobie sprawę, że nie rozwiązuję tu całkowicie Twojego problemu, ale może to posłużyć jako inspiracja. Pamiętam rysunek z tablicy, prowadzący narysował wektor [X(0),X(1),X(2),...,X(N-1)]
    a pod spodem odpowiadające im wartości k określające, która to jest próbka ze zbioru FFT, czyli [0,1,...,N-1], do obliczenia odpowiadających im częstotliwości f=k/N*Ts.
    A teraz chcesz się dowiedzieć, która próbka z wektora fft odpowiada podstawowej częstotliwości. Z mojego kodu, będzie to dla ks=1, a wynosić będzie f=ks*f0= f0. Jak widzisz f0=2, odczytałem z wykresu fft.

    Odpowiedź na pytanie dodatkowe:
    Według mnie w takiej sytuacji trzeba by rozdzielić sygnał na części, tak żeby rozdzielić kawałki z różniącymi się okresami(bez segregowania czy sortowaniu, po prostu pociachać).

    wladkowy kod z zajęć jest poprawny i materiał załączony tym bardziej, lecz każdemu słowu związanemu z moją opinią nie wierz bez potwierdzenia specjalisty, ponieważ jestem nieduoczny. Mam nadzieję, że przynajmniej wzbudzę tą wypowiedzią zainteresowanie tematem i uzyskasz pomoc lub jakoś Cię zainspiruję do rozwiązania.

  • #3 27 Gru 2016 20:53
    Kwarcu
    Poziom 11  

    Może od początku:
    Skoro chcesz zbadać zawartość harmonicznych w sygnale o częstotliwości bazowej 50Hz to najpierw musisz zadbać o to, żeby w oknie czasowym zmieścić dokładnie całkowitą wielokrotność okresu 50Hz (jest to dążenie do minimalizacji przecieku widma, zakładam, że stosujesz okno prostokątne). Rozdzielczość FFT wynosi (1 / FFT_N) * fs.
    Stąd, na przykład:
    - FFT_N = 64 (jest to jednocześnie ilość próbek N sygnału mieszczącego jeden okres lub jego wielokrotność)
    - fs = 50Hz*FFT_N = 3200Hz (wtedy rozdzielczość FFT wyniesie 50Hz)
    - po wykonaniu algorytmu fft otrzymujesz 64 zespolone próbki widma, odrzucasz połowę, liczysz moduł i skalujesz
    - otrzymane widmo zawiera teraz 32 harmoniczne : [0]-składowa stała, [1]-50Hz, [2]-100Hz, [3]-150Hz, (...) [31] 1550Hz
    Ogólnie wzór na n-tą harmoniczną 50Hz w tak wyliczonym widmie ma postać: [n] = (fs*n)/(FFT_N*50)

    Natomiast jeśli długość N twojego sygnału jest różna od FFT_N to stosujesz technikę tzw. "zero padding" i dalej liczysz jak wyżej.

    Jeśli chodzi o dodatkowe pytanie to w praktyce okres próbkowania nigdy nie jest idealnie stały (np. występuje "jitter" zegara ADC - ale to jest pomijalne), to zależy jak duże są te wahania fs. Skoro przeprowadzasz algorytm FFT który jest szczególnym przypadkiem DFT ( ang. Discrete Fourier Transform) to pracujesz na sygnale dyskretnym czyli wg definicji równomiernie próbkowanym. Przy zastosowaniu FFT nierównomierność okresu próbkowania będzie prowadzić do większych błędów. Istnieją jednak algorytmy, które sobie z tym radzą - poczytaj o NDFT (ang. non-uniform discrete Fourier transform).

  • #4 29 Gru 2016 18:18
    _jta_
    Specjalista elektronik

    A ja proponuję zacząć zabawę z FFT od wygenerowania sinusoid 50Hz i wielokrotności, przepuszczenia ich przez FFT i obejrzenia wyników.

    "Zero padding" wygeneruje szum na całe pasmo, pochodzący z transformowania skoku sygnału na granicy obszaru próbkowania - może lepiej uzupełnić dane odcinkiem łączącym ostatni punkt z pierwszym przesuniętym na koniec rozszerzonego obszaru? Wtedy ten szum będzie znacznie mniejszy. Ale wszystko do wypróbowania na "sztucznych danych"...

  Szukaj w 4mln produktów
Przeglądaj produkty