libdspl-2.0
Digital Signal Processing Algorithm Library
conv.c
1/*
2* Copyright (c) 2015-2022 Sergey Bakhurin
3* Digital Signal Processing Library [http://dsplib.org]
4*
5* This file is part of DSPL.
6*
7* is free software: you can redistribute it and/or modify
8* it under the terms of the GNU 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 General Public License
18* along with Foobar. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25#include "dspl.h"
26
27
28
29#ifdef DOXYGEN_ENGLISH
92#endif
93#ifdef DOXYGEN_RUSSIAN
158#endif
159int DSPL_API conv(double* a, int na, double* b, int nb, double* c)
160{
161 int k;
162 int n;
163
164 double *t;
165 size_t bufsize;
166
167 if(!a || !b || !c)
168 return ERROR_PTR;
169 if(na < 1 || nb < 1)
170 return ERROR_SIZE;
171
172
173 bufsize = (na + nb - 1) * sizeof(double);
174
175 if((a != c) && (b != c))
176 t = c;
177 else
178 t = (double*)malloc(bufsize);
179
180 memset(t, 0, bufsize);
181
182 for(k = 0; k < na; k++)
183 for(n = 0; n < nb; n++)
184 t[k+n] += a[k]*b[n];
185
186 if(t!=c)
187 {
188 memcpy(c, t, bufsize);
189 free(t);
190 }
191 return RES_OK;
192}
193
#define RES_OK
The function completed correctly. No errors.
Definition: dspl.h:558
#define ERROR_PTR
Pointer error. This error means that one of the required pointers (memory to be allocated for) is tra...
Definition: dspl.h:610
#define ERROR_SIZE
Error array size. This error occurs when in addition to the pointer the wrong input is passed to the ...
Definition: dspl.h:618
int DSPL_API conv(double *a, int na, double *b, int nb, double *c)
Real vectors linear convolution.
Definition: conv.c:159