Nie znam się na FFT, ale polecono mi że służy do tego transformata
Czy jest jakiś sposób żeby analizując tablicę danych z przetwornika ADC (320 punktów) można wyliczyć samą częstotliwość sygnału
sinus, prostokąt, trójkąt ? ewentualny jakiś przykład w C ? dane są 0-4095
sygnały są o częstotliwości 5Hz-5kHz
FFT da widmo. Teoretycznie dominujący prążek jak tym którego szukasz. Czasami, prościej zastosować transformatę z definicji niż robić FFT.
Myślę, że kodów na FFT w C jest w necie setki tysięcy.
Kilka punktów do rozważenia:
1) Jeśli nie ma się szybkiego komputera, lub czegoś ze sprzętowym liczeniem zmiennoprzecinkowym, stosuje się stałoprzecinkowe obliczenia - oddzielny wykład.
2) Dane wejściowe to wektor o liczbie elementów wg potęgi 2, czyli 128, 256, 512 1024 itd próbek
3) Jeśli na wejściu mamy 256 próbek, to dostaniemy 256 prążków widma z czego druga połowa to odbicie lustrzane pierwsze pierwszej połówki, czyli użytecznie mamy 128 prążków.
4) zarówno obliczenia jak i wyniki są zespolone, widmo amplitudowe dodatkowo trzeba wyliczyć jako moduł liczby zespolonej (pitagoras). Operacja pierwiastkowania, dla małych procków też nieco cięższa.
5) Prążki widma rozłożone są równomiernie na osi częstotliwości, co w przypadku analizy pasma akustycznego (i pewnie innych też) jest wadą, potrzebne jest widmo na osi logarytmicznej
6) Prążki widma oddalone są od siebie o 1/Tokna, Tokna to liczba próbek*Tsampl (mogę się mylić, czy to nie jest *0.5). Czyli, im więcej próbek (rząd transformaty) tym gęstsze widmo ale jego obliczenia są dłuższe, no i wyniki dostajemy rzadziej. W paśmie akustyczny, jak się weźmie 16384 próbek to nowe widmo melduje się co 0.5 sekundy (gdzieś tak może być)
7) Często, okno się bierze "na zakładkę", np. 0.5, czyli Liczymy częściej ale okno próbek przesuwamy co 0.5 Tokna a nie o Tokna
8) Zgodnie z prawami teorii Fouriera, widmo będzie splotem widma próbek i widma okna prostokątnego. Dlatego okno próbek mnoży się przez funkcję okna, którego widmo jest bardziej zbliżone do pojedynczego prążka: https://pl.wikipedia.org/wiki/Okno_czasowe
Mogłem coś źle napisać, 20 lat minęło od mojego ostatniego FFT także sorry. Liczę na poprawki przez bardziej świeżych w temacie.
Zbyt skomplikowane może znajdę jakiś prostszy sposób na znalezienie tej częstotliwości, wstępnie zrobiłem to mierząc odległość pomiędzy dwoma maksymalnymi punktami w tablicy obok siebie, ale nie działa to do sygnału prostokątnego, gdzie maksymalne punkty trwają długo...
więc metoda jest słaba
Warto pomyśleć/spróbować, co się dzieje przy FFT (czy innej metodzie), jeśli wartość chwilowa sygnału na początku i na końcu okna znacznie się różni.
Można by zrobić widmo wartości sygnału, jakoś wyznaczyć jego środek (tu uwaga na przebiegi, które mają np. półtora okresu), i potem w przebiegu poszukać punktów przejścia przez ten środek. Jeśli okaże się, że są grupy blisko siebie położonych punktów przejścia, to takie grupy traktować jak pojedyncze punkty - może zacząć od wyznaczenia największej odległości sąsiednich punktów przejścia?
Witam
Do takich obliczeń można wykorzystać programy matematyczne: Matlab lub darmowy Scilab. W helpach wszystko znajdziesz co i jak? Są gotowe funkcje.