35 double dw = M_2PI / period;
38 if(!t || !s || !w || !y)
43 return ERROR_NEGATIVE;
47 for(k = 0; k < nw; k++)
49 w[k] = (k - nw/2) * dw;
50 RE(e[1]) = s[0] * cos(w[k] * t[0]);
51 IM(e[1]) = -s[0] * sin(w[k] * t[0]);
52 for(m = 1; m < nt; m++)
56 RE(e[1]) = s[m] * cos(w[k] * t[m]);
57 IM(e[1]) = - s[m] * sin(w[k] * t[m]);
58 RE(y[k]) += 0.5 * (
RE(e[0]) +
RE(e[1]))*(t[m] - t[m-1]);
59 IM(y[k]) += 0.5 * (
IM(e[0]) +
IM(e[1]))*(t[m] - t[m-1]);
66 RE(y[0]) =
RE(y[1]) = 0.0;
76 int DSPL_API fourier_series_dec_cmplx(
double* t,
complex_t* s,
int nt,
77 double period,
int nw,
double* w,
complex_t* y)
80 double dw = M_2PI / period;
83 if(!t || !s || !w || !y)
88 return ERROR_NEGATIVE;
92 for(k = 0; k < nw; k++)
94 w[k] = (k - nw/2) * dw;
95 RE(e[1]) =
RE(s[0]) * cos(w[k] * t[0]) +
96 IM(s[0]) * sin(w[k] * t[0]);
97 IM(e[1]) = -
RE(s[0]) * sin(w[k] * t[0]) +
98 IM(s[0]) * cos(w[k] * t[0]);
99 for(m = 1; m < nt; m++)
103 RE(e[1]) =
RE(s[m]) * cos(w[k] * t[m]) +
104 IM(s[m]) * sin(w[k] * t[m]);
105 IM(e[1]) = -
RE(s[m]) * sin(w[k] * t[m]) +
106 IM(s[m]) * cos(w[k] * t[m]);
107 RE(y[k]) += 0.5 * (
RE(e[0]) +
RE(e[1]))*(t[m] - t[m-1]);
108 IM(y[k]) += 0.5 * (
IM(e[0]) +
IM(e[1]))*(t[m] - t[m-1]);
115 RE(y[0]) =
RE(y[1]) = 0.0;
128 int DSPL_API fourier_integral_cmplx(
double* t,
complex_t* s,
int nt,
134 if(!t || !s || !w || !y)
142 for(k = 0; k < nw; k++)
144 RE(e[1]) =
RE(s[0]) * cos(w[k] * t[0]) +
145 IM(s[0]) * sin(w[k] * t[0]);
146 IM(e[1]) = -
RE(s[0]) * sin(w[k] * t[0]) +
147 IM(s[0]) * cos(w[k] * t[0]);
148 for(m = 1; m < nt; m++)
152 RE(e[1]) =
RE(s[m]) * cos(w[k] * t[m]) +
153 IM(s[m]) * sin(w[k] * t[m]);
154 IM(e[1]) = -
RE(s[m]) * sin(w[k] * t[m]) +
155 IM(s[m]) * cos(w[k] * t[m]);
156 RE(y[k]) += 0.5 * (
RE(e[0]) +
RE(e[1]))*(t[m] - t[m-1]);
157 IM(y[k]) += 0.5 * (
IM(e[0]) +
IM(e[1]))*(t[m] - t[m-1]);
172 int DSPL_API fourier_series_rec(
double* w,
complex_t* s,
int nw,
178 if(!t || !s || !w || !y)
186 for(k = 0; k < nw; k++)
188 for(m = 0; m < nt; m++)
190 RE(e) = cos(w[k] * t[m]);
191 IM(e) = sin(w[k] * t[m]);
193 RE(y[m]) += CMRE(s[k], e);
194 IM(y[m]) += CMIM(s[k], e);
#define ERROR_SIZE
Ошибка при передаче размера массива.
double complex_t[2]
Описание комплексного типа данных.
int fourier_series_dec(double *t, double *s, int nt, double period, int nw, double *w, complex_t *y)
Расчет коэффициентов разложения в ряд Фурье
#define ERROR_PTR
Ошибка указателя.
#define IM(x)
Макрос определяющий мнимую часть комплексного числа.
#define RE(x)
Макрос определяющий реальную часть комплексного числа.
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.