/// <summary> /// Cirular indexer using zmod /// </summary> public T this[int index] { get { return(FArray[AudioUtils.Zmod(index, FArray.Length)]); } set { FArray[AudioUtils.Zmod(index, FArray.Length)] = value; } }
public override void Pull(int count) { var real = FFFTDataReal.Value; var imag = FFFTDataImag.Value; var copyCount = Math.Min(count / 2, Math.Max(real.Length, imag.Length)); var j = 0; if (real.Length > imag.Length) { for (int i = 0; i < copyCount; i++) { RealImagData[j++] = real[i]; RealImagData[j++] = imag[AudioUtils.Zmod(i, imag.Length)]; } } else if (real.Length == imag.Length) { for (int i = 0; i < copyCount; i++) { RealImagData[j++] = real[i]; RealImagData[j++] = imag[i]; } } else { for (int i = 0; i < copyCount; i++) { RealImagData[j++] = real[AudioUtils.Zmod(i, real.Length)]; RealImagData[j++] = imag[i]; } } if (copyCount < count / 2) { for (int i = copyCount; i < count / 2; i++) { RealImagData[j++] = 0; RealImagData[j++] = 0; } } FFFT.RealFFT(RealImagData, false); //RealImagData[0] = RealImagData[1]; TimeDomain.WriteDoubleWindowed(RealImagData, Window, 0, count, Gain); Write(TimeDomain, 0, count); }