ьтату і розмірність цих масивів цілим числом.
//ШПФ
//Аргументи:
//mas - покажчик на масив вихідних даних
//n - розмірність масиву mas (явялется ступенем 2)
//y - покажчик на масив вихідних даних разіерності n
void FFT (double * mas, int n, complex * y)
{pi=3.1415926535; (n == 1)
{= amp; complex (mas [0], 0) ;;
} wn (sinx (2 * pi/n + pi/2), sinx (2 * pi/n)); w (1, 0); i=0, j=n/2 , k=0; * a0=(double *) malloc (sizeof (double) * (n/2)),
* a1=(double *) malloc (sizeof (double) * (n/2)); (k lt; j - 1)
{[k]=mas [i]; [k]=mas [i + 1]; ++;=i + 2;
} * y0=(complex *) malloc (sizeof (complex) * (n/2)); * y1=(complex *) malloc (sizeof (complex) * (n/2)) ; ( amp; a0 [0], j, amp; y0 [0]); ( amp; a1 [0], j, amp; y1 [0]); (k=0; k lt; j; k ++)
{[k]=add (y0 [k], mul (w, y1 [k])); [k + j]=sub (y0 [k], mul (w, y1 [ k]));=mul (w, wn);
}
}
Структура complex імеетвідstruct complex
{(double real, double imag)
{= real;=imag;
} re;
doubleim;
};
Обчислення синуса реалізовано через розкладання в ряд Тейлора, для чого так само реалізовані функції обчислення ступеня і факторіала числа, але на увазі їх простоти приводити ми їх не будемо.
Кореляція
Метод обчислення кореляції приймає покажчики на два масиви вихідних даних, масив вихідних даних і розмірність цих масивів цілим числом.
//Кореляція
//Аргументи:
//vect_1 - покажчик на перший масив вихідних даних
//vect_2 - покажчик на другий масив вихідних даних
//corr - покажчик на масив вихідних даних
//n - розмірність даних
//примітка: передбачається, що розмірності vect_1 і vect_2//збігаються
void correlation (double * vect_1, double * vect_2, double * corr, int n)
{i, j; (i=0; i lt; n; i ++)
for (j=0; j lt; n - i - 1; j ++)//т до у вибірці всього n
//значень, а індекс i + j не повинен ставати більше
//n, то другий цикл до n - i
corr [i]=corr [i] + vect_1 [j] * vect_2 [i + j]/n;
}
Приклад побудови графіка кореляційної функції
На малюнку 5.1 представлений приклад побудови графіка кореляційної функції двох випадкових векторів по 512 відліків. Графік нормований.
Автокорреляция
Метод обчислення автокореляції приймає в якості аргументів покажчики на масив вхідних даних, масив результату і розмірність цих масивів цілим числом.
//Автокорреляция
//Аргументи:
//vect - покажчик на масив вихідних даних
//n - розмірність масиву mas (явялется ступенем 2)
//acorr - покажчик на масив вихідних даних
void autocorrelation (double * vect, int n, double * acorr)
{i, j; (i=0; i lt; n; i ++)
for (j=0; j lt; n - i - 1; j ++)//т до у вибірці всього
//n значень, а індекс i + j не повинен ставати
//більше n, то другий цикл до ni
acorr [i]=acorr [i] + vect [j] * vect [i + j]/n;
}
Метод головних компонент
Аргументами методу є покажчики на масив вихідних даних, масив вихідних даних і розмірності обох масивів цілими числами. Для обчислення матриці автокореляції вектор-рядок вихідних даних транспоніруем, ділимо на кілька векторів і записуємо їх послідовно в матрицю.
//Метод головних компонент
//Аргументи:
//vect - покажчик на одновимірний масив вихідних даних
//y - покажчик на одновимірний масив результату
//n - розмірність вхідних даних
//k - розмірність результату
void PCA (double * vect, double * y, int n, int k)
{, j, m=n/k, h;
//так як vect - вектор-рядок, а алгоритм розрахований на...