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