コード例 #1
0
ファイル: FftTest.cs プロジェクト: FrigoCoder/Lappi
 public void Simple_example()
 {
     Complex[] time = Arrays.New <Complex>(8, t => t == 1 ? 1 : 0);
     Complex[] freq =
     {
         new Complex(0.125,      0), new Complex(0.088, -0.088), new Complex(0,     -0.125), new Complex(-0.088, -0.088), new Complex(-0.125, 0),
         new Complex(-0.088, 0.088), new Complex(0,      0.125), new Complex(0.088, 0.088)
     };
     Assert.That(fft.Forward(time), Is.EqualTo(freq).Using(Complex.Within(1E-6)));
 }
        private static Tuple <double[], double[]> Calculate(IList <double> data, int window, int step, int startF, int endF, Action <double> progress)
        {
            var res   = new double[endF - startF];
            var res2  = new double[endF - startF];
            int count = 0;

            var n = 1 + (data.Count - window) / step;

            for (int i = 0; i < data.Count - window; i += step)
            {
                var w = new double[window];
                for (int j = 0; j < window; j++)
                {
                    w[j] = data[i + j];
                }

                var cur = Fft.Forward(w);

                for (int q = startF; q < endF; q++)
                {
                    var mag = cur[q].Magnitude;
                    res[q - startF]  += mag;
                    res2[q - startF] += mag * mag;
                }

                count++;
                progress((double)count / n * 100.0);
            }

            for (int i = 0; i < res.Length; i++)
            {
                res[i]  /= count;
                res2[i] /= count;
            }

            return(new Tuple <double[], double[]>(res, res2));
        }