首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   一种基于AVR单片机的工频干扰滤除快速算法      ★★★ 【字体: 】  
一种基于AVR单片机的工频干扰滤除快速算法
收集整理:佚名    来源:本站整理  时间:2009-01-10 22:50:04   点击数:[]    

[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持]
摘要:提出了一种利用数字滤波器滤除工频干扰的快速算法。这种算法从AVR单片机内部硬件乘法器的特点出发,采用分配系统数法进行低通数字滤波器设计。经过VMLAB集成开发环境的仿真验证,算法速度快、代码效率高、滤波效果理想。

    关键词:单片机 定点小数 FIR 工频干扰 分配系数法 VMLAB

工频干扰广泛存在各种工业现场中,其产生的途径主要包括输电馈线、照明设备、发动机以及各种电子仪器设备等。一般可以通过滤波电路消除工频干扰,但这必将增加硬件结构的复杂程度。实际上,还可以采用数字信号处理的相关算法,通过软件滤波器滤除工频干扰。软件滤波算法的采用,无疑会在简化电路结构的同时,使系统的硬件资源得到更加充分的利用,并达到降低产品成本的要求。

AVR单片机是Atmel公司生产的8位精简指令集(RISC)单片机。与同类单片机相比,在运算速度、外设资源、灵活性等方面性能均衡,性价比较高。AVR单片机适合C语言开发,Mega系列AVR单片机还有一个内部硬件乘法器单元。这些特点都为软件滤波器的实现提供了极大的便利。

1 滤波算法

常用的单片机滤波算法包括中值滤波、增色值滤波、滑动平均以及复合滤波算法等。工频干扰的频率范围在50Hz附近,可以采用一个截止频率远低于50Hz的低通滤波器来滤除工频干扰。

    假设输入信号x(t),输出信号y(t),则一个RC低通滤波器表达式为:τ[dy(t)]/dt+y(t)=x(t),其中τ为时间常数。

连续时间信号经过采样后成为离散时间信号,低通滤波器的表达式也变为:

τ[y(t)-y(k-1)]/ Δt+y(k)=x(t)     (1)

Δt为采样时间间隔,k为归一化时间。

由(1)式可得:

y(k)=[1/(1+τ/Δt)]x(k)+(τ/Δt)/(1+τ/Δt)[y(k-1)    (2)

令a=(τ/Δt)(1+τ/Δt),代入(2)式,

y(k)=(1-a)·x(k)+a·y(k-1)     (3)

对(3)式进行z变换,可得:

Y(z)=(1-a) ·X(z)+a·z-1·Y(z)

所以系统的传递函数为:

假设采样频率Fs=500Hz,a分别取0.8、0.85、0.9、0.95,代入(4)式,利用matlab画出频率响应曲线,如图1。其中50Hz频率对应的幅度衰减见表1。

表1 50Hz幅度衰减

a衰减
0.8-9.4dB
0.85-11.9dB
0.9-15.5dB
0.95-21.6dB

2 定点小数表达方式

为了精确构造数字滤波器,经常要用到浮点数据和系统。在进行浮点数乘法运算时,针对AVR单片机设计的C编译器例如AVR-GCC,需要加入额外的数学库函数进行编译。而这会使编译后程序的代码量增加、处理时间加长、处理器的开销也随之增加。为了更大限度地降低系统开销,提高程序效率,采用定点小数表示形式进行乘法运算是最佳选择。

AVR单片机是一种8位精简指令集(RISC)单片机。其中megaAVR系列内部都带有一个硬件乘法器,计算一次8位乘8位的定点乘法只需2个时钟周期。因此采用8位定点采样数据乘以8位系数的定点乘法方式完成滤波器算法是最高效的。

    低通滤波处理涉及的运算形式为一个纯小数系数和一个已知数据相乘再相加。因此将系数采用定点小数的表示形式,对于提高算法速度是至关重要的。

可以定义一种8位定点小数表示形成——Q8,其各位权系数如下:

Q8数的表示范围从0到1-2 -8=0.99609375,每两个数之间的间隔是2 -8(0.00390625),其所能表示的纯小数共有2 8=256个。例如11011000就表示2 -1+2 -2+2 -4+2 -5=0.84375,而11011001就是表示2 -1+2 -2+2 -4+2 -5+2 -8=0.84765625,因此0.84375和0.84765625之间的纯小数只能用这两个数中的一个近似表示了。这对于乘法计算的精度有一定的影响,但是由于滤波公式(3)中的系数a和(1-a)都是常数,在整体性能稳定的情况下,系数微小的不确定性对滤波器整体性能并没有太大的影响。

3 分配系数法原理

从(3)式可知,滤波算法可以用迭代计算实现,为保证每个新的输出值都可以作为下次计算的输入值,必须使输出值和输入值的位宽度一致。必须使输出值和输入值的位宽度一致。AVR单片机内部硬件乘法器的输出结果为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)所对应的变量即可。因此采用迭代方式进行乘加运算后,整个运算过程只需要两个变量和两个常数参加即可。

   

[1] [2]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:射频功率放大器实时检测的实现

  • 下一篇文章:平行缝焊机控制系统的研制
  • 返回上一页】【打 印】【关闭窗口
    中查找“一种基于AVR单片机的工频干扰滤除快速算法”更多相关内容 5VAR论文频道
    中查找“一种基于AVR单片机的工频干扰滤除快速算法”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››一种基于灰值形态学的汽车牌照提取...
  • ››一种基于单片机控制的数字视频混合...
  • ››一种基于铁电存储器的双机串行通信...
  • ››一种基于KEELOQ的改进加密算法及其...
  • ››一种基于B/S结构与C/S结构结合的新...
  • ››一种基于CAN总线的DSP程序加载技术...
  • ››一种基于图像处理的自动调焦系统
  • ››一种基于AIT2139的视频转换器设计
  • ››一种基于AVR单片机的工频干扰滤除快...
  • ››一种基于比特表的实时多任务新调度...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .