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); }
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]); }
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); }