Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Analiza harmonicznych przebiegu spróbkowanego

egzekta 27 Mar 2007 14:26 7031 7
  • #1
    egzekta
    Level 12  
    Witam, mam taki oto problem: w pliku txt mam 2500 próbek sygnału okresowego i muszę znależć amplitudy wszystkich jego harmonicznych do 40stej włącznie. Już wiem że nie da się tego zrobić w excelu:) więc pytanie moje jest w jakim programie i w jaki sposób mógłbym tego dokonać?
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • #3
    egzekta
    Level 12  
    tyle to ja wiem tylko że jak to zrobić w matlabie? wystarczy wpisac fft(A)? wątpię :(
  • #4
    p_piotr
    Level 11  
    Jeżeli A to będzie wektor próbek wczytany z pliku to właśnie tak trzeba:)
    potem z tego co wyjdzie możesz wyliczyć moduł i masz widmo amplitudowe.

    Tyle, że jeśli chcesz potem znaleźć fizyczne częstotliwości tych harmonicznych to potrzebujesz znać szybkość próbkowania.
  • #5
    shg
    Level 35  
    Szybkości próbkowania nie trzeba znać, bo trzeba wyznaczyć amplitudy kolejnych harmonicznych, tak przynajmniej to rozumiem. Problem jest inny, trzeba najpierw znaleźć okres tego sygnału. FFT się do tego raczej nie nada, proponowałbym autokorelację a dopiero po znalezieniu dokładnej długości okresu wykonanie FFT na wektorach o długości odpowiadającej okresowi, wyniki kolejnych transformacji można by uśrednić.
    Rzecz jest o wiele prostsza, jeżeli w tym pliku masz całkowitą ilość pełnych okresów, wtedy wystarczy ot tak po prosu ffa(A) i odczytywanie co n-tego prążka, gdzie n jest ilością okresów w zbiorze danych.
    Jak się liczyło moduły w matlabie nie pamiętam, może coś w rodzaju B=mag(A), albo abs() zamiast mag().
  • #6
    p_piotr
    Level 11  
    Hej!
    No jeśli nie chce się znać jaką fizycznie częstotliwość ma dana harmoniczna to faktycznie szybkość próbkowania nie jest potrzebna.

    Moduł liczy się w Matlabie przy pomocy abs(A).

    Co miałaby dać autokorelacja, bo nie chwytam...?
    Jakieś rozsądne okno by nie wystarczyło?

    Pozdrowienia,
    Piotr
  • #7
    shg
    Level 35  
    Łatwiej jest z autokorelacji znależć dokładną częstotliwość podstawową gdy nie jest ona całkowitą wielokrotością rozdzielczości transformacji Fouriera. Na obrazkach 2500 punktów (tylko fragment osi X, tak dla czytelności), dla uproszczenia powiedzmy, że próbkowanie 2500Hz i sygnały 25.0 (niebieski) oraz 25.5Hz (czerwony) dla porównania, czyli różnica poniżej rozdzielczości FFT. Na transformacie Fouriera nie za bardzo widać ile dokładnie tam jest (okno Hamminga, bez okna równie nieczytelne). Niewiele dało by się wyczytać bez zaprzęgania do tego jakiegoś algorytmu analizującego zbocza pików. Na autokorelacji za to możemy sobie sprawdzić z ilu próbek składa się nie jeden, a powiedzmy n okresów sygnału (wystarczy znależć n-te maksimum, a to dość łatwe).
    Analiza harmonicznych przebiegu spróbkowanegoAnaliza harmonicznych przebiegu spróbkowanego

    Dla przebiegów zawierających harmoniczne, czy nawet podharmoniczne jest równie łatwo w wypadku autokorelacji, natomiast FT, no cóż... Na wykresach 25.0Hz i 25.5Hz + po dwie harmoniczne wyprostowane pełnookresowo, czyli przepuszczony przez układ nieliniowy, a co za tym idzie zawierający mnóstwo śmieci (produkty mieszania), mimo tego wciąż dokładnie wiadomo, która z częstotliwości jest tą podstawową.
    Analiza harmonicznych przebiegu spróbkowanegoAnaliza harmonicznych przebiegu spróbkowanego

    Zamiast Matlaba polecałbym Scilaba, przede wszystkim dlatego że jest darmowy. U mnie jak narazie się sprawdza, a i dla systemu operacyjnego lżejszy do "przetrawienia".
  • #8
    stopi
    Level 28  
    Chyba odbiegliście nieco od tematu postawionego na początku... Koledze chodzi po prostu o to jak zrobic FFT z pewnego wektora złożonego z danej ilości próbek. Mnie się wydaje,że Matlab bedzie do tego najprostszy w użyciu. Ma wbudowaną funkcję FFT więc nie trzeba za bardzo wnikac w to jak ona działa.

    Zamieszczam przykładowy kod analizy sygnalu złożonego z dwóch sinusoid,który kiedyś pisałem:

    clear; %wyczyśc pamięc zmiennych
    %analiza fouriera (DFT) sygnalu zlozonego z dwoch sinusoid
    %sprobkowanego z czest.8 kHz
    n=0:19; %numery probek sygnalu wejsciowego
    N=size(n); %ilosc probek sygnalu wejsciowego
    Nn=N(1,2); %wymiar macierzy n
    fs=20000; %czestotliwosc probkowania

    %wartosci przykladowego sygnalu w punktach n (suma dwoch sinusoid)
    x=1+sin(2*pi*1000*n/fs)+0.5*sin(2*pi*2000*n/fs+(3*pi/4));

    X=zeros(N); %stworz macierz zerową

    for m=0:(Nn-1),
    for k=0:(Nn-1),
    X(m+1)=X(m+1)+(x(k+1)*(cos(2*pi*k*m/Nn)-i*sin(2*pi*k*m/Nn)));
    end;
    end;

    w=abs(X);
    %I=n(1):n( 8 ) ;
    %J=w(1):w( 8 ) ;
    subplot(2,1,1 ) ;
    stem(n,w/20,'m.') ;
    title('metoda krokowa') ;
    subplot(2,1,2) ;
    stem(n,abs(fft(x))/20,'k.') ;
    title('za pomoca funkcji FFT Matlaba');

    Funkcja "stem" służy do rysowania na wykresie wartości dyskretnych,"Abs" to wartośc bezwzględna,"fft" to FFT,"subplot" to rysowanie na podwykresie okna złożonego z kilku wykresów. Poczytaj trochę o Matlabie,to bardzo prosty kod. Po prostu musisz go sobie przerobic. Jakbyś bardzo chciał zrozumiec FFT to jest cały post na ten temat:

    https://www.elektroda.pl/rtvforum/topic14925.html

    w tym na tej stronie m.in. mój,w którym też sporo opisałem:

    https://www.elektroda.pl/rtvforum/topic14925-150.html

    :)