Puoi usare una super media, leggi 85 volte i tre sensori + 1 volta uno a caso e ottinei 256 letture che vanno sommate tra di loro, shifti a destra di 8 volte e sommi uno al volore ottenuto, cosi hai una bassisima media di errore.
questo è un codice che simula un adc che cresce di valori casuali e ritorna un valore letto tramite la funzione di gaus.
Leggendo 256 volte l'adc e ricavata la media + 1 allora si ottengono basse percentuali di errori, 0.0001% con errore a 1 e 25% con errore a 5:
#define DELTA 12
#define ERR 1
#define COUNT 10000
int val;
int adcRead(int teoricvalue, int err)
{
	return mth_randomgauss(teoricvalue,err);
}
int adcPrec(int nl, int po)
{
	int i,r;
	for ( i = 0, r = 0; i < nl; ++i ) 
		r += adcRead(val,ERR);
	return (r >> po) + 1;
}
		
int main()
{
	mth_initrandom();
	
	printf("Test\n");
	
	int i,adc=0;
	int ok = 0;
	int ap = 0;
	val = 0;
	for ( i = 0; i < COUNT; ++i )
	{
		con_cls();
		adc = adcPrec(256,8);
		
		if ( adc == val ) 
			++ok;
		else if ( adc + 1 == val || adc -1 == val ) 
			++ap; 
		
		printf("read:%5d err:(%5d)   ok:%5d/%5d/%5d err:%.5f%%   l:%5d/%5d\n",adc,val - adc,ok,ap,(i+1),(100.0 * (double)((i+1) - ok)) / COUNT,i+1,COUNT );
		
		if ( mth_random(1) || val <= 0 )
			val += mth_random(DELTA);
		else
			val -= mth_random(DELTA);
			
			
		con_flush();
		thr_sleep(0.001);
	}
	
	
	
	return 0;
}