logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Wykorzystanie FFT do obliczenia kąta przesunięcia fazowego?

Nuspakk 14 Wrz 2010 23:02 7417 10
REKLAMA
  • #1 8511608
    Nuspakk
    Poziom 10  
    Witam!
    Mam pytanie:
    czy można użyć szybkiej transformaty Fouriera do wyznaczenia kąta przesunięcia fazowego?
    Jeżeli obliczymy FFT napięcia i prądu sieci to dla prążka, który odpowiada częstotliwości 50Hz, mamy moduł i kąt napięcia oraz moduł i kąt prądu.
    Ufi = arctg(Im/Re)
    Ifi = arctg(Im/Re)
    więc kąt przesunięcia fazowego między napięciem a prądem:
    fi = Ufi - Ifi

    Dobrze myślę czy coś pominąłem?

    Dodam, że kąt potrzebny mi jest do liczenia mocy czynnej i biernej.
  • REKLAMA
  • #2 8516853
    pgplus
    Poziom 11  
    W moim przekonaniu tak ale musisz oczywiście pamiętać żeby próbki jednego i drugiego sygnału były zbierane jednocześnie i potem je przetwarzać FFT dla takiego samego okna czasowego: czyli ta sama szerokość okna i moment jego rozpoczącia.
  • REKLAMA
  • #3 8518251
    Nuspakk
    Poziom 10  
    Sprawdziłem w Matlabie.
    Aby pomiar był wiarygodny trzeba idealnie trafić w częstotliwość - żeby nie było przecieku. Czyli trzeba dobrać tak fs i liczbę próbek, żeby prążek podstawowy był pierwszy i odpowiadał częstotliwości sieci - wtedy kąt wychodzi idealnie. Jeżeli prążek podstawowy jest np. 10Hz to już pojawia się mały błąd, a przy sygnale zaszumionym, przy zmiennej częstotliwości obliczany kąt przesunięcia fazowego zmieniał by się w kosmos.

    Poniżej kod dla przypadku idealnego.
    Pzd.


    
    clear all;
    clc;
    N = 256;
    n = 1:1:N/2;
    fpr = 12800;
    dt = 1/fpr;
    t = 0:dt:(N-1)*dt;
    fii = pi/6;
    fiu = 0;
    prad =      sin(2*pi*50*t+fii);
    napiecie =  2*sin(2*pi*50*t+fiu);
    
    I = fft(prad);
    U = fft(napiecie);
    
    Ifi = 0;
    Ufi = 0;
    for p = 1:1:N/2
        Ifi(p) = (180*atan(imag(I(p))/real(I(p))))/pi;
        Ufi(p) = (180*atan(imag(U(p))/real(U(p))))/pi;
    end
    
    sprintf('Kat pradu %5.5f \nKat napiecia %5.5f: \nRoznica %5.5f ',Ifi(2),Ufi(2),(Ufi(2) - Ifi(2)))   
    
    plot(n*(fpr/N), abs(I(n)),n*(fpr/N),abs(U(n))); grid; title('FFT');
    
  • #4 8525542
    pgplus
    Poziom 11  
    No racja, coś nam na studiach o tym gadali ;).
    Na pewno istnieje możliwość zastosowania jakiś okien no ale ja sie na tym nie znam.
    Jeśli mogę coś podpowiedzieć to warto pomyśleć nad detekcją koherentną. Tu także musimy znać dokładnie częstotliwość sygnału no ale faza przesunięcia wychodzi od razu. Musiałbyś po prostu wymnożyć oba sygnały przez siebie i otrzymałbyś A*cos(fi) gdzie A to stała którą łatwo obliczyć.

    Jak poczytasz o detekcji koherentnej to zrozumiesz.

    A jak nie to służe pomocą.
    Pozd
    pg
  • REKLAMA
  • Pomocny post
    #5 8589858
    bartek96
    Poziom 13  
    Witam

    Żeby dowiedzieć się jakie jest przesunięcie między prądem a napieciem sieci nie musisz wcale liczyć FFT. Proponuje następujące rozwiązanie (na przykładzie):

    1. Jeśli znasz dokładną częstotliwość napięcia sieci, wygeneruj sobie tablicę sin[] i cos[], gdzie w sin[] powinna się znaleźć funkcja sinus o częstotliwości równej aktualnej częstotliwości sieci, podobnie dla cos[]. Wartości w tych tablicach powinny się zmieniać w granicach (-1 ; 1)

    2. Wykonaj splot sygnału wejściowego U[] z elementami tablicy sin[] i cos[]

    #define TAB_LEN 1000
    double U[TAB_LEN] , I[TAB_LEN]; // Zarejestrowany przebieg prądu i napięcia
    double sin[TAB_LEN] , cos[TAB_LEN];

    // TU WYGENERUJ PRZEBIEG W TABLICY SIN[] I COS[]

    double re_U , im_U , re_I , im_I;
    re_U = 0;
    im_U = 0;
    for(int i = 0 ; i < TAB_LEN ; i++)
    {
    re_U += U[i] * cos[i];
    im_U += U[i] * sin[i];
    }

    re_U /= TAB_LEN;
    im_U /= TAB_LEN;



    // TAKI SAM SPLOT WYKONAJ DLA PRZEBIEGU PRĄDU
    // następnie:


    double fi_U_I = atan2(im_U , re_U) - atan2(im_I , re_I);

    Wykorzystywałem tą metodę w trochę innym celu ale sprawdzała się rewelacyjnie (dużo dokładniejszy pomiar amplitudy i kąta dla tego jednego prążka).

    Jak zmierzyć częstotliwość sieci to mam nadzieję że wiesz :D

    Pozdrawiam
    Bartek
  • #6 8590481
    Nuspakk
    Poziom 10  
    Faktycznie! Sprawdza się :)
    Jednak tak samo jak przy wykorzystaniu FFT trzeba mieć sprzężenie zwrotne od częstotliwości :(

    x = 230*sin(2*pi*50*t+ pi/6); %Przebieg napięcia
    y = 10* sin(2*pi*50*t); %Przebieg prądu
    s = sin(2*pi*50*t);
    c = cos(2*pi*50*t);

    Wynik:
    fi_U_I =

    -30.0000

    >>

    Dzięki bartek96 za algorytm krótszy i prostszy od FFT.
    Pozdrawiam!
  • #7 8591932
    Dr.Vee
    VIP Zasłużony dla elektroda
    @bartek96 - to nie jest splot, tylko zwyczajna translacja częstotliwości z przejściem do reprezentacji IQ. Jeśli częstotliwości się zgadzają, to powinieneś dostać stały wektor...

    @Nuspakk - rozważałeś może pomiar momentu przejścia przez zero obu sygnałów? Z tego możesz policzyć zarówno częstotliwość, jak i różnicę fazy.

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #8 8592195
    bartek96
    Poziom 13  
    Cieszę się że mogłem pomóc :D

    kolego Nuspakk - Splot rozumiem jako przemnożenie próbka po próbce 2 sygnałów - w tym przypadku u[n] i sin[n]- czyli splatam te funkcje; następnie liczę sumę całkową po tym co splotłem. Więcej wspólnego mój algorytm ma z filtrem śledzącym. Jesli zaś chodzi o liczenie przesunięcia fazowego między prądem a napięciem to Twój pomysł może spalić na panewce, jeśli przebiegi będą zniekształcone dodatkowymi harmonicznymi albo szumem :(

    pzdr Bartek
  • #9 8594651
    DXFM
    Poziom 20  
    Kolego Nuspakk, co dokładnie potrzebujesz zmierzyć?
    Może prościej i lepiej liczyć moc czynną z definicji? Ponieważ jak rozumiem u i i próbkujesz, to liczysz sumę mocy chwilowych w odpowiednim przedziale czasowym, z grubsza P = 1/T * suma od n=1 do T z p(n); p(n) = u(n)*i(n).
    Kosinus fi masz tylko dla sinusoidalnych przebiegów, dla zniekształconych masz współczynnik mocy. Aby go obliczyć należy z podobnej definicji j/w wyliczyć wartość skuteczną U i I z ciągów wartości, które masz. Współczynnik mocy wynosi k=P/(U*I).
    Chyba, że interesuje Cię tylko i wyłącznie przesunięcie fazowe tylko dla częstotliwości podstawowej przebiegów odkształconych?
  • #10 8597326
    Nuspakk
    Poziom 10  
    Ojojoj. No to mnie DXFM oświecił. Wydawało mi się, że kąt przesunięcia fazowego i współczynnik mocy to jedno i to samo. Nawet nie brałem pod uwagę, że może być inaczej :(
    A współczynnik mocy to nie cos(fi)? Kurcze muszę poczytać.

    W zasadzie chodzi mi o pomiar wszystkich tych parametrów: P, Q, S, fi, współczynnik mocy ....

    Pozdrawiam!
  • #11 8656607
    DXFM
    Poziom 20  
    Nuspakk napisał:
    A współczynnik mocy to nie cos(fi)?

    To samo tylko i wyłącznie, gdy zarówno napięcie jak i prąd nie są odkształcone, to znaczy nie posiadają wyższych harmonicznych. W pozostałych przypadkach współczynnik mocy określa zawartość mocy biernej wszystkich harmonicznych. Być może w analizie charakterystyki danego odbiornika istnieje potrzeba określania cos(fi) dla każdej harmonicznej z osobna, aby potwierdzić z rozważaniami teoretycznymi i jego modelem matematycznym.
    Dlatego pytałem, do czego Ci to potrzebne, co chcesz zmierzyć?
REKLAMA