Beispiel #1
0
        private void Process2(int start, int end)
        {
            //Сдвиг окна (shift 500 - width 512)
            int shift = 256;
            int width = 1024;

            //Диапазон частот (256 - до 22100Hz, 128 - до 11050Hz)
            int freq_range = 256;

            double[] func = FFTHelper.WindowFunc(SelectedWindowFunc, width);

            Bitmap btm = new Bitmap((end - start) / shift, 256);

            System.Drawing.Color[] freq = new System.Drawing.Color[freq_range];
            int btm_i = 0;

            FFTLine.Points.Clear();

            double[] result = new double[width];
            for (int x = 0; x < SelectedData.Count() - width; x += shift)
            {
                int i  = 0;
                int ii = 0;
                if (x + width < SelectedData.Count() - 1)
                {
                    FFT2Helper.fft(SelectedData.GetRange(x, width).ToArray()).ToList().ForEach(p =>
                    {
                        p            = p.Magnitude * func[ii];
                        int Db       = (int)(GetYPosLog(p) + 5) * 8;
                        int intense1 = Db <= 0 ? 0 : Db;

                        intense1 = intense1 > 255 ? 255 : intense1;
                        // intense1 = Math.Abs(intense1 - 255) ;
                        if (i < freq.Count())
                        {
                            freq[i] = System.Drawing.Color.FromArgb(255, intense1, intense1, 50);
                        }
                        i++;
                        ii++;
                    });


                    for (int yi = freq.Count() - 1; yi > 0; yi--)
                    {
                        btm.SetPixel(btm_i, yi, freq[Math.Abs(yi - (freq.Count() - 1))]);
                    }
                }
                btm_i++;
            }

            Spectrogramm = BitmapToImage(btm);


            //for (int i = 0; i < 2048; i++)
            //{
            //    temp[i].Magnitude = (temp[i].Magnitude / 2048);
            //    // temp[i].Magnitude = temp[i].Rep > cons ? (temp[i].Magnitude / temp[i].Rep) : 0;
            //    FFTLine.Points.Add(new DataPoint(i, temp[i].Magnitude));
            //}

            //FFTModel.InvalidatePlot(true);
        }