/* conv.c - convolution of x[n] with h[n], resulting in y[n] */
void conv(int M, double* h, int L, double *x, double *y) {
for (int n=0; n< L+M; n++) {
for (y[n]=0, m=max(0, n-L+1);
m <= min(n,M); m++) {
y[n] += h[m] * x[n-m];
}
}
}
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))