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

[Rozwiązano] Bascom - średnia z 10 pomiarów z odrzuceniem błędów pomiarowych

Daniel_GSM 29 Cze 2017 20:40 1602 7
REKLAMA
  • #1 16559276
    Daniel_GSM
    Poziom 25  
    Potrzebuję w Bascomie uśrednić wynik z pomiaru odległości (czas odbicia ultradźwięku od przeszkody).

    Myślałem, że samo uśrednienie wyniku pomoże, ale niestety nie.
    Muszę dodatkowo z 10 zebranych próbek odrzucić te, które są błędne.

    Wytłumaczę dokładniej:
    Mam tablicę

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Z tych 10 próbek wyliczam sobie średnia (wiadomo - sumuję wszystkie wyniki a później dzielę przez 10 - a że w Bascom sumować można tylko 2 wartości w jednej linii to tych operacji trochę jest :))

    Niestety czasem podczas tych 10 pomiarów wkradnie się wynik z kosmosu np.:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Oczywiście z powyższych próbek chciałbym odrzucić nr 9 i nr 5 (czasem zajdzie konieczność odrzucenia 4 próbek i wyliczenie średniej z pozostałych 6)
    Wiadomo, że jest to czujnik odległości więc nie mogę na sztywno ustawić środkowej wartości.
    Dopuszczalna odchyłka na + i na - to około 50 - muszę to dobrać eksperymentalnie w późniejszym etapie
    Czyli w powyższym wypadku, gdzie środek pomiaru wypada na 300 wszystkie wartości z zakresu 250 - 350 powinny być "dopuszczone" do liczenia średniej - pozostałe powinny być odrzucone.

    ma ktoś jakiś pomysł?
  • REKLAMA
  • #2 16559343
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 16559373
    Daniel_GSM
    Poziom 25  
    No dobra - a co jeśli wynik będzie miał "środkową" wartość inną niż 300?

    O ile dobrze patrzę to Twój kod bazuje na powyższej tablicy gdzie wartości, które mnie interesują mieszczą się w zakresie 250 - 350.

    A co jeśli będą inne wartości?

    Dodano po 8 [minuty]:

    Wolałbym to zrobić inaczej.

    Mając tablice jak powyżej segreguję wartości od najmniejszej do największej.
    A następnie z posegregowanej tablicy biorę np. 5 środkowych próbek
    I z nich wyliczam średnią.

    Gdzieś widziałem taki pomysł, ale nie było przykładu kodu :(
  • #4 16559420
    rb401
    Poziom 39  
    Daniel_GSM napisał:
    Myślałem, że samo uśrednienie wyniku pomoże, ale niestety nie.


    Przy takiej własności danych użyj mediany liczonej z definicji.

    Czyli przesortuj tablicę rosnąco algorytmem np. bubble sort (prosty, dużo przykładów w Basic) i za wynik weź (ponieważ liczysz medianę z parzystej liczby próbek) średnią z piątej i szóstej próbki. W tej metodzie próbki "z kosmosu" wypadają z obliczeń, niezależnie jaka wartość jest tą oczekiwaną.
    Jeśli tych zakłócających, ekstremalnych danych jest stosunkowo mało, możesz odejść trochę od klasycznej mediany, sortując i uśredniając więcej próbek "ze środka" posortowanej tablicy (np. 4).
  • REKLAMA
  • #6 16559829
    Daniel_GSM
    Poziom 25  
    niveasoft napisał:
    Kolego chcesz coś pisać w Bascom to powinieneś polubić stronę https://wiki.mcselec.com/bavr/BASCOM-AVR_Help

    Takie sortowanie to jedna komenda Sort Probka(1),10 i są poukładane od najmniejszej do największej.

    https://wiki.mcselec.com/bavr/SORT


    Faktycznie Sort działa idealnie.

    Co do Twojej sugestii - owszem można i znaleźć wszystko w goglach.
    Trzeba tylko wiedzieć czego szukać.
    I po to właśnie mamy elektrodę - inni już to znaleźli i wskażą czego i gdzie szukać.
  • REKLAMA
  • #7 16559950
    Konto nie istnieje
    Konto nie istnieje  
  • #8 17228600
    Daniel_GSM
    Poziom 25  
    Sortowanie w Bascom funkcjonuje bezbłędnie. Pobieram 50 próbek i uśredniam wynik z 10 "środkowych" - działa perfekcyjnie
REKLAMA