налізатора Тензотрем
//diplom. cpp: визначає точку входу для консольного застосування.
# include stdafx. h
# include lt; stdio. h gt;
# include lt; malloc. h gt;
//Транспонування матріциtransponse (double ** x, double ** xt)
{(int i=0; i lt; 512; i ++) (int j=0; j lt; 512; j ++)
xt [i] [j]=x [j] [i];
}
//структура complex для роботи з комплексними числами
//re - дійсна частина числа
//im - уявна частина числа
typedef struct complex
{(double real, double imag)
{= real;=imag;
} re;
doubleim;
};
//Функції роботи з комплексними числами
//умноженіеmul (complex a, complex b)
{return complex (a. re * b. re - a. im * b. im, a. re * b. im + a. im * b. re); }
//сложеніеadd (complex a, complex b)
{return complex (a. re + b. re, a. im + b. im); }
//вичітаніеsub (complex a, complex b)
{return complex (a. re - b. re, a. im - b. im); }
//обчислення ступеня чіслаpowx (double x, int k)
{res=1; (int i=0; i lt; k; i ++)=res * x; res;
}
//обчислення факторіала (intn)
{res=1; (int i=1; i lt; n; i ++)=res * i; res;
}
//розкладання синуса навряд Тейлора (doublex)
{res=0; (int i=0; i lt; 100; i ++)=powx (- 1, i - 1) * powx (x, 2 * i - 1)/fact ( 2 * i - 1) + res;
returnres;
}
//ШПФ
//Аргументи:
//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);
}
}
//Кореляція
//Аргументи:
//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;
}
//Автокорреляция
//Аргументи:
//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;
}
//множення матриць розміру nxm
//Аргументи: