新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2018-6-13
- 在线时间
- 8 小时
|
2金钱
第一次做滤波,经验不足,麻烦各位大佬帮忙看看!!
刚开始参考了很多博主的资料,
int num_x=0;
float k_x=0.02;
int old_flag=0;
int new_flag=0;
float old_data = 0;
float new_data = 0;
int i;
IVP_TypeDef IVP;
void Read_IVP(void)
{
new_data = Read_IIC(0x01)*LSBCurrent;//
IVP.Voltage = Read_IIC(0x02)*LSBVoltage;
IVP.Power = Read_IIC(0x03)*LSBPower;
for( i=1;i<=100;i++)
{
if(new_data-old_data>0)
new_flag=1;
else new_flag = 0;
if (new_flag == old_flag)
{
if(new_data-old_data>Threshold_1)
num_x+=5;
else if(old_data-new_data>Threshold_1)
num_x+=5;
if(num_x>=Threshold_2)
{ k_x+=0.2;
num_x=0;
}
else
{
num_x=0;
k_x=0.01;
}
}
else
{
num_x = 0;
k_x = 0.2;
old_flag = new_flag;
}
if (k_x > 0.95) k_x = 0.95;
new_data = (1-k_x) * old_data + k_x * new_data;
// new_data = k_x* old_data + (1-k_x) * new_data;
old_data=new_data;
}
IVP.Current=new_data;
}
这是采集电流值写的程序,因为采的值有点偏,于是加了一个滤波。
加了滤波之后灵敏度降低了,采到的值很稳定,但是却和我想要的结果有了很大的误差,我测电压又没有问题,所以不知道这个程序是不是有什么问题,麻烦大佬能帮忙看看。
|
|