//THIS CLASS IS RESPONSIBLE FOR MANIPULATING AN ARRAY OF SENSOR VALUE //IT SHALL OPERATE AS FOLLOWS (BASED ON MY SEGMENTATION EXPERIMENTS) //1. SHOT BOUNDARY DETECTION APPROACH (I.E. JUST COMPARE ADJACENT READINGS) public static void manipulate_relevant_sensor_values(Sensor_Reading[] sensor_vals, int start_index, int end_index, Upload_and_Segment_Images_Thread.DeviceType device_type) { //NOTE THE START AND END INDEX ... THESE SIGNIFY THE START AND END OF A PARTICULAR CHUNK IN THE ARRAY //1. get the list of sensor values //NOTE THE START AND END INDEX ... THESE SIGNIFY THE START AND END OF A PARTICULAR CHUNK IN THE ARRAY //FIRSTLY STORE THE RAW VALUES TO LOCAL DOUBLE ARRAYS double[] original_acc_combined_values = new double[(end_index - start_index) + 1]; double[] original_acc_x_values = new double[original_acc_combined_values.Length]; double[] original_pir_values = new double[original_acc_combined_values.Length]; for (int counter = 0; counter < original_acc_combined_values.Length; counter++) { original_acc_combined_values[counter] = sensor_vals[start_index + counter].get_raw_acc_combined(device_type); original_acc_x_values[counter] = Standard_Calculation.get_signed_int(sensor_vals[start_index + counter].get_acc_x(), device_type); original_pir_values[counter] = sensor_vals[start_index + counter].get_pir(); } //end for (int counter = 0; counter < original_sensor_values.Length; counter++) //--------------------------------------------------------------- //2. perform SDB comparisons on acc_comb and texttiling on acc x double[] acc_comb_manipulated_scores, acc_x_manipulated_scores, pir_manipulated_scores; //perform SDB comparisons on acc_comb acc_comb_manipulated_scores = calculate_sbd_scores(original_acc_combined_values); //and TextTiling of block size 2 on the acc_x component acc_x_manipulated_scores = calculate_texttiling_scores(original_acc_x_values, 2); //and finally the PIR with a block size of 78 pir_manipulated_scores = calculate_texttiling_scores(original_pir_values, 78); //--------------------------------------------------------------- //3. smooth the values over a window size of just 1 (i.e. 3 readings just taken, ref, and 1 before + 1 after) Standard_Calculation.smooth_array_using_median_values(acc_comb_manipulated_scores, 1); Standard_Calculation.smooth_array_using_median_values(acc_x_manipulated_scores, 1); Standard_Calculation.smooth_array_using_median_values(original_pir_values, 1); //--------------------------------------------------------------- //4. update Sensor_Reading[] array with newly calculated manipulated values set_relevant_manipulated_sensor_values(sensor_vals, acc_comb_manipulated_scores, acc_x_manipulated_scores, pir_manipulated_scores, start_index); }
public static double get_signed_int(double to_change, Upload_and_Segment_Images_Thread.DeviceType device_type) { if (device_type == Upload_and_Segment_Images_Thread.DeviceType.Revue || device_type == Upload_and_Segment_Images_Thread.DeviceType.Autographer) return to_change; else return get_signed_int((int)to_change); }
public double get_raw_acc_combined(Upload_and_Segment_Images_Thread.DeviceType device_type) { return Math.Sqrt(Standard_Calculation.square_value(Standard_Calculation.get_signed_int(acc_x, device_type)) + Standard_Calculation.square_value(Standard_Calculation.get_signed_int(acc_y, device_type)) + Standard_Calculation.square_value(Standard_Calculation.get_signed_int(acc_z, device_type))); }