Beispiel #1
0
 /// <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;
     }
 }
Beispiel #2
0
        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);
        }