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