|
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
30 #ifdef DOXYGEN_ENGLISH
103 #ifdef DOXYGEN_RUSSIAN
181 double* c,
double* d,
int p,
182 double* beta,
double* alpha)
185 int k2, i, k, pn, pd, ln, ld, k2s, nk2s;
186 double *num = NULL, *den = NULL, *ndn = NULL, *ndd = NULL;
189 if (!a || !b || !c || !d || !beta || !alpha)
201 k2s = k2*
sizeof(double);
202 nk2s = (n+1)*k2*
sizeof(
double);
204 num = (
double*)malloc(nk2s);
205 den = (
double*)malloc(nk2s);
206 ndn = (
double*)malloc(nk2s);
207 ndd = (
double*)malloc(nk2s);
209 memset(num, 0, nk2s);
210 memset(den, 0, nk2s);
211 memset(ndn, 0, nk2s);
212 memset(ndd, 0, nk2s);
215 num[0] = den[0] = 1.0;
218 for(i = 1; i < n+1; i++)
220 res =
conv(num+pn, ln, c, p+1, num+pn+k2);
223 res =
conv(den+pn, ln, d, p+1, den+pn+k2);
235 for (i = 0; i < n+1; i++)
237 res =
conv(num + pn, ln, den + pd, ld, ndn + i*k2);
246 for (i = 0; i < n+1; i++)
248 for (k = 0; k < k2; k++)
250 ndd[i*k2 + k] = ndn[i*k2 + k] * a[i];
251 ndn[i*k2 + k] *= b[i];
256 memset(alpha, 0, k2s);
257 memset(beta, 0, k2s);
259 for (k = 0; k < k2; k++)
261 for (i = 0; i < n+1; i++)
263 beta[k] += ndn[i*k2 + k];
264 alpha[k] += ndd[i*k2 + k];
int ratcompos(double *b, double *a, int n, double *c, double *d, int p, double *beta, double *alpha)
Рациональная композиця
int conv(double *a, int na, double *b, int nb, double *c)
Линейная свертка двух вещественных векторов
#define ERROR_PTR
Ошибка указателя. Данная ошибка означает, что один из обязательных указателей (память под который дол...
#define ERROR_SIZE
Ошибка при передаче размера массива. Данная ошибка возникает когда помимо указателя на массив входных...
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.