lqwuws 发表于 2017-12-25 20:37:11

高斯函数具体怎么使用

我购买的一个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了

lqwuws 发表于 2017-12-25 21:11:15

我的想法是用第二个控制的数据跟踪第一个瞬时变化的流量,因为两个都是用PID调节,所以变化太快没法使用

lqwuws 发表于 2018-1-1 08:23:32

怎么没有大神指教啊

李星 发表于 2018-1-1 12:59:36

你好,我不是很懂这装置,但是我对这些蛮感兴趣的,,你的liu_liang1经过函数filter_gaosi你说只输出零,那么从函数中看,只会是gaosi_filter出问题,但是那是人家的产品核心不应该有毛病,所以我认为是你调试机器过程中有什么偏差,比如read_reg_n的读数来源点,还有其他的需要外部设置的数值有问题,,,,

一般信号处理函数就是在于信号和处理方式,这个处理方式就是客户自己弄得,问题只会在这两个之间,这两个的值传给信号函数再处理返回一个函数指针继续处理,,,但是你的装置内置函数没有返回函数指针而是直接输出值,所以出问题就只会在信号来源和处理过程,再确认流量1的值真的有吗对吗,还有就是流量2是在流量1处理完就是零还是在跟某些地方又改动了,,,。。


不好意思,我也不了解但是很想知道答案,所以就这么思考的,如果你解答了,,给我讲一讲哟

lqwuws 发表于 2018-1-2 08:31:13

谢谢,我还没有解决呢

lqwuws 发表于 2018-1-2 08:40:32

我使用这个函数的想法是:因为这个liu_liang1是一个现场实时变化的浮点数,我要跟踪这个变化的量来PID调节需要跟踪的量,因为第一个是变化的,再去不加处理跟踪会变化大,来回调节不好处理。哪位大神有这方面的经验或者方法
页: [1]
查看完整版本: 高斯函数具体怎么使用