/*---------------------------------------------------------------------
一般的M抽头FIR Filter C伪代码
输入 : x[] 输入样本点数N
冲击响应 : h[] M抽头
输出 : y[] N个输出
---------------------------------------------------------------------*/
#define N 1000 // 序列为1000
#define M 32 // 32抽头
void FIR( double x[], double h[], double y[ ])
{
memset(y, 0, N * sizeof(double));
int n, k;
for( n=0; n<N; n++ )
{
/*
* 以'过去的M-1个样本点和自身'作为滤波范围
*/
for(k=0; k<M; k++)
{
y[n] += h[k] * x[n-k]
}
}
}
第n个输出是取决于前M个输入和h的
y(n) = h(0)*x(n) + h(1)*x(n-1) + ... h(M-1)*x(n-(M-1))
就是 h(k) 与 x[n] 的卷积, 卷积结构为y(n)