数字带通滤波器c语言程序,实现数字滤波的C语言程序

本文介绍了在工业控制系统中用于消除干扰的数字滤波方法,包括程序判断滤波、中值滤波、滑动算术平均值滤波、滑动加权平均值滤波、防脉冲干扰平均值滤波和低通数字滤波,并提供了相应的C语言函数实现。这些函数在 Turbo C 2.0 上编译通过,适用于PC机及其兼容机。
摘要由CSDN通过智能技术生成

在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的

信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动检测系统中,为了提高采样的可靠性,减少虚假信息的影响,常常采用数字滤波的方法。

数字滤波的方法有很多种,可以根据不同的测量参数进行选择。下面给出几种常用的数

字滤波方法的C语言函数,这些函数有一定的通用性,用Turbo C 2.0编制而成,在研华PC-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表示

float DigFil(invar, setic) float invar; int setic; /******************************************************************************/ /* Filter Solutions Version 2009 Nuhertz Technologies, L.L.C. */ /* www.nuhertz.com */ /* +1 602-279-2448 */ /* 3rd Order Band Pass Butterworth */ /* Bilinear Transformation with Prewarping */ /* Sample Frequency = 5.000 KHz */ /* Standard Form */ /* Arithmetic Precision = 4 Digits */ /* */ /* Center Frequency = 300.0 Rad/Sec */ /* Pass Band Width = 20.00 Rad/Sec */ /* */ /******************************************************************************/ /* */ /* Input Variable Definitions: */ /* Inputs: */ /* invar float The input to the filter */ /* setic int 1 to initialize the filter to zero */ /* */ /* Option Selections: */ /* Standard C; Initializable; Internal States; Not Optimized; */ /* */ /* There is no requirement to ever initialize the filter. */ /* The default initialization is zero when the filter is first called */ /* */ /******************************************************************************/ /* */ /* This software is automatically generated by Filter Solutions */ /* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and */ /* distributions of this software. */ /* */ /******************************************************************************/ { float sumnum=0.0, sumden=0.0; int i=0; static float states[6] = {0.0,0.0,0.0,0.0,0.0,0.0}; static float znum[7] = { -7.968e-09, 0.0, 2.39e-08, 0.0, -2.39e-08, 0.0, 7.968e-09 }; static float zden[6] = { .992, -5.949, 14.88, -19.86, 14.92, -5.981 }; if (setic==1){ for (i=0;i<6;i++) states[i] = [i] = [i]*invar; return 0.0; } else{ sumnum = sumden = 0.0; for (i=0;i<6;i++){ sumden += states[i]*zden[i]; sumnum += states[i]*znum[i]; if (i<5) states[i] = states[i+1]; } states[5] = invar-sumden; sumnum += states[5]*znum[6]; return sumnum; } }
数字带通滤波器是一种用于去除或增强特定频率范围内信号的数字滤波器。在C语言中,我们可以通过设计滤波器的传递函数来实现数字带通滤波器。 首先,我们需要定义滤波器的特性参数,包括截止频率下限和上限。截止频率是指信号在频域中的起止频率,超出或低于这一范围的信号将被滤除。然后,我们可以使用巴特沃斯、切比雪夫等滤波器设计方法来生成滤波器的传递函数。 在C语言中,我们可以使用数字滤波器库函数来实现数字带通滤波器。例如,可以使用IIR滤波器设计工具箱中的函数来设计巴特沃斯滤波器的传递函数。然后,我们可以使用库函数来实现信号的滤波操作。 具体实现时,我们首先需要将输入信号进行离散化处理,将其表示为数字序列。然后,将输入信号传递给滤波器函数,该函数将根据滤波器的传递函数对信号进行滤波操作。滤波后的输出信号将只包含位于截止频率范围内的频率分量。 最后,我们可以根据需要对输出信号进行后续处理或分析。例如,可以使用时域或频域方法对滤波后的信号进行信号处理或频谱分析。 总之,数字带通滤波器是一种在特定频率范围内去除或增强信号的滤波器。在C语言中,可以使用滤波器设计工具箱中的函数来设计滤波器,并使用库函数来实现滤波操作。通过数字带通滤波器,我们可以有效地处理特定频率范围内的信号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值