Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Procedura określająca trend temperatury oraz stromość zbocza

16 Lip 2008 17:46 2122 11
  • Poziom 21  
    Witam!

    Witam!

    Pisze pewien program do sterownika i stoję przy takim zagadneniu. Potrzebuje jakąś sprytną procedurę która z danych temperatura i czas potrafi mi wskazać trend temperatury (rosnący malejący) i ew. stromość opadania/przyrostu temperatury/60s. Temperaturę mierzę co sekunde, czas również mam w h:m:s. Niby banalna sprawa, a jednak.. Temperatura czytana cyfrowo wiadomo lubi się wahać.. Jeżeli np przez minute będzie się wahać +-0.3'C to zwrócona wartość musi być 0, jeżeli będzie maleć to musi być wartością ujemną zależną od prędkości opadania.
    Super byłoby gdyby dało się taką funkcję napisać bez przechowywania np. 60 próbek temp (być może się da - coś w rodzaju filtru?).

    Nie wiem czy dobre forum, ale chyba tu siedzą osoby mogące pomóc w tej sprawie. Potrzebny algorytm albo jakiś przykład (C)

    Pozdrawiam
    Piotr
  • Poziom 32  
    Jaki mikrokontroler?

    W ciagu 1 sekundy zapisz temp do jednej zmienej, w ciagu drugiej sekundy zapisz temp do drugiej zmiennej. Nastepnie porownaj pierwsza zmienna z druga. Jeśli druga jest wieksza od pierwszej to temp. rosnie. Analogicznie do spadku temp.
  • Specjalista - Mikrokontrolery
    jesli temperatura wahac bedzie sie o 0.1 co 1s, to bedziesz mial:

    0.1 0 0.1 0 0.1 0 0.1 ...

    wystarczy w programie ustawic, ze wartosci ponizej pewnego progu sa ignorowane i pokazywane jako zero.

    4\/3!!
  • Poziom 21  
    Też bez sensu! Kiedy może się zdarzyć, że właśnie 0,1'C jest ważne.

    Wymyśliłem algorytm.. Przez np 60 pomiarów zapisuje sobie współczynniki wzrostu i spadku temp (wyjdzie ich przy 60 pomiarach 59) daje sobie ich średnią i mam współczynnik trendu.. albo w plusie albo w minusie.

    Ogólnie jest spoko tylko te zapisywanie 59 pomiarów - dla 4 czujników to już 236bajtów pamięci.. (zawsze można obniżyć dokładność np poprzez wrzucanie do tablicy co 2giej różnicy ale to nie o to chodzi..)

    Przykład
    10,0 > 9,8 > 9,6 > 9,7, 9,9 > 10,2
    -0,2, -0,2, +0,1, +0,2, +0,3 = średnia +0,04
  • Poziom 32  
    Różnicę o 0,1°C ignoruj jak napisał Freddie bo to może być nawet dokładność czujnika. Dlaczego nie może być proste? Ważne żeby działało jak należy.
  • Poziom 22  
    Czy masz zamiar stosować ds18b20? One wskazują z dokładnością do 0,5 C więc dokładność rzędu 0,1 będzie raczej trudna do osiągnięcia. W jakich granicach temperaturowych mają być wykonywane pomiary?
  • Poziom 21  
    dawid512 jeżeli temp będzie się wahać o te powiedzmy 0.1'C to nie będę musiał nic ignorować bo samo się to wyrówna ze średniej. Owszem chce wykonać układ na DS'ach i wiem, że dokładność mają one rzędu 0,5'C jednak od lat jak ich używam widzę, że mierzą one stosunkowo podobnie - mają jednak czasem inne progi (różniące się o te +-0,5'C). Tak więc jeżeli będę miał dt (zmianę temp) mogę brać to jako zmianę rzeczywistą bez względu na to czy czujnik zawyża o 0,5'C czy zaniża.. Wątpię aby mógł się też rozkalibrować w ciągu minuty na tyle aby zmienić trend.

    pixel7 - temp mierze w granicach 30-80'C ale są to przebiegi bardzo wolno zmienne. Sama procedura opisana przeze mnie wyżej aproksymuje też pomiary. Tak więc dokładność wyznaczania średniej z 59 dt będzie wystarczająca..
  • Poziom 24  
    Rozumiem, że mierzona temperatura cechuje się długookresowymi, powolnymi zmianami. Tobie zależy na wyznaczeniu trendu w okresach jednominutowych przy neutralizacji chwilowych wahań spowodowanych kwantyzacją itd.
    Jeśli tak, to rozwiązaniem może być zastosowanie "średniej ważonej" (weighted moving average) lub "średniej wykładniczej".
    Zobacz np. http://www.newtrader.pl/technical_3,2.php.

    Pozdrawiam
  • Specjalista - Mikrokontrolery
    byrrt napisał:
    Też bez sensu! Kiedy może się zdarzyć, że właśnie 0,1'C jest ważne.

    Wymyśliłem algorytm.. Przez np 60 pomiarów zapisuje sobie współczynniki wzrostu i spadku temp (wyjdzie ich przy 60 pomiarach 59) daje sobie ich średnią i mam współczynnik trendu.. albo w plusie albo w minusie.

    Ogólnie jest spoko tylko te zapisywanie 59 pomiarów - dla 4 czujników to już 236bajtów pamięci.. (zawsze można obniżyć dokładność np poprzez wrzucanie do tablicy co 2giej różnicy ale to nie o to chodzi..)

    Przykład
    10,0 > 9,8 > 9,6 > 9,7, 9,9 > 10,2
    -0,2, -0,2, +0,1, +0,2, +0,3 = średnia +0,04

    gratulacje, wlasnie wymysliles to, co sam odrzuciles na poczatku...

    4\/3!!
  • Poziom 19  
    Cytat:
    Przykład
    10,0 > 9,8 > 9,6 > 9,7, 9,9 > 10,2
    -0,2, -0,2, +0,1, +0,2, +0,3 = średnia +0,04


    Nieźle to wymyśliłeś ale ten sposób jest obarczony poważną wadą: zakłada równoprawność wszystkich wyników a tak nie jest. Wydaje się, że wyniki pomiaru temperatury nie są obarczone błędem systematycznym a co za tym idzie wyniki mają rozkład normalny. Mówiąc po ludzku jezeli np. temperatura wynosi 10,0 st. to mierząc tę temperaturę wiele razy otrzymasz 10.0, 10.1, 9.9, 9.8 itd przy czym przy bardzo wielu pomiarach 10.0 będzie występować najczęściej 9.9 lub 10.1 rzadziej 9.8 lub 10.2 jeszcze rzadziej itd. W związku z tym współczynnik, który otrzymujesz (tutaj 0.04) niesie informację jakościową - jeżeli otrzymasz 0.04 a później 0.08 będzie to oznaczać, że temperatura rośnie szybciej ale nie wiesz o ile szybciej. Rozwiązaniem jest: Metoda najmniejszych kwadratów. Faktycznie trend jest powszechnie rozumiany jako krzywa między punktami (wynikami), dla których średni błąd kwadratowy jest najmniejszy.
    Jeżeli trend ma charakter wolnozmienny to wystarczy regresja liniowa. Zwróć uwagę, że w tej metodzie nie potrzebujesz magazynować 60 próbek - wszystko co potrzebne do wyznaczenia trendu możesz liczyć na bieżąco: suma wyników temeratury, suma kwadratów wyników, suma temp*czas. Otrzymasz wyniki w postaci T=a*t+b (T-temp, t-czas) gdzie współczynnik 'a' bezpośrednio wyznacza szybkość wzrostu (lub spadku) temperatury. Opis metody najmniejszych kwadratów poszukaj w sieci.