新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于AVR的数字滤波器滤除工频干扰的快速算法实现

基于AVR的数字滤波器滤除工频干扰的快速算法实现

作者: 时间:2013-03-29 来源:网络 收藏

3 分配系数法原理

从(3)式可知,滤波可以用迭代计算,为保证每个新的输出值都可以作为下次计算的输入值,必须使输出值和输入值的位宽度一致。单片机内部硬件乘法器的输出结果为16位,两次乘法运算的结果还要进行加法运算,其结果很有可能超过16位宽度。如果要进行迭代计算,就要将乘加运算的结果转化成8位表示方式。一种解决方法是用查表法乘法计算,这样运算结果就直接表达成8位定点数形式,不用进行表示方式的转化,但是这种方案要占用额外的硬件存储空间构造一张查找表。

可以从逆向进行思考:由(3)式可知,每个新的输出值y(k)都与上一次的输出值y(k-1)和新的输入值x(k)有关。y(k-1)和x(k)都是8位的,因此最大值为0xFF。为了使a×y(k-1)+(1-a)×x(k)不超过0xFFFF,两个系数a和(1-a)的和不能超过0xFFFF/0xFF=0x101。实际上,a+(1-a)等于“1”,因此这里的0x101就可以看作“1”。如果取a=0.9,那么对应地将0x101平均分成10份,取其中的9份,即0x101×0.9近似等于0xE7, 相应地0.1就等于0x101-0xE7=0x1A。这里的0xE7可以近似被认为是0.9的一种定点Q8数表示形式,而0.1的定点Q8数表示形式就是0x1A。由于系数a和(1-a)采用了Q8数的表示形式,这种将16位乘加运算结果转化为8位定点数表示形式的工作就变得简单了,只需通过移位运算,取y(k)的高8位即可,对应的C语言代码为:

y(k)=(char)(y(k)>>8)

在C语言编程处理中,并不需要建立一个数组来储存y(k)的值,而只需定义两个unsigned char型的变量分别储存y(k-1)和x(k)。当乘加计算a×y(k-1)+(1-a)×x(k)完成后,将结果转化成8位定点数形式,再将其赋值给y(k-1)所对应的变量即可。因此采用迭代方式进行乘加运算后,整个运算过程只需要两个变量和两个常数参加即可。

通过这种处理,y(k)就可以作为计算下一次输出值y(k+1)的一个已知量,并继续与Q8数形式的系数相乘,得到新的输出值。这种处理方式简化了乘加运算的完成过程,节省了系统硬件资源,并降低了处理器开销。

4 采样时间的控制

采用单片机进行信号处理,一种有效而准确的数据采集方式就是通过计数器中断服务程序(ISR)控制AD对输入信号进行精确采样。但是(图2)中断服务程序(ISR)的开销影响了AD采样时间间隔的精确度,同时如果中断服务程序(ISR)的开销过大,必然导致AD的最高采样频率的降低。因此,要想获得精确的采样频率,就必须在尽量减少中断服务程序开销的前提下,适当调整计数器中断的时间间隔。这可以通过调整OCR0的预置数来完成。

5 流程图

滤波是通过中断服务程序(ISR)来完成的,整个应用程序的主函数main()主要负责初始化计数器中断,并处理其它应用。整个程序的流程图如图3所示。

本算法的C语言代码(附录A)经过-GCC编译器的编译后,“.text”段只有310个字节,大大节省了单片机的flash空间。

6 VMLAB的滤波系统仿真

VMLAB的全称为:Visual Micro Lab。它针对系列单片机和ST62系列单片机设计,是一个单片机的虚拟原型框架,可以提供给用户一个真正意义上的虚拟微控制器(MCU)设计实验室。它具有强大的多窗口、多文件的编辑器,微控制器的集成开发环境,拥有一系列的集成开发工具,图形界面的调试器,混合模式的模拟-电路仿真器,代码质量检查器等。MCU,它可以仿真出包括模拟元器件在内的更多外围设备,并具有交互式器件模拟仿真功能。

假设有用信号是2V大小的直流信号,工频是峰峰值为1V,频率为50Hz的正弦波,建立单片机AD的输入信号表示形式如下:

2+0.5 sin(2π×50×t)

VMLAB通过工程文件来管理和控制各种仿真信息、硬件连接以及显示I/O电压波形等。根据本算法的特点,采用Atmega16作为目标单片机,时钟选为8MHz,建立工程文件。恰当设置OCR0寄存器,使计数器比较匹配中断的时间间隔约为2ms,这样AD的采样频率Fs近似认为等于500Hz。经过仿真,对比结果如表3。

从表3可以看出:随着a的增大,算法收敛的时间变长,同时50Hz对应的衰减幅度增加,衰减的幅度值和理论推导基本一致。另外,当a=0.95时,DA输出的均值变小。这主要是进行循环迭代运算时,需要将16位的变量转化为8位表示形式所导致的。在有用信号失真较小的情况下,为使达到降低工频的最佳效果,必须恰当选择a值。经过以上的仿真试验可以发现,当a=0.9时,衰减幅度、DA输出均值和算法收敛时间表现比较均衡,可以作为一般情况下的选择值。



评论


相关推荐

技术专区

关闭