public void computePowerStorer() { #region declared temp variable int maxFreqO1 = 0, maxFreqF3, maxFreqF4, maxFreqF7, maxFreqF8, maxFreqAF3, maxFreqAF4; int maxFreqFC5 = 0, maxFreqFC6, maxFreqP7, maxFreqP8, maxFreqT7, maxFreqT8; // 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; double alphaPowerFC5 = 0, betaPowerFC5 = 0; double alphaPowerFC6 = 0, betaPowerFC6 = 0; double alphaPowerP7 = 0, betaPowerP7 = 0; double alphaPowerP8 = 0, betaPowerP8 = 0; double alphaPowerT7 = 0, betaPowerT7 = 0; double alphaPowerT8 = 0, betaPowerT8 = 0; #endregion int sampleSize = 128; int index_eye = 0; //iterate EEG list - compute EEG data until the EEG data is left with less than 128 while (O1List.Count >= 128) { 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); ft.computePower(FC5List, sampleSize, out maxFreqFC5, out alphaPowerFC5, out betaPowerFC5); ft.computePower(FC6List, sampleSize, out maxFreqFC6, out alphaPowerFC6, out betaPowerFC6); ft.computePower(P7List, sampleSize, out maxFreqP7, out alphaPowerP7, out betaPowerP7); ft.computePower(P8List, sampleSize, out maxFreqP8, out alphaPowerP8, out betaPowerP8); ft.computePower(T7List, sampleSize, out maxFreqT7, out alphaPowerT7, out betaPowerT7); ft.computePower(T8List, sampleSize, out maxFreqT8, out alphaPowerT8, out betaPowerT8); 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, alpha_FC5 = alphaPowerFC5, beta_FC5 = betaPowerFC5, alpha_FC6 = alphaPowerFC6, beta_FC6 = betaPowerFC6, alpha_P7 = alphaPowerP7, beta_P7 = betaPowerP7, alpha_P8 = alphaPowerP8, beta_P8 = betaPowerP8, alpha_T7 = alphaPowerT7, beta_T7 = betaPowerT7, alpha_T8 = alphaPowerT8, beta_T8 = betaPowerT8, eyeOpen = openEye[index_eye] }; PowerStorer.Add(bp); index_eye += 1; } clearAllList(); }
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); } } }