using DTS.Common.Utilities; using DTS.Common.Utilities.SaeJ211; using System.Linq; namespace DTS.Utilities { public static class DataConditioning { /// /// returns an integer part of a string that might contain a decimal /// /// /// public static int GetIntegerIfPossible(object o) { if (null == o) { throw new System.Exception("expected non null input parameter"); } var s = o.ToString(); var index = s.IndexOf("."); if (index == 0) { return 0; } if (index > 0) { s = s.Substring(0, index); } return int.Parse(s); } /// /// Gets Zered EU data given a time window to average /// /// /// /// /// /// /// public static double[] GetAverageOverTimeEuData( double[] euData, double sampleRate, double triggerSample, double startTime, double endTime) { double[] zeroedEuData; var duration = endTime - startTime; //.3 - .2 = .1 var startSample = (int)(triggerSample + (startTime * sampleRate)); var endSample = (int)(startSample + (duration * sampleRate)); var numSamples = endSample - startSample; if (numSamples <= 0) return euData; if (numSamples > euData.Length) return euData; var averagingSamples = new double[numSamples]; var i = 0; for (var sampleNum = startSample; sampleNum < endSample; sampleNum++) { averagingSamples[i] = euData[sampleNum]; i++; } var average = averagingSamples.Average(); var zeroedDataIndex = 0; zeroedEuData = new double[euData.Length]; foreach (var sample in euData) { zeroedEuData[zeroedDataIndex] = sample - average; //If average is a negative number, the sample will be increased zeroedDataIndex++; } return zeroedEuData; } public static double[] GetFilteredZeroedEUData( double[] euData, int filterRate, double sampleRate, double triggerSample, double startTime, double endTime) { return GetFilteredEUData(GetAverageOverTimeEuData(euData, sampleRate, triggerSample, startTime, endTime), filterRate, sampleRate); } public static double[] GetFilteredEUData(double[] euData, int filterRate, double sampleRate) { if (filterRate <= 0) return euData; var filterUtility = new FilterUtility { Cfc = ChannelFilter.AdHoc, AdHocFrequency = filterRate, SampleRate = sampleRate }; var filteredData = filterUtility.ApplyFilter(euData); return filteredData; } } }