示例#1
0
 public InflectionPoint(SignalDataByTime signalValue, int indexOrigin, ExtremaType extremum)
 {
     this.x            = signalValue.Time;
     this.y            = signalValue.SignalValue;
     this.index        = indexOrigin;
     this.extremumType = extremum;
 }
示例#2
0
    /// <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);
    }
示例#3
0
        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");
        }
示例#5
0
        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);
        }