/**
* egg_array_float_convolve:
*
* @data: input array
* @kernel: kernel array
* Return value: Colvolved array, same length as data
*
* Convolves an array with a kernel, and returns an array the same size.
* THIS FUNCTION IS REALLY SLOW...
**/
EggArrayFloat *
egg_array_float_convolve (EggArrayFloat *data, EggArrayFloat *kernel)
{
gint length_data;
gint length_kernel;
EggArrayFloat *result;
gfloat value;
gint i;
gint j;
gint idx;
length_data = data->len;
length_kernel = kernel->len;
result = egg_array_float_new (length_data);
/* convolve */
for (i=0;i<length_data;i++) {
value = 0;
for (j=0;j<length_kernel;j++) {
idx = i+j-(length_kernel/2);
if (idx < 0)
idx = 0;
else if (idx >= length_data)
idx = length_data - 1;
value += g_array_index (data, gfloat, idx) * g_array_index (kernel, gfloat, j);
}
g_array_index (result, gfloat, i) = value;
}
return result;
}