ESP Sensor Signal Filtern

OP #7385932
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:

1
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;"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.