//Splits the samples up into chunks of 38 for about 300 ms //Study has 80% overlap of time windows, so 7-8 are thrown out for us static FFT_Channel[,] CreateFFTData(double[,] RawData) { FFT_Channel[,] Result = new FFT_Channel[16, (RawData.GetUpperBound(1) + 1) / 16]; for (int i = 0; i < (RawData.GetUpperBound(1) + 1) / chunk_size; i++) { int first = i * chunk_size; var x = SampleRange(first, first + chunk_size - 1, RawData); var channels = SelectFFT_Sample(x); for (int j = 0; j < 16; j++) { Result[j, i] = channels[j]; } } return(Result); }
static FFT_Channel[] SelectFFT_Sample(double[,] RawData) { var fft = FFTData(RawData); FFT_Channel[] result = new FFT_Channel[fft.Length]; for (int i = 0; i < fft.Length; i++) { result[i].Delta = fft[i][FFTIndex(Delta, 125, fft[i].Length)]; result[i].Theta = fft[i][FFTIndex(Theta, 125, fft[i].Length)]; result[i].Alpha = fft[i][FFTIndex(Alpha, 125, fft[i].Length)]; result[i].SMR_Beta = fft[i][FFTIndex(SMR_Beta, 125, fft[i].Length)]; result[i].MID_Beta = fft[i][FFTIndex(MID_Beta, 125, fft[i].Length)]; result[i].HI_Beta = fft[i][FFTIndex(HI_Beta, 125, fft[i].Length)]; } return(result); }