public List <double[]> Decomposes(double[] data)
        {
            int length = data.Length;

            double[] dataCombinedDeltaTheta = new double[length]; //delta = 1-3 Hz, theta = 4-7 Hz
            double[] dataAlpha = new double[length];              //alpha = 8-13 Hz
            double[] dataBeta  = new double[length];              //beta = 14-29 Hz
            double[] dataGamma = new double[length];              //gamma = 30-50 Hz

            LTISystemChain chainCombinedDeltaTheta = Filter.ButterworthBandPass(0.01, 0.07, 4);
            LTISystemChain chainAlpha = Filter.ButterworthBandPass(0.08, 0.13, 4);
            LTISystemChain chainBeta  = Filter.ButterworthBandPass(0.14, 0.29, 4);
            LTISystemChain chainGamma = Filter.ButterworthBandPass(0.30, 0.50, 4);

            for (int i = 0; i < length; i++)
            {
                //#region 1. ButterworthBandPass
                dataCombinedDeltaTheta[i] = chainCombinedDeltaTheta[data[i]];
                dataAlpha[i] = chainAlpha[data[i]];
                dataBeta[i]  = chainBeta[data[i]];
                dataGamma[i] = chainGamma[data[i]];
                //#endregion
            }
            List <double[]> result = new List <double[]>();

            result.Add(dataCombinedDeltaTheta);
            result.Add(dataAlpha);
            result.Add(dataBeta);
            result.Add(dataGamma);

            return(result);
        }
Exemple #2
0
        public void DoWork(ref double[] data)
        {
            for (int i = 0; i < data.Length; i++)
            {
                #region 1. ButterworthBandPass
                LTISystemChain chain = Filter.ButterworthBandPass(0.29, 0.40, 4);
                data[i] = chain[data[i]];
                #endregion

                #region 2. Averaging
                if (windowNumbers.Count < windowLength) //fill window
                {
                    windowNumbers.Add(data[i]);
                }
                else
                {
                    windowNumbers.Add(data[i]);
                    double sum = 0;
                    foreach (double d in windowNumbers)
                    {
                        sum += d;
                    }
                    data[i] = sum / windowNumbers.Count;

                    windowNumbers.RemoveAt(0);
                }
                #endregion
            }
        }