Sprawdzanie czy wartości mają przebieg sinusoidalny

0

Cześć,
Jestem tu nowy, zarejestrowałem się głównie by zadać pytanie. Nie zajmuję się programowaniem ale znajomi, którzy coś wiedzą na temat programowania nie potrafili mi odpowiedzieć. Dlatego przyszedłem z prośbą o pomoc do Was.
Czy jest jakiś moduł, ustalona sekwencja lub funkcja w językach programowania, do weryfikowania czy napływające dane mają przebieg sinusoidalny? Dane będą z miernika odległości, będą więc obarczone pewnym błędem, więc ich ocena musi to "brać pod uwagę", przebieg nie będzie idealny. Okres będzie stały, amplituda może być różna.
Program miałby być napisany do sterownika przemysłowego (FBD, SCL, LAD) ale myślę, że jeżeli znajdzie się coś w innym języku, to nie będzie problemem to później przetłumaczyć.

2

Takiej magicznej funkcji is_sinusoidal to raczej nie, ale jednocześnie napisanie czegoś takiego nie musi być jakoś bardzo skomplikowane. To raptem kilka linijek kodu:

  1. Weźmy max i min żeby określić amplitudę
  2. Znajdźmy sobie miejsca zerowe żeby okreslić okres (albo weźmy ten stały o którym mówisz).
  3. Policzmy sobie różnice między sinusoidą o takich parametrach a wartościami które masz, a następnie zdecydujmy czy "pasuje" czy nie.

Wbrew pozorom najtrudniejsze w tym wszystkim jest to co na końcu -> jak określić czy jest ok czy nie? Wziąć średnią różnic? Odchylenie standardowe? Medianę? Max? To już zależy od tego co chcesz traktować jako pasujący wykres a co nie.

2

Masz do wyboru:
jeśli to sygnał harmoniczny (sinus o stałej częstotliwości, amplitudzie i fazie) - aproksymacja funkcją sinus i błędem średniokwadratowym oceniasz jak bardzo przypomina to sinus
jeśli to sygnał harmoniczny modulowany (sinus o stałej częstotliwości, ale zmiennej amplitudzie) - wyznaczasz widma częstotliwościowe np. przez FFT i tam wyznaczasz częstotliwość nośnej i częstotliwość modulowaną (jeśli potrzebna)

0

Ok, czyli porównywanie rzeczywistych wartości do oczekiwanych. Ma to sens i jest jak najbardziej wykonalne, powinno się sprawdzić. Zwięźle i na temat. Dzięki

0

Jedna uwaga, bo nie do końca zrozumiałem, czy chcesz oceniać jak mierzony sygnał jest podobny do sinusa, czy chcesz wyznaczać jakieś parametry z tego sinusa (częstotliwość, amplituda itd.). Zrozumiałem, że to jest sinus, ale czasem zakłócony (więc parametry wyznaczone sinusa będą odbiegać od rzeczywistych i wtedy z błędu średniokwadratowego można wyznaczyć błąd wyznaczanych parametrów). Jeśli jednak nie ma pewności, że to sinus, albo gorzej sygnał będzie zmieniał swoją funkcję np. w zależności od jakiegoś parametru to może być gorzej bo trzeba najpierw zrobić klasyfikację jaki to sygnał a potem dobrać odpowiednią funkcję do aproksymacji.

0

troche offtop ale ciekawe jakby sobie z tym siec Kohonena poradzila ?

0

Poza konkursem pytanie, te odczyty z miernika odległości to będą podawane w stałych odstępach czasu?

2

Szybka transformata furiera powinna pozwolić na obiektywne wykrycie przebiegu sinusoidalnego, bez znajomości częstotliwości fazy i amplitudy.

0
cs napisał(a):

Jedna uwaga, bo nie do końca zrozumiałem, czy chcesz oceniać jak mierzony sygnał jest podobny do sinusa, czy chcesz wyznaczać jakieś parametry z tego sinusa (częstotliwość, amplituda itd.). Zrozumiałem, że to jest sinus, ale czasem zakłócony (więc parametry wyznaczone sinusa będą odbiegać od rzeczywistych i wtedy z błędu średniokwadratowego można wyznaczyć błąd wyznaczanych parametrów). Jeśli jednak nie ma pewności, że to sinus, albo gorzej sygnał będzie zmieniał swoją funkcję np. w zależności od jakiegoś parametru to może być gorzej bo trzeba najpierw zrobić klasyfikację jaki to sygnał a potem dobrać odpowiednią funkcję do aproksymacji.

Oceniać jak mierzony sygnał jest podobny do sinusa. Pomiar będzie realizowany w równych odstępach, sterownik z tego co wiem przekazuje 10 odczytów na sekundę.
Mierzona ma być obracająca się ze stałą prędkością rolka, funkcja ma oceniać czy rolka ma bicie. Czujniki odległości reagują na zmiany faktury i koloru, więc potrzebuje testu, który stwierdzi czy odchylenie to zabrudzenie czy bicie.

0
MarekR22 napisał(a):

Szybka transformata furiera powinna pozwolić na obiektywne wykrycie przebiegu sinusoidalnego, bez znajomości częstotliwości fazy i amplitudy.

No dobra ale jak taką transformatę zaprogramować przy użyciu C?

0
Damian Bankosz napisał(a):
MarekR22 napisał(a):

Szybka transformata furiera powinna pozwolić na obiektywne wykrycie przebiegu sinusoidalnego, bez znajomości częstotliwości fazy i amplitudy.

No dobra ale jak taką transformatę zaprogramować przy użyciu C?

Temat jest dość szeroki (analiza sygnałów).
Nie zdziwiłbym się jeśli ten twój sprzęt miał wbudowany jakiś analizator sygnałów, który potrafi to zrobić.
Dlatego zacznij od dłubania w dokumentacji tego "sterownika przemysłowego", żeby nie wyważać otwartych drzwi.
Jak tam nic nie znajdziesz to po prostu googlaj fft (fast fourier transformation). Zrozum co to robi i jak możesz tego użyć, by wyciągnąć z tego przydane wartości.
W internecie jest od groma informacji na ten temat.

0

Jeśli częstotliwość badanego sygnału jest stała, znacznie mniej złożona oblicznieowo będzie korelacja z sinusem o tej samej częstotliwości. FFT to w takim przypadku to strzelanie z armaty do muchy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1