# C/C++ : Convolution Source Code

In mathematics and, in particular, functional analysis, convolution is a mathematical operation on two functions f and g, producing a third function that is typically viewed as a modified version of one of the original functions (from wikipedia.com).

Convolution of two square pulses: the resulting waveform is a triangular pulse. One of the functions (in this case g) is first reflected about τ = 0 and then offset by t, making it g(t − τ). The area under the resulting product gives the convolution at t. The horizontal axis is τ for f and g, and t for .

I get this picture convolution ilustration from wikipedia. We can ilustrated the convolution process with number. Please check the picture below, I try to create a convolution ilustration. So, we can create C/C++ : Convolution Source Code from this convolution ilustration :

This is a simple convolution ilustration with input two vector. From this ilustration, we can create a C/C++ : Convolution Source Code. This is a function to compute convolution 1D with C/C++ :

```//convolution algorithm
float *conv(float *A, float *B, int lenA, int lenB, int *lenC)
{
int nconv;
int i, j, i1;
float tmp;
float *C;

//allocated convolution array
nconv = lenA+lenB-1;
C = (float*) calloc(nconv, sizeof(float));

//convolution process
for (i=0; i<nconv; i++)
{
i1 = i;
tmp = 0.0;
for (j=0; j<lenB; j++)
{
if(i1>=0 && i1<lenA)
tmp = tmp + (A[i1]*B[j]);

i1 = i1-1;
C[i] = tmp;
}
}

//get length of convolution array
(*lenC) = nconv;

//return convolution array
return(C);
}```

we can running this code with command :

./convolution length_vect_1 length_vect_2

example :

./convolution 4 6

This is sample output from C/C++ : Convolution Source Code:

```toto@toto-laptop:~/Documents\$ ./convolution 4 6
Vector 'A' , Size=4
1.000   2.000   3.000   4.000

Vector 'B' , Size=6
5.000   6.000   7.000   8.000   9.000   10.000

Vector 'C' , Size=9
5.000   16.000  34.000  60.000  70.000  80.000  79.000  66.000  40.000```

You can download the complete C/C++ : Convolution Source Code with testing program at here.

Source :
http://en.wikipedia.org/wiki/Convolution