A veces lo que parece simple no es tan simple. Tienes una medida bastante compleja que hacer, pero quieres un resultado simple. Lo que quieres medir no es constante, varía en el tiempo. Dependiendo de su nivel de requerimiento, podría calcular una o varias propiedades del consumo actual. Estas propiedades le ayudarán a controlar mejor el sistema. Te propongo 3 soluciones diferentes, en complejidad ascendente.
Solución 1: Promedio
Desea obtener un resultado de un solo valor - > obtener el promedio en el tiempo Como ya lo propuso @akellyirl, use un filtro de paso bajo. Calcule float y = alpha*input + (1-alpha)*y
para cada muestra, donde alpha
es el factor de suavizado. Consulte los detalles en Wikipedia .
Solución 2: Máx + Promedio
Estás interesado en obtener el promedio y el valor máximo. La supervisión del valor máximo podría ser interesante para el dimensionamiento de componentes, por ejemplo.
if (y > max)
max = y;
Solución 3: Desviación estándar + Máx + Promedio
¿Por qué?
Ver abajo las tablas. Hay 3 señales de diferentes formas. Un triángulo , un seno y una espiga . Todos son periódicos con el mismo período, la misma amplitud , la misma media y la misma min y max . Pero tienen formas diferentes y, de hecho, tienen una historia completamente diferente ...
Unadelasdiferenciasesladesviaciónestándar.Poresolesugieroqueamplíesusmedicioneseincluyaladesviaciónestándar.ElproblemaesquelaformaestándardecomputarloesconsumirCPU.Consuerte,hayunasolución.
¿Cómo?
Utiliceelmétodohistograma.Creeunhistogramadetodaslasmedicionesyextraigademaneraeficientelasestadísticas(mín,máx,promedio,desviaciónestándar)delconjuntodedatos.Elhistogramaagrupalosvaloresquetienenelmismovaloroelmismorangodevalores.Laventajaesevitaralmacenartodaslasmuestras(aumentandoelrecuentoeneltiempo)yteneruncálculorápidoenunnúmerolimitadodedatos.
Antesdecomenzaraadquirirmediciones,creeunamatrizparaalmacenarelhistograma.Esunamatrizdeenterosde1dimensión,detamaño32porejemplo:
inthisto[32];
Dependiendodelrangodelamperímetro,adaptelasiguientefunción.Porejemplo,sielrangoesde256mA,significaqueelintervalo0delhistogramaseincrementaráenunvalorentre0y8mA,elintervalo1enunvalorentre8y16mA,etc.Entonces,necesitaráunenteropararepresentarelnúmerodelabandejadelhistograma:
shortintindex;
Cadavezqueobtengaunamuestra,encuentreelíndicedelabandejacorrespondiente:
index=(shortint)floor(yi);
Eincrementaestabandeja:
histo[index]+=1;
Paracalcularlamedia,ejecuteestebucle:
floatmean=0;intN=0;for(i=0;i<32;i++){mean=i*histo[i];//sumalongthehistogramN+=i;//countofsamples}mean/=N;//dividethesumbythecountofsamples.mean*=8;//multiplybythebinwidth,inmA:Rangeof256mA/32bins=8mAperbin.
Paracalcularladesviaciónestándar,ejecuteestebucle:
floatstd_dev=0;for(i=0;i<32;i++){std_dev=(i-mean)*(i-mean)*histo[i];//sumalongthehistogram}std_dev/=N;//dividethesumbythecountofsamples.std_dev=sqrt(std_dev);//gettherootmeansquaretofinallyconvertthevariancetostandarddeviation.
Laestrategiadelmétododehistogramaeshacerlasoperacioneslentasenunnúmeroreducidodecontenedores,enlugardetodaslasmuestrasdeseñalesadquiridas.Cuantomáslargoseaeltamañodelamuestra,mejor.Sideseamásdetalles,leaestainteresantepágina The Histogram, Pmf and Pdf .