标题:用 C 语言实现数字滤波
2008-05-09 16:17:33
在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集
的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用 RC 滤波电路,而在由工业控
制计算机组成的自动检测系统中,为了提高采样的可靠性,减少虚假信息的影响,常常采用数
字滤波的方法。
数字滤波的方法有很多种,可以根据不同的测量参数进行选择。下面给出几种常用的数字
滤波方法的 C 语言函数,这些函数有一定的通用性,用 Turbo C 2.0 编制而成,在研华 IPC-
610/386 机上均编译通过,适用于 PC 机及其兼容机。
1. 程序判数滤波
采样的信号,如因常受到随机干扰传感器不稳定而引起严重失真时,可以采用此方法。方
法是:根据生产经验确定两交采样允许的最大偏差△×,若先后两次采样的信号相减数值大于
△×,表明输入的是干扰信号,应该去掉;用上次采样值作为本次采样值,若小于、等于△×表明
没有受到干扰,本次采样值效。该方法适用于慢变化的物理参数的采样,如温度、物理位置等
测量系统。
程序判断滤波的 C 程序函数如下:
float program_detect_filter(float old_new_value[], float X)
{
float sample_value;
if (fabs(old_new_value[1]_old_new_value[0])>X)
sample_value=old_new_value[0];
else
sample_value=old_new_value[1];
retrun(sample_value);
}
函 数 调 用 需 一 个 一 维 的 两 个 元 素 的 数 组 (old_new_value[2], 用 于 存 放 上 次 采 样 值
(old_new_value[0],)和本次采样值(old_new_value[1],),函数中 sample_value 表示有效采样
值,X 表示根据根据经验确定的两次采样允许的最大偏差△×。
2、中值滤波
中值滤波是对某一参数连续输入 N 次(一般 N 取奇数),从中选择一个中间值作为本次采样
值,若变量变化比较缓慢,采用此方法效果比较好,但对快速变化过程的参数,如流量、自然伽
玛等,则不宜采用。
中值滤波的 C 程序函数如下:
float middle_filter(float middle_value [] , int count)
{
float sample_value, data;
int i, j;
for(i=0; i<(count-1)/2; i++)
for(j=count-1; j>=I; --j)
{
if(middle_value[j-1]>middle_value[j]
{
data=middle_value[j-1];