Forum: PC-Programmierung ESP Sensor Signal Filtern


von Mann T. (mann_t)


Lesenswert?

Hallo,

ich möchte den Filter (die Filter) aus diesem Tutorial in meinen ESP 
Sketch integrieren: 
https://morf.lv/implementing-pulse-oximeter-using-max30100/

Zunächst geht es um den: butterworthFilter_t

Hier der Code aus dem Tutorial:


struct butterworthFilter_t
{
  float v[2];
  float result;
};
void MAX30100::lowPassButterworthFilter( float x, butterworthFilter_t * 
filterResult )
{
  filterResult->v[0] = filterResult->v[1];

  //Fs = 100Hz and Fc = 10Hz
  filterResult->v[1] = (2.452372752527856026e-1 * x) + 
(0.50952544949442879485 * filterResult->v[0]);

  //Fs = 100Hz and Fc = 4Hz
  //filterResult->v[1] = (1.367287359973195227e-1 * x) + 
(0.72654252800536101020 * filterResult->v[0]); //Very precise 
butterworth filter

  filterResult->result = filterResult->v[0] + filterResult->v[1];
}

Die ganze Libary plus Beispiel gibt es auf Github:

https://github.com/xcoder123/MAX30100

Jetzt zu meiner Frage:

Ich habe hier eine structur butterworthFilter_t, darin habe ich nun 
result als Variable und als Array v[2] vom Typ float (da der Index bei 0 
anfängt sind es also v[0] und v[1]).

Weiters ist "void MAX30100::lowPassButterworthFilter( float x, 
butterworthFilter_t * filterResult )" dies meine Funktion in der ich die 
Variable float x lade, sowie meine structur butterworthFilter_t bei der 
nun der Zeiger * filterResult zugeordnet wird und in meiner Libary 
(.cpp/ oder .h?) müsste noch der Zeiger filterResult definiert sein, 
oder? Oder ist filterResult eine structur? (Das meinte jemand, aber mit 
-> zeige ich ja auf v[0], [1] oder result, ein Zeiger kann ja keine 
structur sein, oder? Ich finde weder eine structur noch einen 
definierten Zeiger, der müsste ja in etwa so aussehen? > filterResult = 
(int) malloc(sizeof(int));) und nun könnte ich die Daten über 
filterResult (irgend eine Adresse); &filterResult  (Adresse des Zeigers) 
oder *filterResult der Wert auf dem dieser zeigt, abrufen, richtig?)

Würde mich sehr freuen, wenn mir da wer weiterhelfen kann (hab erst 
heute angefangen mich mit Zeiger und Strukturen zu befassen, so ganz 
habe ich es noch nicht durchblickt).

LG

PS: Hier ist noch restlicher Code den ich rausgesucht habe:

".h

class MAX30100
{
  public:
    MAX30100( Mode mode = DEFAULT_OPERATING_MODE,
              SamplingRate samplingRate = DEFAULT_SAMPLING_RATE,
              LEDPulseWidth pulseWidth = DEFAULT_LED_PULSE_WIDTH,
              LEDCurrent IrLedCurrent = DEFAULT_IR_LED_CURRENT,
              bool highResMode = true,
              bool debug = false
             );


void lowPassButterworthFilter( float x, butterworthFilter_t * 
filterResult );

  private:

    butterworthFilter_t lpbFilterIR;


};



struct butterworthFilter_t
{
  float v[2];
  float result;
};


-------------------

.cpp



  lowPassButterworthFilter( meanDiffResIR/*-dcFilterIR.result*/, 
&lpbFilterIR );


  float meanDiffResIR = meanDiff( dcFilterIR.result, &meanDiffIR);





 lpbFilterIR.v[0] = 0;
lpbFilterIR.v[1] = 0;
  lpbFilterIR.result = 0;"

: Bearbeitet durch User
von Xanthippos (xanthippos)


Lesenswert?

Wahrscheinlich kommst du schneller ans Ziel, wenn du zuerst ein C 
Tutorial durcharbeitest, das Zeiger, Adressen, Referenzen, Arrays und 
Strukturen erklärt.

Da muss man halt ein paar Übungen durcharbeiten, bis man sich an die 
Syntax und die feinen Unterschiede gewöhnt hat.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.