示例#1
0
        private void EmotivDataWorker(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            while (!worker.CancellationPending)
            {
                //will collect data
                dataReader.DataCollect();
                System.Threading.Thread.Sleep(600);
            }
            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
        }
示例#2
0
        private void DataTimer_Tick(object sender, EventArgs e)
        {
            //just in case needing to clear data buffer - discard data by not doing anything to it
            if (!OPStart)
            {
                List <EmotivRawEEG> receivedData = dataReader.DataCollect();
            }

            if (OPStart)
            {
                List <EmotivRawEEG> receivedData = dataReader.DataCollect();

                #region add received Data
                if (receivedData != null)
                {
                    /*add retreive EEG data to the general list*/
                    foreach (EmotivRawEEG data in receivedData)
                    {
                        EEGStorer.Add(data);
                    }

                    for (int i = 0; i < receivedData.Count; i++)
                    {
                        O1List.Add(receivedData[i].O1);
                        F3List.Add(receivedData[i].F3);
                        F4List.Add(receivedData[i].F4);
                        F7List.Add(receivedData[i].F7);
                        F8List.Add(receivedData[i].F8);
                        AF3List.Add(receivedData[i].AF3);
                        AF4List.Add(receivedData[i].AF4);
                    }
                }
                #endregion

                #region declared temp variable
                int maxFreqO1 = 0, maxFreqF3, maxFreqF4, maxFreqF7, maxFreqF8, maxFreqAF3, maxFreqAF4;
                //    double maxMag = 0;
                double alphaPowerO1 = 0, betaPowerO1 = 0;
                double alphaPowerF3 = 0, betaPowerF3 = 0;
                double alphaPowerF4 = 0, betaPowerF4 = 0;
                double alphaPowerF7 = 0, betaPowerF7 = 0;
                double alphaPowerF8 = 0, betaPowerF8 = 0;
                double alphaPowerAF3 = 0, betaPowerAF3 = 0;
                double alphaPowerAF4 = 0, betaPowerAF4 = 0;
                #endregion

                int sampleSize = 128;

                /*If one of the channel has sample size larger than the given value -
                 * all channel did. */

                if (O1List.Count >= sampleSize)
                {
                    #region compute  Alpha beta power
                    ft.computePower(O1List, sampleSize, out maxFreqO1, out alphaPowerO1, out betaPowerO1);
                    ft.computePower(F3List, sampleSize, out maxFreqF3, out alphaPowerF3, out betaPowerF3);
                    ft.computePower(F4List, sampleSize, out maxFreqF4, out alphaPowerF4, out betaPowerF4);
                    ft.computePower(F7List, sampleSize, out maxFreqF7, out alphaPowerF7, out betaPowerF7);
                    ft.computePower(F8List, sampleSize, out maxFreqF8, out alphaPowerF8, out betaPowerF8);
                    ft.computePower(AF3List, sampleSize, out maxFreqAF3, out alphaPowerAF3, out betaPowerAF3);
                    ft.computePower(AF4List, sampleSize, out maxFreqAF4, out alphaPowerAF4, out betaPowerAF4);
                    #endregion


                    BandPower bp = new BandPower()
                    {
                        alpha_O1  = alphaPowerO1, beta_O1 = betaPowerO1, dominantFreq_O1 = maxFreqO1,
                        alpha_F3  = alphaPowerF3, beta_F3 = betaPowerF3, alpha_F4 = alphaPowerF4, beta_F4 = betaPowerF4,
                        alpha_F7  = alphaPowerF7, beta_F7 = betaPowerF7, alpha_F8 = alphaPowerF8, beta_F8 = betaPowerF8,
                        alpha_AF3 = alphaPowerAF3, beta_AF3 = betaPowerAF3, alpha_AF4 = alphaPowerAF4, beta_AF4 = betaPowerAF4
                    };
                    PowerStorer.Add(bp);

                    #region comments out

                    /*
                     *
                     * // Compute Eye Open Avg Alpha & Beta
                     *
                     * //Compute Percent difference betweeen the the avgAlphaOpen  & current alpha power
                     * //if haven't detected Close eye
                     *
                     * if(closeEye ==false)
                     * {
                     *  if(PowerStorer.Count == 1) {avgAlphaOpen=alphaPower; avgBetaOpen = betaPower;}
                     *  else if (PowerStorer.Count >1)
                     *  {
                     *      if((avgAlphaOpen - alphaPower)/avgAlphaOpen <= 4) // anythreshold
                     *      {
                     *          for(int j=0; j< PowerStorer.Count;j++)
                     *          {
                     *          avgAlphaOpen += PowerStorer[j].alpha;
                     *          }
                     *          avgAlphaOpen = avgAlphaOpen / PowerStorer.Count;
                     *       }
                     *      else
                     *      {
                     *          closeEye = true;
                     *
                     *      }
                     *  }
                     * }
                     */

                    #endregion

                    if (PowerStorer.Count >= 2)
                    {
                        double avgAlphaPDifference = 0;
                        avgAlphaPDifference    = (alphaPowerO1 - PowerStorer[PowerStorer.Count - 2].alpha_O1) / PowerStorer[PowerStorer.Count - 2].alpha_O1;
                        textBox_AlphaDiff.Text = avgAlphaPDifference.ToString();

                        double avgBetaPDifference = (betaPowerO1 - PowerStorer[PowerStorer.Count - 2].beta_O1) / PowerStorer[PowerStorer.Count - 2].beta_O1;
                        textBox_BetaDiff.Text = avgBetaPDifference.ToString();
                    }



                    //Condition for Close / Open eyes trigger
                    //if close eye for 2 seconds frame already - reset CloseEye second

                    /*
                     * if (alphaPowerO1 >= 60 && alphaPowerO1 <= 100 && betaPowerO1 <= 30)
                     * {
                     *  CloseEyeTrigger = true;
                     * }
                     * else
                     * {
                     *  CloseEyeTrigger = false;
                     * }
                     *
                     */
                    #region command classification


                    bool trigger = nb.classify(alphaPowerO1, betaPowerO1);
                    if (trigger)
                    {
                        label11.Text = "Trigger on";
                        listBox1.Items.Add("Trigger On");

                        triggerOnCount++;
                    }
                    else if (!trigger)
                    {
                        label11.Text = "Trigger off";
                        listBox1.Items.Add("Trigger off");

                        triggerOnCount = 0;
                    }

                    if (trigger && command == 1 && (triggerOnCount > 8 || triggerOnCount == 1))
                    {
                        command = 2;
                        listBox1.Items.Add("command: " + command.ToString());
                    }
                    else if (trigger && command == 2 && (triggerOnCount > 8 || triggerOnCount == 1))
                    {
                        command = 1;
                        listBox1.Items.Add("command: " + command.ToString());
                    }

                    #endregion

                    #region update TextBox
                    textBox_freq.Text    = maxFreqO1.ToString();
                    textBox_alphaO1.Text = alphaPowerO1.ToString();
                    textBox_BetaO1.Text  = betaPowerO1.ToString();

                    textBox_alphaF3.Text = alphaPowerF3.ToString();
                    textBox_BetaF3.Text  = betaPowerF3.ToString();

                    textBox_alphaF4.Text = alphaPowerF4.ToString();
                    textBox_BetaF4.Text  = betaPowerF4.ToString();

                    textBox_alphaF7.Text = alphaPowerF7.ToString();
                    textBox_BetaF7.Text  = betaPowerF7.ToString();

                    textBox_alphaF8.Text = alphaPowerF8.ToString();
                    textBox_BetaF8.Text  = betaPowerF8.ToString();

                    textBox_alphaAF3.Text = alphaPowerAF3.ToString();
                    textBox_BetaAF3.Text  = betaPowerAF3.ToString();

                    textBox_alphaAF4.Text = alphaPowerAF4.ToString();
                    textBox_BetaAF4.Text  = betaPowerAF4.ToString();
                    #endregion

                    #region update Listbox
                    //list box
                    listBox1.Items.Add("O1 Alpha: " + alphaPowerO1.ToString());
                    listBox1.Items.Add("O1 Beta:" + betaPowerO1.ToString());
                    listBox1.SelectedIndex = listBox1.Items.Count - 1;
                    //listBox1.Items.Add();
                    listBox1.SelectedIndex = -1;
                    #endregion
                    // O1List.RemoveRange(0, 64);
                }
            }
        }