Beispiel #1
0
        /// <summary>
        /// Характеристическая функция
        /// </summary>
        /// <returns>Возвращает вектор отсчетов</returns>
        public Statistic CharacteristicFunc()
        {
            double[] img = new double[_n];

            ComplexVector fnc = new ComplexVector(_vector.DataInVector, img);

            return(new Statistic(Furie.fft(fnc).MagnitudeToVector()));
        }
        /// <summary>
        /// Взаимокорелляция двух действительных векторов
        /// </summary>
        /// <param name="A">Первый вектор</param>
        /// <param name="B">Второй вектор</param>
        /// <returns>Возвращает отсчеты ВКФ</returns>
        public static Vector CrossCorrelationF(Vector A, Vector B)
        {
            int    N = (A.N > B.N) ? Functions.NextPow2(2 * A.N) : Functions.NextPow2(2 * B.N);
            Vector newA, newB;

            newA = A.CutAndZero(N);
            newB = B.CutAndZero(N);

            ComplexVector SwA = Furie.fft(newA);
            ComplexVector SwB = Furie.fft(newB);

            return(Furie.ifft(SwA * SwB).RealToVector() / Math.Sqrt(Statistic.Dispers(newA) * Statistic.Dispers(newB)) / newA.N / 2);
        }
Beispiel #3
0
        /// <summary>
        /// Чачтотно-временное преобразование
        /// </summary>
        /// <param name="vect">Вектор</param>
        /// <param name="lenFr">Размер фрейма</param>
        public static Matrix TimeFrTransform(Vector vect, int lenFr = 1000)
        {
            int lenTime = vect.N / lenFr;

            Vector[] vects = new Vector[lenTime];
            double[,] matr = new double[lenFr, lenTime];

            for (int i = 0; i < lenTime; i++)
            {
                vects[i] = vect.GetInterval(i * lenFr, (i + 1) * lenFr);
            }

            for (int i = 0; i < lenTime; i++)
            {
                vects[i] = Furie.fft(vects[i]).MagnitudeToVector() / lenFr;

                for (int j = 0; j < lenFr; j++)
                {
                    matr[j, i] = vects[i][j];
                }
            }

            return(new Matrix(matr));
        }