// 64 channel sample with padCount zeros padded right public List <double> GetPaddedChannelSample(int sampleCount, int padCount) { int numSamplesToGet = (sampleCount - padCount); int curIDX = _sampleIDX; if (curIDX + numSamplesToGet >= _samples.Count) { numSamplesToGet = _samples.Count - curIDX; if (numSamplesToGet <= 0) { // Roll over to the beginning _sampleIDX = 0; return(GetPaddedChannelSample(sampleCount, padCount)); } } _sampleIDX += numSamplesToGet; _sliceSignal = _samples.GetRange(curIDX, numSamplesToGet); List <double> paddedSignal = new List <double>(sampleCount); paddedSignal.AddRange(_sliceSignal); // Pad int padLen = (sampleCount - numSamplesToGet); for (int cnt = 0; cnt < padLen; cnt++) { paddedSignal.Add(0.0); } IDFT ff_transform = new ComplexFastFourierTransform(); IDFT cdf_tranform = new CorrelationFourierTransform(); //_frequencyDomain = DFT.CorrelationTransform(paddedSignal); _frequencyDomain = ff_transform.Transform(paddedSignal); return(_sliceSignal); }
public List <double> GetNextSamplesForTimeSlice(double milliseconds) { int numSamplesToGet = (int)Math.Floor((milliseconds / 1000) * _sampleRate); int curIDX = _sampleIDX; if (curIDX + numSamplesToGet >= _samples.Count) { numSamplesToGet = _samples.Count - curIDX - 1; if (numSamplesToGet <= 0) { // Roll over to the beginning _sampleIDX = 0; return(GetNextSamplesForTimeSlice(milliseconds)); } } _sampleIDX += numSamplesToGet; _sliceSignal = _samples.GetRange(curIDX, numSamplesToGet); //_frequencyDomain = DFT.CorrelationTransform(_sliceSignal); //IDFT transform = new FastFourierTransform(); IDFT transform = new CorrelationFourierTransform(); _frequencyDomain = transform.Transform(_sliceSignal); return(_sliceSignal); }