init
This commit is contained in:
89
Common/DTS.Common.Utilities/DataConditioning.cs
Normal file
89
Common/DTS.Common.Utilities/DataConditioning.cs
Normal file
@@ -0,0 +1,89 @@
|
||||
using DTS.Common.Utilities;
|
||||
using DTS.Common.Utilities.SaeJ211;
|
||||
using System.Linq;
|
||||
|
||||
namespace DTS.Utilities
|
||||
{
|
||||
public static class DataConditioning
|
||||
{
|
||||
/// <summary>
|
||||
/// returns an integer part of a string that might contain a decimal
|
||||
/// </summary>
|
||||
/// <param name="o"></param>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets Zered EU data given a time window to average
|
||||
/// </summary>
|
||||
/// <param name="euData"></param>
|
||||
/// <param name="sampleRate"></param>
|
||||
/// <param name="triggerSample"></param>
|
||||
/// <param name="startTime"></param>
|
||||
/// <param name="endTime"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user