public SimilarActivitiesForm(string activity, AXML.Annotation aanotation) { this.checkboxes = new System.Collections.ArrayList(); this.aanotation = aanotation; this.confusedActivity = activity; InitializeComponent(); InitializeInterface(); }
public static void Initialize(MITesDecoder aMITesDecoder, string aDataDirectory, AXML.Annotation aannotation, SXML.SensorAnnotation sannotation, GeneralConfiguration configuration)//, string masterDirectory) { Extractor.aannotation = aannotation; Extractor.sannotation = sannotation; Extractor.dconfiguration = configuration; // count the sensors for feature extraction and identify their indicies in // sensor annotation - at the moment only accelerometers are used Extractor.sensorIndicies = new Hashtable(); Extractor.extractorSensorCount = 0; foreach (SXML.Sensor sensor in sannotation.Sensors) { int channel=Convert.ToInt32(sensor.ID); if (channel > 0) // if accelerometer { Extractor.sensorIndicies[channel] = extractorSensorCount; Extractor.extractorSensorCount++; } } //load sensor data //SXML.Reader sreader = new SXML.Reader(masterDirectory, aDataDirectory); //Extractor.sannotation = sreader.parse(); //load configuration // ConfigurationReader creader = new ConfigurationReader(aDataDirectory); // Extractor.dconfiguration = creader.parse(); //load annotation data //AXML.Reader reader = new AXML.Reader(masterDirectory, aDataDirectory + "\\" + AXML.Reader.DEFAULT_XML_FILE); //Extractor.aannotation = reader.parse(); //CHANGE: gathers training samples based on the first category only Extractor.trainingTime = new Hashtable();//int[((AXML.Category)Extractor.aannotation.Categories[0]).Labels.Count]; //for (int i = 0; (i < Extractor.trainingTime.Length); i++) foreach (AXML.Label label in ((AXML.Category)Extractor.aannotation.Categories[0]).Labels) Extractor.trainingTime.Add(label.Name, 0); //Extractor.trainingTime[i] = 0; Extractor.trainingCompleted = false; Extractor.inputRowSize = Extractor.extractorSensorCount * 3; Extractor.fftInterpolationPower = dconfiguration.FFTInterpolatedPower; Extractor.fftMaximumFrequencies = dconfiguration.FFTMaximumFrequencies; //Extractor.trainingTimePerClass = configuration.TrainingTime; //Extractor.trainingWaitTime = configuration.TrainingWaitTime; Extractor.inputColumnSize = (int)Math.Pow(2, Extractor.fftInterpolationPower); Extractor.num_features = Extractor.inputRowSize; // number of distances Extractor.num_features += 1; //total mean; Extractor.num_features += Extractor.inputRowSize; // number of variances Extractor.num_features += Extractor.inputRowSize; // number of ranges Extractor.num_features += 2 * Extractor.fftMaximumFrequencies * Extractor.inputRowSize; // number of fft magnitudes and frequencies Extractor.num_features += Extractor.inputRowSize; // number of energies Extractor.num_features += ((Extractor.inputRowSize * Extractor.inputRowSize) - Extractor.inputRowSize) / 2; //correlation coefficients off-di Extractor.features = new double[Extractor.num_features]; Extractor.arffAttriburesLabels = new string[Extractor.num_features]; Extractor.attributeLocation = new Hashtable(); Extractor.standardized = new double[inputRowSize][]; for (int i = 0; (i < inputRowSize); i++) Extractor.standardized[i] = new double[Extractor.inputColumnSize];//input[0].Length]; Extractor.means = new double[inputRowSize]; inputFFT = new int[Extractor.inputColumnSize]; FFT.Initialize(fftInterpolationPower, fftMaximumFrequencies); Extractor.aMITesDecoder = aMITesDecoder; //Create the ARFF File header string arffHeader = "@RELATION wockets\n\n" + Extractor.GetArffHeader();//sannotation.Sensors.Count * 3, configuration.FFTMaximumFrequencies); arffHeader += "@ATTRIBUTE activity {"; foreach (AXML.Label label in ((AXML.Category)Extractor.aannotation.Categories[0]).Labels) arffHeader += label.Name.Replace(' ', '_') + ","; arffHeader += "unknown}\n"; arffHeader += "\n@DATA\n\n"; //Calculating windowing parameters //total number of points per interpolated window Extractor.INTERPOLATED_SAMPLING_RATE_PER_WINDOW = (int)Math.Pow(2, dconfiguration.FFTInterpolatedPower); //128; //space between interpolated samples Extractor.INTERPOLATED_SAMPLES_SPACING = (double)dconfiguration.WindowTime / INTERPOLATED_SAMPLING_RATE_PER_WINDOW; //expected sampling rate per MITes //Extractor.EXPECTED_SAMPLING_RATE = dconfiguration.ExpectedSamplingRate / sannotation.Sensors.Count; //samples per second //expected samples per window //Extractor.EXPECTED_WINDOW_SIZE = (int)(EXPECTED_SAMPLING_RATE * (dconfiguration.WindowTime / 1000.0)); // expectedSamplingRate per window //what would be considered a good sampling rate //Extractor.EXPECTED_GOOD_SAMPLING_RATE = EXPECTED_WINDOW_SIZE - (int)(dconfiguration.MaximumNonconsecutiveFrameLoss * EXPECTED_WINDOW_SIZE); //number of packets lost per second //space between samples //Extractor.EXPECTED_SAMPLES_SPACING = (double)dconfiguration.WindowTime / EXPECTED_WINDOW_SIZE; Extractor.EXPECTED_SAMPLING_RATES = new int[Extractor.extractorSensorCount]; Extractor.EXPECTED_WINDOW_SIZES = new int[Extractor.extractorSensorCount]; Extractor.EXPECTED_GOOD_SAMPLING_RATES = new int[Extractor.extractorSensorCount]; Extractor.EXPECTED_SAMPLES_SPACING = new double[Extractor.extractorSensorCount]; //foreach (SXML.Sensor sensor in sannotation.Sensors) foreach (DictionaryEntry sensorEntry in Extractor.sensorIndicies) { //Get the channel and index in data array for only // extractor sensors (sensors that will be used to compute // features i.e. accelerometers) int channel=(int)sensorEntry.Key; int sensorIndex = (int)sensorEntry.Value; SXML.Sensor sensor = ((SXML.Sensor)sannotation.Sensors[(int)sannotation.SensorsIndex[channel]]); int receiverID = Convert.ToInt32(sensor.Receiver); if (channel == MITesDecoder.MAX_CHANNEL) //Built in sensor Extractor.EXPECTED_SAMPLING_RATES[sensorIndex] = sensor.SamplingRate; //used sensor sampling rate else Extractor.EXPECTED_SAMPLING_RATES[sensorIndex] = dconfiguration.ExpectedSamplingRate / sannotation.NumberSensors[receiverID]; Extractor.EXPECTED_WINDOW_SIZES[sensorIndex] = (int)(Extractor.EXPECTED_SAMPLING_RATES[sensorIndex] * (dconfiguration.WindowTime / 1000.0)); Extractor.EXPECTED_GOOD_SAMPLING_RATES[sensorIndex] = Extractor.EXPECTED_WINDOW_SIZES[sensorIndex] - (int)(dconfiguration.MaximumNonconsecutiveFrameLoss * Extractor.EXPECTED_WINDOW_SIZES[sensorIndex]); Extractor.EXPECTED_SAMPLES_SPACING[sensorIndex] = (double)dconfiguration.WindowTime / Extractor.EXPECTED_WINDOW_SIZES[sensorIndex]; } //window counters and delimiters Extractor.next_window_end = 0; Extractor.total_window_count = 0; Extractor.num_feature_windows = 0; //data quality variables Extractor.isAcceptableLossRate = true; Extractor.isAcceptableConsecutiveLoss = true; Extractor.unacceptable_window_count = 0; Extractor.unacceptable_consecutive_window_loss_count = 0; //2 D array that stores Sensor axes + time stamps on each row X expected WINDOW SIZE Extractor.data = new double[Extractor.extractorSensorCount * 4][]; // 1 row for each axis // 2D array that stores Sensor axes X INTERPOLATED WINDOW SIZE Extractor.interpolated_data = new double[Extractor.extractorSensorCount * 3][]; // array to store the y location for each axes as data is received // will be different for every sensor of course Extractor.y_index = new int[Extractor.extractorSensorCount]; //Initialize expected data array foreach (DictionaryEntry sensorEntry in Extractor.sensorIndicies) { //Get the channel and index in data array for only // extractor sensors (sensors that will be used to compute // features i.e. accelerometers) int channel=(int)sensorEntry.Key; int sensorIndex = (int)sensorEntry.Value; int adjusted_sensor_index = sensorIndex * 4; //Initialize 4 rows x,y,z timestamp for (int j = 0; j < 4; j++) { Extractor.data[adjusted_sensor_index] = new double[EXPECTED_WINDOW_SIZES[sensorIndex]]; for (int k = 0; (k < EXPECTED_WINDOW_SIZES[sensorIndex]); k++) Extractor.data[adjusted_sensor_index][k] = 0; adjusted_sensor_index++; } } //Here it is equal across all sensors, so we do not need to consider //the sampling rate of each sensor separately for (int j = 0; (j < (Extractor.extractorSensorCount * 3)); j++) { Extractor.interpolated_data[j] = new double[INTERPOLATED_SAMPLING_RATE_PER_WINDOW]; for (int k = 0; (k < INTERPOLATED_SAMPLING_RATE_PER_WINDOW); k++) Extractor.interpolated_data[j][k] = 0; } //Initialize y index for each sensor for (int j = 0; (j < Extractor.extractorSensorCount); j++) Extractor.y_index[j] = 0; }
public static void Initialize(MITesDecoder aMITesDecoder, string aDataDirectory, AXML.Annotation aannotation,SXML.SensorAnnotation sannotation)//, string masterDirectory) { Extractor.aannotation = aannotation; Extractor.sannotation = sannotation; //load sensor data //SXML.Reader sreader = new SXML.Reader(masterDirectory, aDataDirectory); //Extractor.sannotation = sreader.parse(); //load configuration ConfigurationReader creader = new ConfigurationReader(aDataDirectory); Extractor.dconfiguration = creader.parse(); //load annotation data //AXML.Reader reader = new AXML.Reader(masterDirectory, aDataDirectory + "\\" + AXML.Reader.DEFAULT_XML_FILE); //Extractor.aannotation = reader.parse(); //CHANGE: gathers training samples based on the first category only Extractor.trainingTime = new Hashtable();//int[((AXML.Category)Extractor.aannotation.Categories[0]).Labels.Count]; //for (int i = 0; (i < Extractor.trainingTime.Length); i++) foreach (AXML.Label label in ((AXML.Category)Extractor.aannotation.Categories[0]).Labels) Extractor.trainingTime.Add(label.Name, 0); //Extractor.trainingTime[i] = 0; Extractor.trainingCompleted = false; Extractor.inputRowSize = sannotation.Sensors.Count * 3; Extractor.fftInterpolationPower = dconfiguration.FFTInterpolatedPower; Extractor.fftMaximumFrequencies = dconfiguration.FFTMaximumFrequencies; //Extractor.trainingTimePerClass = configuration.TrainingTime; //Extractor.trainingWaitTime = configuration.TrainingWaitTime; Extractor.inputColumnSize = (int)Math.Pow(2, Extractor.fftInterpolationPower); Extractor.num_features = Extractor.inputRowSize; // number of distances Extractor.num_features += 1; //total mean; Extractor.num_features += Extractor.inputRowSize; // number of variances Extractor.num_features += Extractor.inputRowSize; // number of ranges Extractor.num_features += 2 * Extractor.fftMaximumFrequencies * Extractor.inputRowSize; // number of fft magnitudes and frequencies Extractor.num_features += Extractor.inputRowSize; // number of energies Extractor.num_features += ((Extractor.inputRowSize * Extractor.inputRowSize) - Extractor.inputRowSize) / 2; //correlation coefficients off-di Extractor.features = new double[Extractor.num_features]; Extractor.arffAttriburesLabels = new string[Extractor.num_features]; Extractor.standardized = new double[inputRowSize][]; for (int i = 0; (i < inputRowSize); i++) Extractor.standardized[i] = new double[Extractor.inputColumnSize];//input[0].Length]; Extractor.means = new double[inputRowSize]; inputFFT = new int[Extractor.inputColumnSize]; FFT.Initialize(fftInterpolationPower, fftMaximumFrequencies); Extractor.aMITesDecoder = aMITesDecoder; //Create the ARFF File header string arffHeader = "@RELATION wockets\n\n" + Extractor.GetArffHeader();//sannotation.Sensors.Count * 3, configuration.FFTMaximumFrequencies); arffHeader += "@ATTRIBUTE activity {"; foreach (AXML.Label label in ((AXML.Category)Extractor.aannotation.Categories[0]).Labels) arffHeader += label.Name.Replace(' ', '_') + ","; arffHeader += "unknown}\n"; arffHeader += "\n@DATA\n\n"; //Calculating windowing parameters //total number of points per interpolated window Extractor.INTERPOLATED_SAMPLING_RATE_PER_WINDOW = (int)Math.Pow(2, dconfiguration.FFTInterpolatedPower); //128; //expected sampling rate per MITes Extractor.EXPECTED_SAMPLING_RATE = dconfiguration.ExpectedSamplingRate / sannotation.Sensors.Count; //samples per second //expected samples per window Extractor.EXPECTED_WINDOW_SIZE = (int)(EXPECTED_SAMPLING_RATE * (dconfiguration.WindowTime / 1000.0)); // expectedSamplingRate per window //what would be considered a good sampling rate Extractor.EXPECTED_GOOD_SAMPLING_RATE = EXPECTED_WINDOW_SIZE - (int)(dconfiguration.MaximumNonconsecutiveFrameLoss * EXPECTED_WINDOW_SIZE); //number of packets lost per second //space between samples Extractor.EXPECTED_SAMPLES_SPACING = (double)dconfiguration.WindowTime / EXPECTED_WINDOW_SIZE; //space between interpolated samples Extractor.INTERPOLATED_SAMPLES_SPACING = (double)dconfiguration.WindowTime / INTERPOLATED_SAMPLING_RATE_PER_WINDOW; //window counters and delimiters Extractor.next_window_end = 0; Extractor.total_window_count = 0; Extractor.num_feature_windows = 0; //data quality variables Extractor.isAcceptableLossRate = true; Extractor.isAcceptableConsecutiveLoss = true; Extractor.unacceptable_window_count = 0; Extractor.unacceptable_consecutive_window_loss_count = 0; //2 D array that stores Sensor axes + time stamps on each row X expected WINDOW SIZE Extractor.data = new double[Extractor.sannotation.Sensors.Count * 4][]; // 1 row for each axis // 2D array that stores Sensor axes X INTERPOLATED WINDOW SIZE Extractor.interpolated_data = new double[Extractor.sannotation.Sensors.Count * 3][]; // array to store the y location for each axes as data is received // will be different for every sensor of course Extractor.y_index = new int[Extractor.sannotation.Sensors.Count]; //Initialize expected data array for (int j = 0; (j < (Extractor.sannotation.Sensors.Count * 4)); j++) { Extractor.data[j] = new double[EXPECTED_WINDOW_SIZE]; for (int k = 0; (k < EXPECTED_WINDOW_SIZE); k++) Extractor.data[j][k] = 0; } //Initialize interpolated data array for (int j = 0; (j < (Extractor.sannotation.Sensors.Count * 3)); j++) { Extractor.interpolated_data[j] = new double[INTERPOLATED_SAMPLING_RATE_PER_WINDOW]; for (int k = 0; (k < INTERPOLATED_SAMPLING_RATE_PER_WINDOW); k++) Extractor.interpolated_data[j][k] = 0; } //Initialize y index for each sensor for (int j = 0; (j < Extractor.sannotation.Sensors.Count); j++) Extractor.y_index[j] = 0; }