📄 main.c
字号:
//**********************************************************************
//功能 : 定点滤波程序
//作者 : lihj
//创建日期 : 2004-06-13
//版本 : V1.0
//修改记录 :
//***********************************************************************
#include "math.h"
//系统参数配置
#define TS 5 //信号采样周期定义,单位是100ms
#define TF 20 //滤波时间常数定义,单位是100ms
#define DOT_BITS 8 //滤波过程中的放大倍数(定点数小数位数)
//全局变量定义
int g_nPreInput; //上一周期的采样值
//内部函数声明
int Filter(int); //滤波函数
//外部函数声明
int Sample(void); //信号采样接口函数
void HardIni(void); //硬件初始化接口
//主循环
void main(void)
{
int CurSigVal; //当前信号值
int i;
//硬件初始化
HardIni();
//全局变量初始化
g_nPreInput = 0;
while(1)
{
CurSigVal = Filter(Sample()); //采样并滤波
for(i=0;i<20000;i++); //待机一段时间后,开始下一循环
}
}
//一阶惯性滤波
//最差情况下,12MHz晶振,需要0.27ms
int Filter(int CurInput)
{
int t;
int temp;
int input;
input = CurInput<<DOT_BITS;
//如果信号没有改变,则直接返回
if(g_nPreInput == input)
{
return CurInput;
}
//对信号进行限幅,输入值不能超过32767/(TS<<DOT_BITS)
if(CurInput > (32767/(TS<<DOT_BITS)))
{
CurInput = 32767/(TS<<DOT_BITS);
//可以进行越限报警
//......
}
//已经逼进最终值时的处理
temp = (CurInput<<DOT_BITS)-g_nPreInput;
if(abs(temp)*TS < (TS+TF))
{
g_nPreInput = input;
return CurInput;
}
//滤波计算
//保存本周期的计算值
g_nPreInput = g_nPreInput + (temp*TS)/(TS+TF);
t = g_nPreInput>>DOT_BITS;
return t;
}
//硬件初始化接口
void HardIni(void)
{
}
//信号采样接口
int Sample(void)
{
return 20;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -