libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
fourier_series_rec.c
1 /*
2 * Copyright (c) 2015-2024 Sergey Bakhurin
3 * Digital Signal Processing Library [http://dsplib.org]
4 *
5 * This file is part of libdspl-2.0.
6 *
7 * is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * DSPL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 
22 #include <stdlib.h>
23 #include <string.h>
24 #include <math.h>
25 #include "dspl.h"
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 #ifdef DOXYGEN_ENGLISH
38 
93 #endif
94 #ifdef DOXYGEN_RUSSIAN
95 
153 #endif
154 int DSPL_API fourier_series_rec(double* w, complex_t* s, int nw,
155  double* t, int nt, complex_t* y)
156 {
157  int k, m;
158  complex_t e;
159 
160  if(!t || !s || !w || !y)
161  return ERROR_PTR;
162  if(nt<1 || nw < 1)
163  return ERROR_SIZE;
164 
165  memset(y, 0, nt*sizeof(complex_t));
166 
167 
168  for(k = 0; k < nw; k++)
169  {
170  for(m = 0; m < nt; m++)
171  {
172  RE(e) = cos(w[k] * t[m]);
173  IM(e) = sin(w[k] * t[m]);
174 
175  RE(y[m]) += CMRE(s[k], e);
176  IM(y[m]) += CMIM(s[k], e);
177  }
178  }
179  return RES_OK;
180 }
181 
int fourier_series_rec(double *w, complex_t *s, int nw, double *t, int nt, complex_t *y)
Восстановление сигнала при усечении ряда Фурье
#define RE(x)
Макрос определяющий реальную часть комплексного числа.
Definition: dspl.h:420
#define ERROR_PTR
Ошибка указателя. Данная ошибка означает, что один из обязательных указателей (память под который дол...
Definition: dspl.h:610
#define ERROR_SIZE
Ошибка при передаче размера массива. Данная ошибка возникает когда помимо указателя на массив входных...
Definition: dspl.h:618
double complex_t[2]
Описание комплексного типа данных.
Definition: dspl.h:86
#define RES_OK
Функция завершилась корректно. Ошибки отсутствуют.
Definition: dspl.h:558
#define IM(x)
Макрос определяющий мнимую часть комплексного числа.
Definition: dspl.h:478