public static void Windowing(double[] data, DataWindowType type) { double[] window = GetDataWindow(type, data.Length); for (int i = data.Length; --i >= 0;) { data[i] *= window[i]; } }
public static double[] GetDataWindow(DataWindowType type, int size) { double[] Table = new double[size]; Table = new double[size]; double h = 2 * Math.PI / (size - 1); switch (type) { case DataWindowType.Box: for (int i = size; --i >= 0;) { Table[i] = 1; } break; case DataWindowType.Hanning: for (int i = size; --i >= 0;) { Table[i] = 0.50 - 0.50 * Math.Cos(h * i); } break; case DataWindowType.Hamming: for (int i = size; --i >= 0;) { Table[i] = 0.54 - 0.46 * Math.Cos(h * i); } break; case DataWindowType.Blackman: for (int i = size; --i >= 0;) { Table[i] = 0.42 - 0.50 * Math.Cos(h * i) + 0.08 * Math.Cos(2 * h * i); } break; case DataWindowType.Parzen: for (int i = size; --i >= 0;) { Table[i] = 1.0 - Math.Abs((i * 2 - (size - 1)) / (double)(size + 1)); } break; case DataWindowType.Welch: for (int i = size; --i >= 0;) { Table[i] = 1.0 - Mt.Sq((i * 2 - (size - 1)) / (double)(size + 1)); } break; } //double c = Math.Sqrt(n / Table.Sum(x => Sq(x))); //for (int i = n; --i >= 0; ) Table[i] *= c; return(Table); }