2.2 实现方案
由于在卷积运算之前, h (n) 的N个数值是已知的, 因此, 可先在程序存储器中开辟N个单元来存放h (n)。由于输入序列x (n) 是不断变化的,因此, 在数据存储器中可开辟N个存储单元并对其进行移位寄存, 其初始值分别为x (n)、x (n-1)……x (n-N-1), 然后采用循环寻址的方法对其进行访问。每次输入新的样本时, 可以以新样本改写滑窗中的最老的数据, 而滑窗中的其他数据则不需要移动。利用片内8 kB (循环缓冲区长度)寄存器可对滑窗进行间接寻址, 循环缓冲区地址首尾相邻。8级循环缓冲区的结构如图1所示, 其中顶部为低地址, 图1中的(a) (b) (c) 分别为初始状态、输入1个和2个样本后的存储情况。
图1 8级循环缓冲区结构。
3 仿真结果
下面是一组信号采样序列样本x (n), 其中存在有高频干扰。现以x (n) 作为输入序列, 然后滤除其中的干扰成分。
{x (n)} = {-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,*,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0}
本设计的线性相位低通FIR数字滤波器的截止频率ωc为0.2πrad, 窗口长度N为11。根据上述原理及实现方案, 若采用汉宁窗来实现, 则可依据算式计算出用汉宁窗设计时的各h (n) 的系数:
{h (n)} = {0, 0.0045, 0.0349, 0.0991, 0.1692,0.2, 0.1692, 0.0991,0.0349, 0.0045, 0}
在CCS2.0软件中观察x (n) 的输入曲线如图2所示, 图3所示是其y (n) 输出曲线。
由图2和图3两图对比可见, 经过滤波后, 其输入曲线变平滑了。并且, 根据计算所得:
{y (n)} = {0, -0.018, -0.1486, -0.4662, -0.893, -1.305, -1.7006, -2.1548, -2.6372, -3.0062, -3.1918, -3.3098, -3.5296, -3.8198,-4.009, -4.0482, -3.9514, -3.4596, -2.0672, 0.3162, 2.7908, 3.*8, 0.9464, -6.2018, -17.6736, -31.8884, -45.5584, -54.1796, -54.044, -44.916, -30.6*, -16.6756, -6.3676, 0.058,4.037, 6.5272, 7.5976, 7.318, 6.2854, 5.0906, 3.8896, 2.*2, 1.5078, 0.6238, 0.0788, -0.3198, -0.7348, -1.0768, -1.1474, -0.9538,-0.7342, -0.6852, -0.7*, -0.8172, -0.8136,-0.8834} 上面一共56个值。
图2 x (n) 输入曲线
图3 y (n) 输出曲线
4 结束语
通过实验结果可见, 本设计用DSP设计的FIR数字滤波器的输出曲线对应值与计算所得值完全相符, 由此证明, 本设计的程序是正确的。