结尾给出的是写这篇文章时随手找到的资料。大家一定要学会使用谷歌搜索英文关键词,因为老外比我们对待知识的态度更严肃也更开放。
http://www.analog.com/media/en/technical-documentation/dsp-book/dsp_book_Ch15.pdf
刚才的滑动平均滤波器,时间复杂度是O(n)(设每次处理n个采样)。
可以优化为O(1)的形式:
int buf[8];
int k=0;
int result=0;
int lowpass()
{
result -= buf[k];
buf[k] = ADC();
result += buf[k];
k = (k + 1) % 8;
return result;
}
下面我用c语言实现一个最简单的FIR低通。我们将最近的8次采样值加起来,求平均值,作为输出。
int buf[8];
int lowpass()
{
int k = 7;
while(k--)
buf[k] = buf[k-1]; //将buf[6] 移到buf[7], buf[5] 移到buf[6],等等,以空出buf[0]
}
buf[0] = ADC();
return (buf[0] + buf[1] +...+ buf[7]) / 8;
}
这个滤波器的时域图像有点像这样:
结尾给出的是写这篇文章时随手找到的资料。大家一定要学会使用谷歌搜索英文关键词,因为老外比我们对待知识的态度更严肃也更开放。
http://www.analog.com/media/en/technical-documentation/dsp-book/dsp_book_Ch15.pdf
刚才的滑动平均滤波器,时间复杂度是O(n)(设每次处理n个采样)。
可以优化为O(1)的形式:
int buf[8];
int k=0;
int result=0;
int lowpass()
{
result -= buf[k];
buf[k] = ADC();
result += buf[k];
k = (k + 1) % 8;
return result;
}