高斯函数具体怎么使用
我购买的一个RTU里面有这个给客户二次开发的高斯函数,但是我是菜鸟不太明白怎么使用,请教大神给我指点,谢谢。#if 1//(GAOSI_FILTER > 0)
/* 高斯滤波器 */
#define FILTER_MAXNUM 1000
uint16 filter_num;
uint8 filter_start = 0;
double filter_old;
double filter_buf;
/* 高斯滤波器,提供给客户二次开发 */
extern double gaosi_filter(double *pfb, uint32 num);
double filter_gaosi(double src)
{
if (filter_start == 0)
{
filter_start = 1;
filter_old = src;
filter_num = 0;
}
filter_num++;
if (filter_num < read_reg_n(40299) &&
filter_num < FILTER_MAXNUM)
{
filter_buf = src;
}
else
{
filter_num = 0;
filter_old = gaosi_filter(filter_buf, read_reg_n(40299));
}
return filter_old;
}
#endif
我在编写的C里面这样写的,但是不能用,请指教。
if (gen_zong==1)
{
liuliang22=filter_gaosi(liu_liang1);
she_ding22=gen_zongbi*(liuliang22/100.0 );
she_ding2= she_ding22;
}
这个liu_ling1运行之后有数据变化,但是经过函数之后的liulinag22一直为零,并且那个gen_zong已经设置为1了 我的想法是用第二个控制的数据跟踪第一个瞬时变化的流量,因为两个都是用PID调节,所以变化太快没法使用 怎么没有大神指教啊
你好,我不是很懂这装置,但是我对这些蛮感兴趣的,,你的liu_liang1经过函数filter_gaosi你说只输出零,那么从函数中看,只会是gaosi_filter出问题,但是那是人家的产品核心不应该有毛病,所以我认为是你调试机器过程中有什么偏差,比如read_reg_n的读数来源点,还有其他的需要外部设置的数值有问题,,,,
一般信号处理函数就是在于信号和处理方式,这个处理方式就是客户自己弄得,问题只会在这两个之间,这两个的值传给信号函数再处理返回一个函数指针继续处理,,,但是你的装置内置函数没有返回函数指针而是直接输出值,所以出问题就只会在信号来源和处理过程,再确认流量1的值真的有吗对吗,还有就是流量2是在流量1处理完就是零还是在跟某些地方又改动了,,,。。
不好意思,我也不了解但是很想知道答案,所以就这么思考的,如果你解答了,,给我讲一讲哟 谢谢,我还没有解决呢 我使用这个函数的想法是:因为这个liu_liang1是一个现场实时变化的浮点数,我要跟踪这个变化的量来PID调节需要跟踪的量,因为第一个是变化的,再去不加处理跟踪会变化大,来回调节不好处理。哪位大神有这方面的经验或者方法
页:
[1]