Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
            }
        }