|
这是一个别人写好的防抖滤波程序
用于计算交流电压有效值防抖
形参num为通道号,Value为最小变化量
phase_result[num][i]为全局变量,保存8次测量有效值.
请高手分析他是怎么完成滤波功能的....
特别是
for (i = 0; i < 8; i++)
{
phase_result[num][i] = phase_result[num][result_channle];
}
这句,为什么全赋这个值.
uint queue(uchar num, uint value)
{
uchar i, j;
int queue_tmp[8];
long tmp,tmp1;
for (i = 0; i < 8; i++)
{
queue_tmp[i] = phase_result[num][i];
}
for (i = 0; i < 8; i++)
{
for (j = i; j < 8; j++)
{
if (queue_tmp[i] < queue_tmp[j])
{
tmp = queue_tmp[i];
queue_tmp[i] = queue_tmp[j];
queue_tmp[j] = tmp;
}
}
}
tmp = queue_tmp[2] + queue_tmp[3] + queue_tmp[4] + queue_tmp[5];
if (tmp > phase_result[num][8])
{
tmp1 = tmp - phase_result[num][8];
}
else
tmp1 = phase_result[num][8] - tmp;
if (tmp1 < value)
{
return (phase_result[num][8]);
}
else if (tmp1 < (value << 1))
{
phase_result[num][8] += (value >> 2);
return (phase_result[num][8]);
}
else
{
for (i = 0; i < 8; i++)
{
phase_result[num][i] = phase_result[num][result_channle];
}
phase_result[num][8] = (phase_result[num][result_channle] << 2);
return (phase_result[num][8]);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|