public Analyse(BlockingCollection <DtoBpRaw> dataQueue2, BlockingCollection <Dto_AnalysisBP> dataQueue3) { _dataQueue2 = dataQueue2; _dataQueue3 = dataQueue3; OneSecondOfData = new DtoMeassuredDataFs(); PulseAnalysis = new PulseAnalysis(StaticVariables); mapCalculater = new MapCalculator5Periods(); }
public void GetPulse_addSignalWithPuls90AndMAP100_returnpuls90() { int pulse; DtoMeassuredDataFs dtoMeassured1 = new DtoMeassuredDataFs(); dtoMeassured1.MeassureDoubles.AddRange(sinusValue(90, 100)); pulse = uut.GetPulse(dtoMeassured1, 100); Assert.That(pulse, Is.EqualTo(90)); }
public void GetAarm_addNotFallingMeassurement_returnFalse() { bool isAlarmOn = false; DtoMeassuredDataFs dtoMeassured1 = new DtoMeassuredDataFs(); dtoMeassured1.MeassureDoubles.AddRange(sinusValue(0, 186)); isAlarmOn = uut.GetAlarm(dtoMeassured1, 95); double fallingMeassurement = 100 - staticVariables.PersentageFall; Assert.That(isAlarmOn, Is.False); }
public void calculateMAP_addXandY_returnXplusYtimes0point5(double x, double y) { double map; double expectedMap = (x + y) * 0.5; DtoMeassuredDataFs dtoMeassured1 = new DtoMeassuredDataFs(); dtoMeassured1.MeassureDoubles.AddRange(meangenerator(x, y)); map = uut.calculateMAP(dtoMeassured1); Assert.That(map, Is.EqualTo(expectedMap)); }
public void GetSysAndDiastolic_addMeassurementWithThreePeriods_return10OverMinus10() { double systolic = 0; double diastolic = 0; double map = 0; DtoMeassuredDataFs dtoMeassured1 = new DtoMeassuredDataFs(); dtoMeassured1.MeassureDoubles.AddRange(ThreePeriods(10)); uut.GetSysAndDiastolic(dtoMeassured1, map); systolic = uut.Systolic; diastolic = uut.Diastolic; Assert.That(systolic, Is.EqualTo(10)); Assert.That(diastolic, Is.EqualTo(-10)); }
public double calculateMAP(DtoMeassuredDataFs meassuredDataFs) { MAP = 0; //Tilføjer den nyeste måling til old5meassurements if (old5meassurements.Count >= meassuredDataFs.MeassureDoubles.Count * 5) { old5meassurements.RemoveRange(0, meassuredDataFs.MeassureDoubles.Count - 1); } old5meassurements.AddRange(meassuredDataFs.MeassureDoubles); //Bestem MAB ud fra hvad jeg har i listen foreach (double bloodpreassure in old5meassurements) { MAP += bloodpreassure; } MAP = MAP / old5meassurements.Count; return(MAP); }
/* * Denne klasse skal beregne pulsen. Jeg vil gerne have data for 10 sekunder at regne på. Derfor skal jeg gemme 10 DTOMeasseredDataFS, og ud fra dette beregne pulsen * For at detektere pulsen har jeg brug for at lave digital hysterese, men på tal hvor jeg ikke kender mit normale max.. * Måske kan man bestemme MAP og ud fra dette sige, at når vi måler 10 mmHG over dette, så må der være en puls, og først når vi er kommet 10 mmHG * under MAP kan vi registrere ny puls? * */ public int GetPulse(DtoMeassuredDataFs meassuredData, double map) { MAP = map; bool canRegisterPulse = true; puls = 0; hysteresisLow = MAP - 5; hysteresisHigh = MAP + 5; index.Clear(); //Opdaterer MeassurementList if (MeassurementsList.Count >= StaticVariables.SampleFrequense * 10) { MeassurementsList.RemoveRange(0, 120); } MeassurementsList.AddRange(meassuredData.MeassureDoubles); //Finder antal puls - algoritme //Det nye er, at jeg gemmer indexet hvor der gemmes højt, og så deler trækker jeg første index fra sidste og for (int i = 0; i < MeassurementsList.Count - 1; i++) { if (MeassurementsList[i] >= hysteresisHigh && canRegisterPulse == true) { canRegisterPulse = false; index.Add(i); } else if (MeassurementsList[i] <= hysteresisLow) { canRegisterPulse = true; } } //Omregner fra de registrerede pulse, til antal pulse pr minut double tiden = (index[index.Count - 1] - index[0]) * ts; puls = Convert.ToInt32(((index.Count - 1) / tiden) * 60); return(puls); }
public void GetSysAndDiastolic(DtoMeassuredDataFs meassuredData, double map) { mAP = map; hysteresisLow = mAP - 5; hysteresisHigh = mAP + 5; Diastolic = mAP; Systolic = mAP; //Opdaterer MeassurementList. //Bruger 3 for at være sikker på, at sekvensen indeholder både en systolisk værdi og en diastolisk værdi if (MeassurementsList.Count >= StaticVariables.SampleFrequense * 3) { MeassurementsList.RemoveRange(0, meassuredData.MeassureDoubles.Count - 1); } MeassurementsList.AddRange(meassuredData.MeassureDoubles); //Finder diastolisk og systolisk værdier - algoritme for (int i = 0; i < MeassurementsList.Count; i++) { if (MeassurementsList[i] < Diastolic) { Diastolic = MeassurementsList[i]; diastolicIndex = i; canAddDiastolic = true; } else if (MeassurementsList[i] > hysteresisHigh && canAddDiastolic == true) { diastolicValues.Add(Diastolic); canAddDiastolic = false; Diastolic = mAP; } else if (MeassurementsList[i] > Systolic) { Systolic = MeassurementsList[i]; systolicIndex = i; canAddSystolic = true; } else if (MeassurementsList[i] < hysteresisLow && canAddSystolic == true) { systolicValues.Add(Systolic); Systolic = mAP; canAddSystolic = false; } } if (MeassurementsList.Count >= systolicIndex + 3 && MeassurementsList.Count >= diastolicIndex + 3) { //Tjekker om jeg er har at gøre med en diastolisk værdi, men ikke er kommet over min øvre hysteresegrænse endnu if (Diastolic != diastolicValues.Last() && Diastolic < MeassurementsList[diastolicIndex + 3]) { diastolicValues.Add(Diastolic); } if (Systolic != systolicValues.Last() && Systolic > MeassurementsList[systolicIndex + 3]) { systolicValues.Add(Systolic); } } // tager den sidste værdi og gemmer denne. Systolic = systolicValues.Last(); Diastolic = diastolicValues.Last(); // Tømmer listetn systolicValues.Clear(); diastolicValues.Clear(); }
// Tilføjer et sekunds måledata til min lange liste. public bool GetAlarm(DtoMeassuredDataFs _meassuredData, double _map) { MAP = _map; //Sørger for at der kun gemmes 3 målinger/3 sekunder ad gangen. Jeg kopierer dem over i en liste med målinger: if (LastSavedMeassurements.Count >= _meassuredData.MeassureDoubles.Count * alarmperiod) { LastSavedMeassurements.RemoveRange(0, _meassuredData.MeassureDoubles.Count - 1); } LastSavedMeassurements.AddRange(_meassuredData.MeassureDoubles); hysteresisHigh = MAP + hysteresisSpring; hysteresisLow = MAP - hysteresisSpring; List <int> index = new List <int>(); //Her bestemmes ved hvilke index vi registrerer høj for (int i = 0; i < LastSavedMeassurements.Count; i++) { if (LastSavedMeassurements[i] >= hysteresisHigh && isOverHys == false) { index.Add(i); isOverHys = true; } else if (LastSavedMeassurements[i] <= hysteresisLow && isOverHys == true) { isOverHys = false; } } MAP = 0; //Beregner nu MAP for de nyeste målinger double forHowlong = index[index.Count - 1]; int counter = 1; if (index.Count > 1) { for (int i = index[0]; i <= index[index.Count - 1]; i++) { MAP += LastSavedMeassurements[i]; if (i == index[counter]) { MAP = MAP / (index[counter] - index[counter - 1]); if (oldMAP.Count >= alarmperiod) { oldMAP.RemoveAt(0); } oldMAP.Add(MAP); MAP = 0; counter++; } } } LastSavedMeassurements.RemoveRange(0, index[index.Count - 1]); if (LastSavedMeassurements[0] > hysteresisHigh) { isOverHys = true; } isFall = false; if (oldMAP.Count > 1) { oldMap = oldMAP[0]; } foreach (double map in oldMAP) { if (map <= oldMap * persentage) { isFall = true; } else { isFall = false; } oldMap = map; } return(isFall); }