问下这段FIR滤波程序
#define N 10 // number of FIR coefficients.#define BLKSIZE 20 // block size of samples filtered each time.
#define M (N + BLKSIZE - 1)
float workbuf = {0}; // history + current input block, initialize to 0.
// float h: array of fir filter coefficients.
// float x: array of input samples block
// float y: array of samples block after filtering
void fir(float h, float x, float y)
{
int i, j;
float *p;
// copy current input block to work buffer
// workbuf = x, workbuf = x,
// workbuf = x, ..., workbuf = x;
for (i=0; i<BLKSIZE; i++)
{
workbuf = x;
}
// FIR filter loop
for (i=0; i<BLKSIZE; i++)
{
p = &workbuf;// each y needs right starting x.
for (j=0; j<N; j++)
{
y += (h * (*p--));
}
}
// copy last N-1 samples of x to workbuf
// as history for next block
p = &x; // p points the last element;
for (i=0; i<N-1; i++)
{
workbuf = *p--;
}
}
/////////////////////////////////////////////////
代码源自本论坛
没看明白,滤波的结果大了将近一倍的样子。
疑问是:如果一个周期的采样数BLKSIZE远远小于滤波器系数的个数N。
那后面
s the last element;
for (i=0; i<N-1; i++)
workbuf = *p--;
这句话怎么理解。
页:
[1]