internal static List <TrainingValue> GetTrainingValues(List <EMGPacket> packets, bool enableSkip) { List <TrainingValue> values = new List <TrainingValue>(EMGProcessor.FFT_SAMPLE_SIZE); int skipsRemaining = 0; for (int i = 0; i < packets.Count / EMGProcessor.FFT_SAMPLE_SIZE; i++) { if (enableSkip && skipsRemaining > 0) { skipsRemaining--; continue; } Complex[] data = new Complex[EMGProcessor.FFT_SAMPLE_SIZE]; int start = i * EMGProcessor.FFT_SAMPLE_SIZE; int end = start + EMGProcessor.FFT_SAMPLE_SIZE; MuscleState startMuscleState = packets[start].muscleStateHint; for (int j = start; j < end; j++) { EMGPacket packet = packets[j]; if (packet.muscleStateHint != startMuscleState) { skipsRemaining += EMGProcessor.SKIPS_AFTER_TRANSITION; break; } data[j - start] = new Complex(EMGProcessor.ValueFromPacket(packet), 0); } if (enableSkip && skipsRemaining > 0) { continue; } FourierTransform.FFT(data, FourierTransform.Direction.Forward); List <Complex> fftResults = new List <Complex>(data); TrainingValue trainingValue = new TrainingValue((int)packets[start].muscleStateHint, EMGProcessor.FEATURE_COUNT); EMGProcessor.FillTrainingValue(ref trainingValue, fftResults); values.Add(trainingValue); } return(values); }
private static void RunEMG() { EMGSerialReader reader = new EMGSerialReader("COM4", 1000); EMGProcessor processor = new EMGProcessor(reader); processor.Start(); long ticks = DateTime.Now.Ticks; while (true) { //long dtTicks = DateTime.Now.Ticks - ticks; //float dt = (float)dtTicks / 10000000; processor.Update(); //ticks = DateTime.Now.Ticks; Thread.Sleep(16); } }