private void ProcessFFT() { double width = RectangleUI.X1 - RectangleUI.X0; SelectedData.Clear(); double[] func = FFTHelper.WindowFunc(SelectedWindowFunc, (int)width); int px = -1; int i = 0; Line.Points.Where(point => point.X >= RectangleUI.X0 && point.X <= RectangleUI.X1).ToList().ForEach(p => { if (px == -1) { px = (int)p.X; } double pY = p.Y * func[i]; SelectedData.Add(new Complex(pY, 0)); if (i < width - 1) { i++; } }); SelectDataChanged(SelectedData, px); }
private void IFFT(int start) { int i = start; foreach (var p in FFTHelper.IFFT(FFTcom.ToArray())) { Line.Points[i] = new DataPoint(i, p); i++; } Model.InvalidatePlot(true); }
public static double[] WindowFunc(string windowName, int windowSize) { switch (windowName) { case "Прямоугольное Окно": return(RectangleWindow(windowSize)); case "Окно Хамминга": return(Hamming(windowSize)); case "Окно Ханна": return(Hann(windowSize)); case "Окно Блэкмэн-Харриса": return(BlackmannHarris(windowSize)); case "Синус-Окно": return(SinWindow(windowSize)); case "Окно Барлетта": return(BartlettWindow(windowSize)); case "Окно Барлетта-Ханна": return(BartlettHannWindow(windowSize)); case "Окно Блэкмэна": return(Blackmann(windowSize)); case "Окно Наталла": return(NuttallWindow(windowSize)); case "Окно Блэкмэн-Наталла": return(BlackmanNuttallWindow(windowSize)); case "Окно с плоской вершиной": return(FlatTopWindow(windowSize)); default: return(FFTHelper.RectangleWindow(windowSize)); } }