/// <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); }
/// <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)); }