Ejemplo n.º 1
0
 private void rekam(string uji)
 {
     _ujikan = true;
     do
     {
         var epoching = new List <float[]>();
         float[,] buffer = new float[_chunks, _kanal];
         double[] timestamps = new double[_chunks];
         updateAktivitas("Rekam " + arah);
         inlet = new liblsl.StreamInlet(results[0]);
         do
         {
             int num = inlet.pull_chunk(buffer, timestamps);
             for (int s = 0; s < num; s++)
             {
                 var d = new float[_kanal];
                 //Parallel.For(0, _kanal, i =>
                 //{
                 for (int i = 0; i < _kanal; i++)
                 {
                     d[i] = buffer[s, i];
                 }
                 //});
                 epoching.Add(d);
                 if (epoching.Count == _epocSizeTesting)
                 {
                     break;
                 }
             }
         } while (epoching.Count < _epocSizeTesting);
         var pecah      = pecahSinyal(epoching);
         var preprocess = preprocessSignal(pecah);
         var dft        = featureExtraction(preprocess);
         var feature    = dftToOneRowFeature(dft);
         var f          = new double[1, feature.Length];
         for (int j = 0; j < 1; j++)
         {
             for (int k = 0; k < f.GetLength(1); k++)
             {
                 f[j, k] = feature[k];
             }
         }
         int kelas = (int)Math.Round(enn.testing(f, _modelWeight, _modelbetaHatt, Activation.SigmoidBiner)[0]);
         Console.WriteLine(kelas);
         Console.Beep();
         updateArah(kelas);
     } while (_ujikan);
 }
Ejemplo n.º 2
0
        static void MainProsesAuto(int iterasi, int i, int j, int k, int l, int m, int n,
                                   int[] PersenData, int[][] KombinasiChannels, Activation[] FungsiAktivasi, int[] JumlahNeuron, double[] NilaiRandomAlpha, double[,] trainingFeature, double[] trainingKelas,
                                   double[,] testingFeature, double[] testingKelas, int total, string date, int[] kelasNonDupe)
        {
            string name = iterasi + "_" + "ke-" + n + ", percentTraining " + PersenData[i] + ", KombinasiChannels " + string.Join(", ", KombinasiChannels[j]) + ", Neuron-" + JumlahNeuron[l] + ", Alpha-" + NilaiRandomAlpha[m] + ", " + DateTime.Now.ToString("hh_mm_ss");

            Console.WriteLine(name);
            Network net = new Network(JumlahNeuron[l], -NilaiRandomAlpha[m], NilaiRandomAlpha[m]);

            enn = new ExtremeNeuralNetwork(net, FungsiAktivasi[k]);
            var kelas2DTraining = enn.ConvertTo2DArrayKelas(kelasNonDupe, trainingKelas);
            var kelas2DTesting  = enn.ConvertTo2DArrayKelas(kelasNonDupe, testingKelas);
            var accTrainingData = enn.teach(trainingFeature, kelas2DTraining);
            var YHattTraining   = enn.YHattTraining2D;
            var forecast        = enn.testing(testingFeature, enn.Weight, enn.BetaHatt2D, FungsiAktivasi[k]);
            var accTesting      = enn.Accuration(forecast, kelas2DTesting);

            //var errorTrainingData = enn.teach(trainingFeature, trainingKelas);
            //var accurationTrainingData = enn.Acc;
            //var YHattTraining = enn.YHattTraining;

            saveFile(enn.Weight, "weight", name);
            saveFile(enn.BetaHatt2D, "betaHatt", name);

            saveFile(YHattTraining, kelas2DTraining, "comparasionTraining", name);

            saveFile(forecast, kelas2DTesting, "comparasionTesting", name);
            //var forecast = enn.testing(testingFeature, FungsiAktivasi[k]);
            //var errorTestingData = enn.MAPEEval(forecast, testingKelas);
            //var accurationTestingData = enn.Accuration(forecast, testingKelas);
            //saveFile(YHattTraining, trainingKelas, "comparasionTraining", name);
            //saveFile(forecast, testingKelas, "comparasionTesting", name);

            var rows = new string[] { iterasi + ";" + n + ";" + PersenData[i] + ";" + string.Join(", ", KombinasiChannels[j]) + ";" + JumlahNeuron[l] + ";" + NilaiRandomAlpha[m] + ";" + accTrainingData + ";" + accTesting + "\n" };

            Console.WriteLine("Iterasi Ke-" + iterasi + "; Percobaan Ke-" + n + "; PersenDataTraining : " + PersenData[i] + "; Kombinasi Channels" + string.Join(", ", KombinasiChannels[j]) + "; Jumlah Neuron " + JumlahNeuron[l] + ";" + NilaiRandomAlpha[m] + "; Akurasi Kepada Training Data " + accTrainingData + "; Akurasi Kepada Testing Data " + accTesting);
            File.AppendAllText(date + ".csv", rows[0]);
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            var Min        = Array.ConvertAll(File.ReadAllLines("Min.csv")[0].Split(';'), double.Parse);
            var Max        = Array.ConvertAll(File.ReadAllLines("Max.csv")[0].Split(';'), double.Parse);
            var fileWeight = File.ReadAllLines("model.weight");
            var betaHatt   = Array.ConvertAll(File.ReadAllLines("model.betaHatt"), double.Parse);
            var weight     = new double[fileWeight.Length, fileWeight[0].Split(';').Count()];

            for (int i = 0; i < fileWeight.Length; i++)
            {
                var temp = Array.ConvertAll(fileWeight[i].Split(';'), double.Parse);
                for (int j = 0; j < temp.Length; j++)
                {
                    weight[i, j] = temp[j];
                }
            }
            do
            {
                results = liblsl.resolve_stream("type", "EEG", 0, 5);
                if (results.Length != 0)
                {
                    Console.WriteLine("Menghubungkan Oke");
                    inlet = new liblsl.StreamInlet(results[0]);
                    Console.WriteLine("Nama Perangkat\t\t: " + inlet.info().name() + "\n" +
                                      "Nomor UID Perangkat\t: " + inlet.info().uid() + "\n" +
                                      "Versi Perangkat\t\t: " + inlet.info().version() + "\n" +
                                      "Sumber Arus EEG\t\t: " + inlet.info().source_id() + "\n" +
                                      "Jumlah Kanal\t\t: " + inlet.info().channel_count() + " Kanal\n" +
                                      "Sampling rate\t\t: " + inlet.info().nominal_srate() + "\n" +
                                      "Bentuk nilai Kanal\t\t: " + inlet.info().channel_format() + "\n");
                    _kanal = inlet.info().channel_count();
                }
                else
                {
                    Console.WriteLine("Tidak ditemukan arus EEG dari aplikasi BlueMuse atau perangkat EEG tidak terhubung ke komputer! Check kembali");
                }
            } while (results.Length == 0);
            Console.WriteLine("==============================================================");
            Console.WriteLine("=========================Mulai Stream=========================");
            do
            {
                enn = new ExtremeNeuralNetwork();
                var epoching = new List <float[]>();
                float[,] buffer = new float[_chunks, _kanal];
                double[] timestamps = new double[_chunks];
                inlet = new liblsl.StreamInlet(results[0]);
                Stopwatch watch = new Stopwatch();
                watch.Start();
                do
                {
                    int num = inlet.pull_chunk(buffer, timestamps);
                    for (int s = 0; s < num; s++)
                    {
                        var d = new float[_kanal];
                        for (int i = 0; i < _kanal; i++)
                        {
                            d[i] = buffer[s, i];
                        }
                        epoching.Add(d);
                        if (epoching.Count == _epocSizeTesting)
                        {
                            break;
                        }
                    }
                } while (epoching.Count < _epocSizeTesting);
                Console.WriteLine(watch.ElapsedMilliseconds + "ms");
                watch.Stop();
                var pecah      = pecahSinyal(epoching);
                var preprocess = preprocessSignal(pecah);
                var dft        = featureExtraction(preprocess).ToArray();
                var feature    = dftToOneRowFeature(dft);
                var norm       = new double[1, feature.Length];
                for (int s = 0; s < feature.Length; s++)
                {
                    norm[0, s] = Normalisasi(feature[s], Min[s], Max[s]);
                }
                var kelas    = enn.testing(norm, weight, betaHatt, Activation.SigmoidBiner);
                var keyboard = new Keyboard();
                switch (Convert.ToInt16(Math.Round(kelas[0])))
                {
                case 1:
                    Console.WriteLine("Kiri");
                    for (int loop = 0; loop < 2; loop++)
                    {
                        keyboard.Send(Keyboard.ScanCodeShort.KEY_A);
                        Thread.Sleep(500);
                    }
                    break;

                case 2:
                    Console.WriteLine("Kanan");
                    for (int loop = 0; loop < 2; loop++)
                    {
                        keyboard.Send(Keyboard.ScanCodeShort.KEY_D);
                        Thread.Sleep(500);
                    }
                    break;

                default:
                    Console.WriteLine("Bukan Keduanya");
                    keyboard.Send(Keyboard.ScanCodeShort.KEY_W); break;
                }
            } while (true);
        }