Esempio n. 1
0
        private static void ParseSignature(Signature signature, string[] linesArray, bool standardFeatures)
        {
            var lines = linesArray
                        .Skip(1)
                        .Where(l => l != "")
                        .Select(l => l.Split(' ').Select(s => int.Parse(s)).ToArray())
                        .ToList();

            //HACK: same timestamp for measurements does not make sense
            // therefore, we remove the second entry
            // a better solution would be to change the timestamps based on their environments
            for (int i = 0; i < lines.Count - 1; i++)
            {
                if (lines[i][2] == lines[i + 1][2])
                {
                    lines.RemoveAt(i + 1);
                    i--;
                }
            }
            // Task1, Task2
            signature.SetFeature(Svc2004.X, lines.Select(l => l[0]).ToList());
            signature.SetFeature(Svc2004.Y, lines.Select(l => l[1]).ToList());
            signature.SetFeature(Svc2004.T, lines.Select(l => l[2]).ToList());
            signature.SetFeature(Svc2004.Button, lines.Select(l => l[3]).ToList());
            if (standardFeatures)
            {
                signature.SetFeature(Features.X, lines.Select(l => (double)l[0]).ToList());
                signature.SetFeature(Features.Y, lines.Select(l => (double)l[1]).ToList());
                signature.SetFeature(Features.T, lines.Select(l => (double)l[2]).ToList());
                signature.SetFeature(Features.Button, lines.Select(l => (l[3] == 1)).ToList());
                SignatureHelper.CalculateStandardStatistics(signature);
            }

            if (lines[0].Length == 7) // Task2
            {
                List <int> azimuth  = lines.Select(l => l[4]).ToList();
                List <int> altitude = lines.Select(l => l[5]).ToList();
                List <int> pressure = lines.Select(l => l[6]).ToList();
                signature.SetFeature(Svc2004.Azimuth, azimuth);
                signature.SetFeature(Svc2004.Altitude, altitude);
                signature.SetFeature(Svc2004.Pressure, pressure);
                if (standardFeatures)
                {
                    double azimuthmax  = azimuth.Max();
                    double altitudemax = altitude.Max();
                    double pressuremax = pressure.Max();
                    signature.SetFeature(Features.Azimuth, azimuth.Select(a => a / azimuthmax * 2 * Math.PI).ToList());
                    signature.SetFeature(Features.Altitude, altitude.Select(a => a / altitudemax).ToList());
                    signature.SetFeature(Features.Pressure, pressure.Select(a => a / pressuremax).ToList());
                    SignatureHelper.CalculateStandardStatistics(signature);
                }
            }
        }
Esempio n. 2
0
        private static void ParseSignature(Signature signature, string[] linesArray, bool standardFeatures)
        {
            var lines = linesArray
                        .Skip(1)
                        .Where(l => !string.IsNullOrWhiteSpace(l))
                        .Select(l => l.Split(';').Select(s => int.Parse(s)).ToArray())
                        .ToList();

            // Remove noise (points with 0 pressure) from the beginning of the signature
            while (lines.Count > 0 && lines[0][4] == 0)
            {
                lines.RemoveAt(0);
            }
            // Remove noise (points with 0 pressure) from the end of the signature
            while (lines.Count > 0 && lines[lines.Count - 1][4] == 0)
            {
                lines.RemoveAt(lines.Count - 1);
            }

            signature.SetFeature(SigComp19.EventType, lines.Select(l => l[0]).ToList());
            signature.SetFeature(SigComp19.T, lines.Select(l => l[1]).ToList());
            signature.SetFeature(SigComp19.X, lines.Select(l => l[2]).ToList());
            signature.SetFeature(SigComp19.Y, lines.Select(l => l[3]).ToList());
            signature.SetFeature(SigComp19.P, lines.Select(l => l[4]).ToList());
            signature.SetFeature(SigComp19.Altitude, lines.Select(l => l[5]).ToList());
            signature.SetFeature(SigComp19.Azimuth, lines.Select(l => l[6]).ToList());
            signature.SetFeature(SigComp19.Distance, lines.Select(l => l[7]).ToList());

            if (standardFeatures)
            {
                signature.SetFeature(Features.X, lines.Select(l => (double)l[2]).ToList());
                signature.SetFeature(Features.Y, lines.Select(l => (double)l[3]).ToList());
                signature.SetFeature(Features.Pressure, lines.Select(l => (double)l[4]).ToList());
                signature.SetFeature(Features.T, lines.Select(l => (double)l[1]).ToList());
                signature.SetFeature(Features.Button, lines.Select(l => l[0] == 3).ToList());
                signature.SetFeature(Features.Azimuth, lines.Select(l => (double)l[6]).ToList());
                signature.SetFeature(Features.Altitude, lines.Select(l => (double)l[5]).ToList());
                SignatureHelper.CalculateStandardStatistics(signature);
            }
        }