Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }