/// <summary>
        /// 频域修正
        /// </summary>
        /// <param name="data1"></param>
        /// <param name="begin1"></param>
        /// <param name="end1"></param>
        /// <param name="data2"></param>
        /// <param name="begin2"></param>
        /// <param name="end2"></param>
        /// <returns></returns>
        public static int[] MiddleFilterCorrection(int[] data1, int begin1, int end1, int[] data2, int begin2, int end2)
        {
            int[] res = new int[end1 - begin1];

            int k  = Math.Max(end1 - begin1, end2 - begin2);
            int dx = FToneAnalysis.getmin2x(k);

            //double dl = (double)NNAnalysis.samplingRate / dx;

            double[] fftdata1     = new double[dx];
            double[] fftdataimag1 = new double[dx];
            Array.Copy(data1, begin1, fftdata1, 0, Math.Min(k, end1 - begin1));
            TWFFT.FFT(fftdata1, fftdataimag1);

            double[] fftdata2     = new double[dx];
            double[] fftdataimag2 = new double[dx];
            Array.Copy(data2, begin2, fftdata2, 0, Math.Min(k, end2 - begin2));
            TWFFT.FFT(fftdata2, fftdataimag2);

            int num = 15;

            double[] lineori1 = new double[dx];
            double[] lineori2 = new double[dx];
            for (int i = 0; i < dx; i++)
            {
                lineori1[i] = Math.Abs(fftdata1[i]);
                lineori2[i] = Math.Abs(fftdata2[i]);
                //lineori1[i] = Math.Sqrt(Math.Pow(fftdata1[i], 2) + Math.Pow(fftdataimag1[i], 2));
                //lineori2[i] = Math.Sqrt(Math.Pow(fftdata2[i], 2) + Math.Pow(fftdataimag2[i], 2));
            }
            double[] line1 = FToneAnalysis.MiddleFilter(lineori1, num);
            //double[] linei1 = FToneAnalysis.MiddleFilter(fftdataimag1, num);
            double[] line2 = FToneAnalysis.MiddleFilter(lineori2, num);
            //double[] linei2 = FToneAnalysis.MiddleFilter(fftdataimag2, num);
            for (int i = 0; i < line1.Length; i++)
            {
                //Complex c1 = new Complex(fftdata1[i], fftdataimag1[i]);
                //Complex cl1 = new Complex(line1[i], linei1[i]);
                //Complex cl2 = new Complex(line2[i], linei2[i]);
                //c1 = c1.Multiply(cl1.Division(cl2));
                fftdata1[i] = (int)((double)fftdata1[i] * (line2[i] / line1[i]));
                //fftdataimag1[i] += (int)(linei2[i]-linei1[i]);
            }
            for (int i = dx / 4; i < dx / 2; i++)
            {
                if (line2[i] < line1[i])
                {
                    fftdata1[i]      = fftdata2[i];
                    fftdata1[dx - i] = fftdata2[dx - i];
                }
            }

            TWFFT.IFFT(fftdata1, fftdataimag1);
            for (int i = 0; i < res.Length; i++)
            {
                res[i] = (int)fftdata1[i];
            }

            return(res);
        }
        /// <summary>
        /// 用倒谱获得频谱包络
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private static double[] GetEnvelopeFD(double[] data)
        {
            int n = data.Length;

            double[] data1  = new double[n];
            double[] data1i = new double[n];
            for (int i = 0; i < n; i++)
            {
                data1[i] = Math.Log(data[i]);
            }
            for (int i = 0; i < n; i++)
            {
                data1i[i] = 0;
            }
            TWFFT.FFT(data1, data1i);
            double therehold = 100;

            double[] data2  = new double[n];
            double[] data2i = new double[n];
            // 低通滤波
            for (int i = 0; i < n; i++)
            {
                if (i < therehold || i > n - therehold)
                {
                    data2[i]  = data1[i];
                    data2i[i] = data1i[i];
                }
                else
                {
                    data2[i]  = 0;
                    data2i[i] = 0;
                }
            }
            //for (int i = 0; i < n; i++) data2i[i] = 0;
            TWFFT.IFFT(data2, data2i);
            var res = FToneAnalysis.MiddleFilter(data2, 5);

            for (int i = 0; i < n; i++)
            {
                res[i] = Math.Pow(Math.E, res[i]);
            }
            return(res);
        }