public InflectionPoint(SignalDataByTime signalValue, int indexOrigin, ExtremaType extremum) { this.x = signalValue.Time; this.y = signalValue.SignalValue; this.index = indexOrigin; this.extremumType = extremum; }
/// <summary> /// Gets all cached items as a list by their key. /// </summary> /// <returns>A list of all cached items</returns> public static SignalDataByTime[] GetCacheData() { SignalDataByTime[] signalValuesArray; lock (signalValuesCache) { signalValuesArray = signalValuesCache.ToArray(); } int numberNotNullListItem = 0; for (int i = 0; i < signalValuesArray.Length - 100; i++) { if (signalValuesArray[i] != null) { numberNotNullListItem++; } } SignalDataByTime[] result = new SignalDataByTime[numberNotNullListItem]; if (numberNotNullListItem == signalValuesArray.Length) { result = signalValuesArray; } else { int j = 0; for (int i = 0; i < signalValuesArray.Length - 100; i++) { if (signalValuesArray[i] != null) { result[j] = signalValuesArray[i]; if ("TestWithoutDevice".Equals(applicationMode) && j > 0) { result[j].Time = result[j - 1].Time + sampleRate; } else if ("TestWithoutDevice".Equals(applicationMode) && j == 0) { result[j].Time = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; } j++; } } } return(result); }
public SignalDataByTime[] GetMedianFilterPoints() { if (this.signalCoordinates == null) { return(null); } SignalDataByTime[] signalCoordinatesExtented = extendSignalCoordinates(signalCoordinates); SignalDataByTime[] result = new SignalDataByTime[signalCoordinates.Length]; for (int i = 2; i < signalCoordinatesExtented.Length - 2; ++i) { double[] window = new double[5]; //store each 5 consecutive elements for (int j = 0; j < 5; ++j) { window[j] = signalCoordinatesExtented.ElementAt(i - 2 + j).SignalValue; } //sort elements of the array window for (int j = 0; j < 3; ++j) { // Find position of minimum element int min = j; for (int k = j + 1; k < 5; ++k) { if (window[k] < window[min]) { min = k; } } // Put found minimum element in its place double temp = window[j]; window[j] = window[min]; window[min] = temp; } // Get result - the middle element result[i - 2] = new SignalDataByTime(signalCoordinatesExtented.ElementAt(i - 2).Time, window[2], signalCoordinatesExtented.ElementAt(i - 2).HighPassValue, signalCoordinatesExtented.ElementAt(i - 2).LowPassValue); } signalCoordinatesExtented = null; return(result); }
private void GSRChartDisplay() { ChartClean(); gsrChart.Series[0].XValueType = ChartValueType.DateTime; butterworthChart.Series[0].XValueType = ChartValueType.DateTime; List <SignalDataByTime> signalValues = gsrAsset.GetSignalData(); SignalDataByTime[] signalValuesCopy = new SignalDataByTime[signalValues.Count]; signalValues.CopyTo(signalValuesCopy); SignalDataByTime[] medianFilterCoordinates = gsrAsset.GetMedianFilterValues(signalValuesCopy); // Adjust Y & X axis scale gsrChart.ResetAutoValues(); int i = 0; foreach (SignalDataByTime coordinate in signalValues) { DateTime coordinateDateTime = DateFromMS((long)coordinate.Time); String xAxisLabel = coordinateDateTime.ToString("HH:mm:ss:fff", CultureInfo.InvariantCulture); gsrChart.Series[rawSignalLineName].Points.AddXY(xAxisLabel, coordinate.SignalValue); if (medianFilterCoordinates != null) { DateTime medianCoordinateDateTime = new DateTime((long)medianFilterCoordinates[i].Time * 1000, DateTimeKind.Local); String medianXAxisLabel = medianCoordinateDateTime.ToString("HH:mm:ss:fff", CultureInfo.InvariantCulture); double medianValue = medianFilterCoordinates[i].SignalValue; gsrChart.Series[medianLineName].Points.AddXY(medianXAxisLabel, medianValue); i++; } butterworthChart.Series[butterworthLowPassLine].Points.AddXY(xAxisLabel, coordinate.LowPassValue); butterworthChart.Series[butterworthHighPassLine].Points.AddXY(xAxisLabel, coordinate.HighPassValue); } RemoveOldPoints(maximumNumberOfChartPoints * 5); SetChartDetail(gsrChart, "Time", "GSR"); SetChartDetail(butterworthChart, "Time", "Butterworth"); }
private SignalDataByTime[] extendSignalCoordinates(SignalDataByTime[] signalCoordinates) { if (signalCoordinates == null || signalCoordinates.Length == 0 || signalCoordinates.Length < 2) { return(signalCoordinates); } SignalDataByTime[] result = new SignalDataByTime[signalCoordinates.Length + 4]; result[0] = new SignalDataByTime(signalCoordinates.ElementAt(1).Time - 20.0, signalCoordinates.ElementAt(1).SignalValue); result[1] = new SignalDataByTime(signalCoordinates.ElementAt(0).Time - 10.0, signalCoordinates.ElementAt(0).SignalValue); for (int i = 0; i < signalCoordinates.Length; i++) { result[i + 2] = signalCoordinates.ElementAt(i); } result[signalCoordinates.Length + 2] = new SignalDataByTime(signalCoordinates.ElementAt(signalCoordinates.Length - 1).Time + 10.0, signalCoordinates.ElementAt(signalCoordinates.Length - 1).SignalValue); result[signalCoordinates.Length + 3] = new SignalDataByTime(signalCoordinates.ElementAt(signalCoordinates.Length - 2).Time + 20.0, signalCoordinates.ElementAt(signalCoordinates.Length - 2).SignalValue); return(result); }