Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
手 把 手 课 堂 : F P G A 1 0 1<br />
入的数据样本通过精心同步的数学运算与滤波器系数相结<br />
合,不过这取决于滤波器的类型和实现策略,随后数据样<br />
本进入下一个处理阶段。如果数据源和终点都是模拟信<br />
号,则数据样本必须首先通过 A/D 转换器,结果则必须馈<br />
通给 D/A 转换器。<br />
最简单的 FIR 滤波器的构造采用一系列延迟元件、乘<br />
法器和加法器树或加法器链来实现。<br />
下面的等式是单通道 FIR 滤波器的数学表达:<br />
该等式中的各项代表着输入样本、输出样本和系数。<br />
假设 S 为连续输入样本流,Y 为经滤波后产生的输出样本<br />
流,n 和 k 对应特定的瞬时时间。则如果要计算时间 n 时<br />
的输出样本 Y(n),需要在 N 各时间点的样本群组,即<br />
S(n)、S(n-1)、s(n-2)…s(n-N+1)。N 输入样本群组乘以 N<br />
系数,加总后得出最终结果 Y。<br />
图 2 是一个简单的 31 抽头 FIR 滤波器(长度<br />
N=31)的方框图。<br />
在选择滤波器的理想长度和系数值时,有多种设计工<br />
具可供使用。其目的是通过选择适当的参数来实现所需的<br />
滤波器性能。参数选择最常用的设计工具是 MATLAB ® 。<br />
一旦选定参数,就可以按照数学等式完成实现。<br />
<br />
实现 FIR 滤波器的基本步骤包括:<br />
1. 对输入的数据流采样<br />
<br />
S (n)<br />
k0 k k1 k k1 k k3<br />
k30 <br />
12<br />
Z -1 Z -1 Z -1 Z -1<br />
S<br />
y(n)<br />
图 2 - 长度为 31 抽头的 FIR 滤波器<br />
38 赛灵思中国通讯 43 <strong>期</strong><br />
<br />
2. 在缓冲区组织输入样本,以便让每个采集到的样本<br />
与每项滤波器系数相乘<br />
3. 让每个数据样本与每项系数相乘,并累加结果<br />
4. 输出滤波结果。<br />
使用“相乘累加法”在处理器上实现 FIR 滤波器的典<br />
型 C 语言程序,如下列代码所示:<br />
/*<br />
*采集输入的数据样本<br />
*/<br />
datasample = input();<br />
/*<br />
*将新数据样本导入缓冲器<br />
*/<br />
S[n] = datasample;<br />
/*<br />
*将每个数据样本与每项系数相乘并累加结果<br />
*/<br />
y = 0;<br />
for (i = 0; i