//Anmerkung: PLETYLANGE ist 200, Pletyrot[] hat 200 Elemente. uint16_t Systolenfenster[9]; uint16_t lok_Max_1=0; uint16_t lok_Min_1=0; uint16_t lok_Max_2=0; uint16_t lok_Min_2=0; uint16_t Ort_lok_Max_1 =0; uint16_t Ort_lok_Min_1 =0; uint16_t Ort_lok_Max_2 =0; uint16_t Ort_lok_Min_2 =0; uint16_t Delta_Max_Min_1_lok=0; uint16_t Delta_Max_Min_2_lok=0; uint16_t Delta_Max_Min_1_glob=0; uint16_t Delta_Max_Min_2_glob=0; uint16_t Ort_glob_Max_1 =0; uint16_t Ort_glob_Max_2 =0; uint16_t Ort_glob_Min_1 =0; uint16_t Ort_glob_Min_2 =0; //erstes globales Max-Min-Paar aus Fenster finden for(uint16_t k=PLETYLANGE/4; k<(PLETYLANGE/4) + 25; k++) { for(uint16_t j=0; j<9; j++) //Systolenfenster füllen { Systolenfenster[j]=Pletyrot[(k+j)]; } lok_Max_1=Systolenfenster[0]; lok_Min_1=Systolenfenster[0]; for(uint16_t s=0; s<9; s++) //Systolenfenster nach Maximum und Minimum scannen { uint16_t scan=Systolenfenster[s]; if(scan>=lok_Max_1) { lok_Max_1 = scan; //Wert und Ort ermitteln Ort_lok_Max_1 = k+s; } if(scan<=lok_Min_1) { lok_Min_1 = scan; Ort_lok_Min_1 = k+s; } } Delta_Max_Min_1_lok = lok_Max_1 -lok_Min_1; if(Delta_Max_Min_1_lok >= Delta_Max_Min_1_glob) { Delta_Max_Min_1_glob = Delta_Max_Min_1_lok; Ort_glob_Min_1 = Ort_lok_Min_1; Ort_glob_Max_1 = Ort_lok_Max_1; } //jetzt Fenster in äußerer for-Schleife um 1 verschieben, } //Suche nach zweite globales Max-Min-Pärchen beginnt dort wo das erste Maximum liegt. for(uint16_t k=(PLETYLANGE/4 + Ort_glob_Max_1); k<((PLETYLANGE/4) + 25 + Ort_glob_Max_1); k++) { for(uint16_t j=0; j<9; j++) //Systolenfenster füllen { Systolenfenster[j]=Pletyinfra[(k+j)]; } lok_Max_2=Systolenfenster[0]; lok_Min_2=Systolenfenster[0]; for(uint16_t s=0; s<9; s++) //Systolenfenster nach Maximum und Minimum scannen { uint16_t scan=Systolenfenster[s]; if(scan>lok_Max_2) { lok_Max_2 = scan; //Wert und Ort ermitteln Ort_lok_Max_2 = k+s; } if(scan= Delta_Max_Min_2_glob) { Delta_Max_Min_2_glob = Delta_Max_Min_2_lok; Ort_glob_Min_2 = Ort_lok_Min_2; Ort_glob_Max_2 = Ort_lok_Max_2; } } uint16_t Delta_T_Minima = (Ort_glob_Min_2 - Ort_glob_Min_1); uint16_t Delta_T_Maxima = (Ort_glob_Max_2 - Ort_glob_Max_1); uint16_t Delta_T = (Delta_T_Minima + Delta_T_Maxima)/2; Puls_IR = (600000/ (Delta_T * 227)); //1 Minute hat 600.000 * 100us ; Delta_T sind Menge der Abtastpunkte, 227 sind zeitlicher Abstand in 0,1ms //Problemanmerkung: erhaltene Pulsfrequenz wird zu ~35 errechnet, was auf ein Delta_T von ungefähr >65 schließen lässt, was eigentlic hnicht sein sollte...