コード例 #1
0
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (sender is SerialPort port)
            {
                byte[] buffer = new byte[port.BytesToRead];
                port.Read(buffer, 0, buffer.Length);
                var time = _dataAccessFacade.GetSceneInUseAccess().GetLocation();
                if (!time.HasValue)
                {
                    return;
                }
                foreach (var bufferData in buffer)
                {
                    double[] data = _interpretStream.interpretBinaryStream(bufferData);

                    if (!ReferenceEquals(null, data))
                    {
                        if (data.Length >= 9)
                        {
                            double[] dataToGraph = new double[9];
                            dataToGraph[0] = data[0];
                            var eegArgs = new EegFrameArrivedEventArgs()
                            {
                                Time     = time.Value,
                                Person   = _person,
                                Channels = new List <EegChannel>()
                            };
                            for (int j = 1; j < 9; j++)
                            {
                                double value = _filter.FiltersSelect((FilterType)(OpenBCISettings.Instance.Filter.Value),
                                                                     (NotchType)(OpenBCISettings.Instance.Notch.Value), data[j], j - 1);
                                dataToGraph[j] = value;
                                eegArgs.Channels.Add(new EegChannel()
                                {
                                    Filter   = FilterType.None,
                                    Notch    = (NotchType)OpenBCISettings.Instance.Notch.Value,
                                    Position = _positions[j - 1] ?? "",
                                    Value    = value
                                });
                            }
                            GraphTab.Enqueue(dataToGraph);
                            OnEegFrameArrived(eegArgs);
                        }
                        if (data.Length == 12 && data[9] != 0 && data[10] != 0 && data[11] != 0)
                        {
                            var accArgs = new AccelerometerFrameArrivedEventArgs()
                            {
                                Place = "Head",
                                // Time = ,
                                XAxis = data[9],
                                YAxis = data[10],
                                ZAxis = data[11]
                            };
                            OnAccelerometerArrived(accArgs);
                        }
                        var actualTime = _dataAccessFacade.GetSceneInUseAccess().GetLocation();
                        if (actualTime.HasValue)
                        {
                            _filemanage?.WriteFile(actualTime.Value, data);
                        }
                    }
                }
            }
        }
コード例 #2
0
 private void OnEegFrameArrived(EegFrameArrivedEventArgs e)
 {
     EegFrameArrived?.Invoke(this, e);
 }
コード例 #3
0
ファイル: EEGReceiver.cs プロジェクト: leikelen-team/Leikelen
        public void DataReceiver(object sender, EegFrameArrivedEventArgs e)
        {
            //if samplingHz is 128, then alternates if the signal is processed or no
            if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256)
            {
                _signalGet = true;
            }
            else if (EEGEmoProc2ChSettings.Instance.SamplingHz == 128)
            {
                _signalGet = !_signalGet;
            }


            double[] values         = new double[2];
            var      channelCounter = 0;

            foreach (var channel in e.Channels)
            {
                if (channel.Position.Equals("F3"))
                {
                    if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256)
                    {
                        values[0] = channel.Value;
                    }
                    else if (_signalGet)
                    {
                        values[0] = (lastF3 + channel.Value) / 2;
                    }
                    else
                    {
                        lastF3 = channel.Value;
                    }
                    channelCounter++;
                }
                if (channel.Position.Equals("C4"))
                {
                    if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256)
                    {
                        values[1] = channel.Value;
                    }
                    else if (_signalGet)
                    {
                        values[1] = (lastC4 + channel.Value) / 2;
                    }
                    else
                    {
                        lastC4 = channel.Value;
                    }
                    channelCounter++;
                }
            }
            if (channelCounter == 2)
            {
                _signaList.Add(values);
            }

            //if the window ends, sends the signal to process
            var sceneLocation = e.Time;

            if (_signaList.Count >= 0 &&
                _lastSecond != (int)sceneLocation.TotalSeconds &&
                (int)sceneLocation.TotalSeconds % 9 == 0)
            {
                _lastSecond = (int)sceneLocation.TotalSeconds;

                try
                {
                    var tag = LearningModel.Classify(_signaList);
                    Console.WriteLine(tag.ToString());
                    _dataAccessFacade.GetEventAccess().Add(e.Person, "Emotion", tag.ToString(), e.Time, 1);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("error: " + ex.Message);
                }
                _signaList = new List <double[]>();
            }
        }