C/C++ : Convolution Source Code

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 f\ast g.

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 :

Convolution Source Code 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

 

4 Comments

Leave a Reply to Eder Cancel reply

Your email address will not be published. Required fields are marked *