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

Jaki algorytm do wykrywania częstotliwości tętna z czujnika optycznego?

robiw 31 Lip 2019 08:24 1059 16
  • #1 18089324
    robiw
    Poziom 26  
    Witam Kolegów,
    Mam prosty system mikroprocesorowy, który zbiera sygnał z optycznego czujnika tętna. Jako, że sygnał potrafi być zakłócony zastanawiam się nad najlepszym algorytmem do wyszukania częstotliwości badanego sygnału (tutaj tętna). Wszelkiej maści znajdowanie przejścia przez zero czy maksimów mogą tutaj nie sprawdzić się a DFT jest za bardzo skomplikowana dla tego układu. Może autokorelacja? robiw
  • #2 18089463
    Konto nie istnieje
    Poziom 1  
  • #3 18089557
    chudybyk
    Poziom 31  
    Ja bym próbował całkować sygnał na próbkach o 2-krotnej spodziewanej długości impulsu tętna - na oko rzędu dziesiątek milisekund. Maksima lub zbocza tego impulsu wyznaczają odstępy czasowe pomiędzy uderzeniami tętna. Do wyniku wziąć należy uśrednioną i odfiltrowaną częstotliwość z kilku uderzeń.
    A właśnie: z jaką częstotliwością zamierzasz dokonywać akwizycji danych?
    Oscyloskop jest dobrym pomysłem, bo pozwoli oszacować siłę i kształt sygnału.
  • #4 18089560
    robiw
    Poziom 26  
    chudybyk napisał:
    A właśnie: z jaką częstotliwością zamierzasz dokonywać akwizycji danych?

    100Hz...robiw
  • #5 18089786
    chudybyk
    Poziom 31  
    robiw napisał:
    100Hz

    Im więcej próbek tym lepiej, ale może się uda i na 100Hz.
    Jakich zakłóceń się spodziewasz? Niektóre można odfiltrować na poziomie sprzętu.
    Bardziej od zakłóceń spodziewałbym się problemów ze wzmocnieniem sygnału i jego kondycjonowaniem. Poziom sygnału czujnika może zależeć od wielu czynników, więc dobrze byłoby automatycznie regulować wzmocnienie, żeby otrzymywać odpowiedni poziom sygnału. Za słaby sygnał nie pozwoli niczego wykryć a za mocny będzie zbyt nasycony. Czy możesz rzucić schematem obwodu wejściowego?
  • #7 18091055
    chudybyk
    Poziom 31  
    To dwa dokładnie te same schematy. Sygnał z diody odbiorczej jest filtrowany przez dwa filtry dolnoprzepustowe i do procesora.
    robiw napisał:
    niemniej jednak próbowałem już wielu.
    A z czym dokładnie jest problem? Czy sprawdzałeś sygnał oscyloskopem na wejściach i wyjściach poszczególnych stopni filtrów? Sygnał może być obcięty do górnej połowy, bo stopnie wzmacniają tylko górną połowę sygnału. Jeśli nie masz oscyloskopu, to czy możesz wrzucić przykładowe dane zebrane przez procesor?
  • #8 18091058
    robiw
    Poziom 26  
    Wiem, że są dokładnie takie same. Moim zdaniem to dwa "komplety" filtrów pasywnych górnoprzepustowych (RC na wejściu) z aktywnym dolnoprzepustowym (OPAMP). Problem w tym, że nie mogę "złapać" jakiegokolwiek sensownego sygnału poza śmieciami...robiw
  • #9 18091095
    chudybyk
    Poziom 31  
    robiw napisał:
    Problem w tym, że nie mogę "złapać" jakiegokolwiek sensownego sygnału poza śmieciami

    Więc musisz przeanalizować tor pomiarowy oraz program. Może gdzieś jest problem z lutem, może źle zainicjowany przetwornik ADC... opcji jest mnóstwo, przyczyna nieraz banalna.
  • #10 18091100
    robiw
    Poziom 26  
    To się zgadza, ale testowałem już kilka układów i zero postępów. Sprawdzałem na oscyloskopie. Został mi jeszcze do sprawdzenia czujnik SFH7070. Ostatnio zakupiłem też gotowy czujnik z www.pulsesensor.com... i nic, zero użytecznego sygnału. Zaczynam dochodzić do wniosku, że palec mi nie działa ;-)...robiw
  • #11 18091102
    chudybyk
    Poziom 31  
    A z czego zasilasz układ? Może zasilacz sieje zakłóceniami niemiłosiernie?
  • #12 18091104
    robiw
    Poziom 26  
    Zasilacza DC. Mam zakłócenia 100Hz i poza tym żadnego użytecznego sygnału. Dzisiaj się jeszcze tym pobawię...robiw
  • #13 18091245
    chudybyk
    Poziom 31  
    robiw napisał:
    Zasilacza DC. Mam zakłócenia 100Hz i poza tym żadnego użytecznego sygnału.

    Stabilizowany? Jakie napięcie? Zasilasz wprost czy przez dodatkowy stabilizator? Czy zasilanie strony analogowej jest wydzielone i odfiltrowane? Czy sprawdzałeś zasilanie oscyloskopem? Jaki procesor i jak jest zasilany ()? Czy zasilasz z tego inne podzespoły, szczególnie cyfrowe?
    Nie daj się ciągnąć za język, trudno zgadywać co Ci nie działa, gdy nie wiemy jak to masz poskładane.
  • #14 18091247
    robiw
    Poziom 26  
    Hehe, to jest tymczasem prototypówka. Dzisiaj podłączę do aku li-on i sprawdzę różnicę. Żadnego procesora, sam układ analogowy i oscyloskop...robiw

    Dodano po 6 [godziny] 46 [minuty]:

    Tymczasem bawię się czujnikiem z tej strony www.pulsesensor.com. Chyba jednak nie do końca jest sprawny, mimo że nowy. Na wyjściu same śmieci i grzeje się nieco. Wykonam swój i zobaczymy, co z tego wyjdzie... robiw
  • #15 18095805
    rb401
    Poziom 39  
    robiw napisał:
    Tymczasem bawię się czujnikiem z tej strony www.pulsesensor.com. Chyba jednak nie do końca jest sprawny, mimo że nowy.


    robiw napisał:
    Zaczynam dochodzić do wniosku, że palec mi nie działa ;-)


    Mnie też palec jakoś kiepsko działa.
    Przeglądając Twój wątek, przypomniało mi się że kiedyś ten pulsesensor.com kupiłem od Chińczyka tak właściwie tylko z ciekawości. No i teraz pojawiła się okazja by go przetestować. I powiem tak, czujnik ok, ale mój palec wyraźnie nie jest z nim kompatybilny. Jedynie co udało mi się zobaczyć na oscyloskopie to fala tętna gdzieś 50mVpp ale w pewnych ściśle określonych położeniach. Tak że jak dla mnie, to strasznie mizerny rezultat, właściwie nie warty jakiś dalszych badań.

    Wziąłem też do porównania, taki właściwie muzealny czujnik z jakiegoś kardiotachometru, gdzie w obudowie jest żarówka i fotoopornik. Fotoopornik połączyłem tylko opornikiem z plusem 5V, żarówkę do baterii. Czyli żadnych filtrów ani wzmocnienia. Ale co ciekawe zobaczyłem falę tętna nieco tylko mniejszą (rzędu 40mVpp) niż dla pulsesensor.com ale ułożenie czujnika nie było już tak krytyczne, jak w tym drugim. Czyli ten staroć, gdyby tylko wzmocnić i dodać filtrację, mógł by być chyba lepszy niż ten pulsesensor.com.
    Podejrzewam że ma tu też znaczenie odległość nadajnika światła od odbiornika, bo w tym pulsesensor.com to ledwo 2mm a w tym starym czujniku 4mm. I może droga światła w moim palcu przechodzi przez mniej naczyń przy tym wąskim odstępie.

    Jaki algorytm do wykrywania częstotliwości tętna z czujnika optycznego?



    Ale zauważyłem że pisałeś coś że próbowałeś na jakiś Maximach.
    Akurat miałem moduł z MAX30100 i zapuściłem program testowy do tych kostek z użyciem biblioteki OXullo (taka nazwa się pojawia w opisach).
    No i rewelacja. Wykrywał tętno i liczył z mojego palca właściwie bez problemów.
    Ponieważ ta biblioteka obrabia żywe dane z czujnika wewnętrznie a udostępnia tylko wyniki liczbowe tętna i saturacji, zmodyfikowałem ją tak by wyciągnąć cyfrowy surowy sygnał która ta biblioteka sczytuje z FIFO czyli prosto z ADC.

    Sygnał wygląda tak (kanały czerwony i podczerwony), a wspomnę że to sygnał przed właściwymi filtrami które są zaimplementowane w bibliotece:
    Jaki algorytm do wykrywania częstotliwości tętna z czujnika optycznego?
    Przebiegi te mają dość duże pływanie zera ale to nie istotne ze względu na dalszą filtrację. Dla mnie rewelacją jest ich jakość i amplituda. Dlatego z takich przebiegów biblioteka daje rade policzyć tętno dość niezawodnie.

    Co więcej, obróbka tych danych, algorytmy filtrów, wyznaczania tętna itp. zastosowane w bibliotece z którą mam do czynienia są bardzo szeroko i jasno, łącznie z teorią opisane tutaj:
    https://morf.lv/implementing-pulse-oximeter-using-max30100

    Dlatego jeśli nawet chciałbyś samodzielnie coś podłubać w obróbce danych z czujnika światła, to i tak jako hardware polecałbym któregoś z serii MAX3010x. Tym bardziej że u Chińczyków są moduły z nimi bardzo tanie.
  • #16 18096053
    robiw
    Poziom 26  
    Hej,
    Dzięki za obszerną wiadomość. Ja próbowałem z MAX30102 i też nie uzyskałem satysfakcjonujących rezultatów. A jakiego algorytmu używałeś do obliczenia tętna z tych danych? Swoją drogą, jak się dobrze poszuka to wychodzi na to, że tętno znacznie łatwiej znaleźć (dobry sygnał) korzystając z zielonej diody LED (nawet na nadgarstku)...dlatego tymczasem wykonałem układ z Osramowskim SFH7070. Zobaczymy jak będzie tym razem...robiw
  • #17 18097668
    rb401
    Poziom 39  
    robiw napisał:
    A jakiego algorytmu używałeś do obliczenia tętna z tych danych?


    Test robiłem z użyciem tej biblioteki i przykładu do niej:
    https://os.mbed.com/users/AVELARDEV/code/MAX30100/
    Widzę że detekcja tętna jest bardzo podobna ale bardziej rozbudowana niż opisana w tym blogu o którym pisałem nieco wyżej.
    Jest to ogólnie detekcją przejścia przez arbitralnie ustawiony próg, ale w tej wersji z mbed (przeportowanej z Arduino), wartość progu się dynamicznie zmienia.
    Ale w zasadzie, jak przytoczyłem moje doświadczenie z MAX30100, to nie chodziło mi o obróbkę danych, bo to osobny temat, w który osobiście akurat teraz nie mam czasu ani potrzeby wnikać głębiej, ale o jakość żywych danych uzyskanych prosto z tej kostki (np. w porównaniu z kiepskimi rezultatami moich prób z pulsesensor.com).



    Tak na marginesie. Znalazłem takie dość ciekawe źródła gdzie jest wspomniane o wyznaczaniu częstotliwości tętna używając FFT (co wydaje mi się dobrym kierunkiem):
    https://pdfs.semanticscholar.org/27b7/373a29d1dec37a303c12f30d33ca3d1367fb.pdf
    https://www.cs.tau.ac.il/~nin/Courses/Workshop12a/PPG%20Sensor%20System.pdf
REKLAMA