view stat.c @ 265:da38cbbc7ec8

Add DDS clients test code To verify the portabiolity of the clients code and to make testing easier the test code is independent of the CVI environment and runtime.
author Daniele Nicolodi <daniele.nicolodi@obspm.fr>
date Sun, 21 Jun 2015 14:44:33 +0200
parents be87c8e78266
children
line wrap: on
line source

#include <ansi_c.h>
#include "stat.h"

void stat_zero(struct stat *s)
{
	s->samples = 0;
	s->mean = 0.0;
	s->slope = 0.0;
	s->previous = 0.0;
}


void stat_accumulate(struct stat *s, double value)
{
	s->samples += 1;
	if (s->samples > 1)
		s->slope = (s->slope * (s->samples - 2) + 6 * (value - s->mean) / s->samples) / (s->samples + 1);
	s->mean = ((s->samples - 1) * s->mean + value) / s->samples;
	s->previous = value;
}


void rollmean_zero(struct rollmean *s)
{
	s->nobs = 0;
	s->mean = 0.0;
	s->acc = 0.0;
	memset(s->prev, 0, sizeof(s->prev));
}


void rollmean_accumulate(struct rollmean *s, double value)
{
	s->acc = s->acc + value - s->prev[s->nobs % _ROLLMEAN_WLEN];
	s->prev[s->nobs % _ROLLMEAN_WLEN] = value;
	s->nobs++;
	if (s->nobs < _ROLLMEAN_WLEN)
		s->mean = s->acc / s->nobs;
	else
		s->mean = s->acc / _ROLLMEAN_WLEN;
}