public static double[] GetWindowValues(FFTSizeConstants windowSize, FFTWindowConstants windowType) { double[] values = new double[(int)windowSize]; for (int i = 0; i < (int)windowSize; i++) { values[i] = ApplyWindow(i, windowSize, windowType); } return(values); }
public static double GetWindowSum(FFTSizeConstants windowSize, FFTWindowConstants windowType) { double sum = 0; for (int i = 0; i < (int)windowSize; i++) { sum += ApplyWindow(i, windowSize, windowType); } return(sum); }
public static double ApplyWindow(int i, FFTSizeConstants windowSize, FFTWindowConstants windowType) { int w = (int)windowSize - 1; switch (windowType) { case FFTWindowConstants.None: return(1.0); case FFTWindowConstants.Triangle: return(1.0 - Math.Abs(1.0 - ((2 * i) / w))); case FFTWindowConstants.Hanning: return(0.5 * (1.0 - Math.Cos(PI2 * i / w))); case FFTWindowConstants.Hamming: return(0.54 - 0.46 * Math.Cos(PI2 * i / w)); case FFTWindowConstants.Welch: return(1.0 - (i - 0.5 * (w - 1)) / (0.5 * Math.Pow((w + 1), 2))); case FFTWindowConstants.Gaussian: //return Math.E ^ (-6.25 * PI * i ^ 2 / w ^ 2) return(Math.Pow(Math.E, (-6.25 * Math.PI * i * i / (w * w)))); case FFTWindowConstants.Blackman: return(0.42 - 0.5 * Math.Cos(PI2 * i / w) + 0.08 * Math.Cos(2 * PI2 * i / w)); case FFTWindowConstants.Parzen: return(1.0 - Math.Abs((i - 0.5 * w) / (0.5 * (w + 1)))); case FFTWindowConstants.Bartlett: return(1.0 - Math.Abs(i) / w); case FFTWindowConstants.Connes: //return (1.0 - i ^ 2 / w ^ 2) ^ 2 return(Math.Pow((1.0 - i * i / (w * w)), 2)); case FFTWindowConstants.KaiserBessel: if (i >= 0 && i <= w / 2) { return(Bessel((w / 2) * (Math.Pow(Math.Sqrt(1 - 2 * i / w), 2))) / Bessel(w / 2)); } else { return(0.0); } case FFTWindowConstants.BlackmanHarris: return(0.35875 - 0.48829 * Math.Cos(PI2 * i / w) + 0.14128 * Math.Cos(2 * PI2 * i / w) - 0.01168 * Math.Cos(3 * Math.PI * i / w)); case FFTWindowConstants.Nuttall: return(0.355768 - 0.487396 * Math.Cos(PI2 * i) / w + 0.144232 * Math.Cos(2 * PI2 * i) / w - 0.012604 * Math.Cos(3 * PI2 * i) / w); case FFTWindowConstants.BlackmanNuttall: return(0.3635819 - 0.4891775 * Math.Cos(PI2 * i) / w + 0.1365995 * Math.Cos(2 * PI2 * i) / w - 0.0106411 * Math.Cos(3 * PI2 * i) / w); case FFTWindowConstants.FlatTop: return(1.0 - 1.93 * Math.Cos(PI2 * i) / w + 1.29 * Math.Cos(2 * PI2 * i) / w - 0.388 * Math.Cos(3 * PI2 * i) / w + 0.032 * Math.Cos(4 * PI2 * i) / w); } return(0.0); }