← Índice del curso

Internet de las Cosas · Tema 9

Muestreo y frecuencia de lectura

¿Cada cuánto hay que medir? Si medís demasiado poco, te perdés lo que importa, y a veces ves oscilaciones que no existen. Si medís demasiado seguido, gastás batería, red y dinero para guardar datos repetidos. Este tema enseña a elegir la frecuencia con criterio, no por costumbre.

01 · Punto de partida

La pregunta que toda medición trae

Cualquier programa que lee un sensor tiene una línea que parece inocente: delay(60000), «medir cada minuto». Ese número sale casi siempre de la costumbre o de un tutorial, y define cuánta batería dura el dispositivo, cuántos datos genera la flota y, sobre todo, qué fenómenos pueden verse y cuáles quedan invisibles.

Medir es observar un fenómeno continuo en instantes discretos, como filmar el mundo con una cámara que toma una foto cada tanto. Si las fotos son lo bastante seguidas, la película reconstruye el movimiento. Si no, el movimiento se pierde o, peor, se deforma: parece otra cosa. Entender cuándo ocurre cada caso es lo que hace el teorema del muestreo.

Este tema enlaza con lo que ya vimos: el tema 1 mostró el compromiso entre medir y enviar, el 7 el costo energético de los sensores, y acá cerramos con el criterio para fijar la frecuencia.

02 · Tiempos

Tres frecuencias que no hay que confundir

Cuando alguien dice «el sensor mide cada minuto», puede referirse a tres cosas distintas, y mezclarlas es fuente de errores de diseño:

Tres frecuencias distintas en un dispositivo IoT.
FrecuenciaQué esValor típicoQuién la fija
Muestreo internoCada cuánto el conversor toma una lectura al medir (varias para promediar)Kilohertz, durante milisegundosEl conversor y el firmware
Lectura (muestreo del sistema)Cada cuánto el dispositivo se despierta y mide el fenómenoSegundos a horasLa dinámica de la variable (este tema)
EnvíoCada cuánto se transmite algo a la redMinutos a horas, o ante un eventoLa energía, el costo de datos y la urgencia

La idea más rentable del IoT es separarlas: leer según lo que exige el fenómeno y enviar según lo que exige la decisión. Un sensor de temperatura puede leerse cada minuto, calcular localmente el mínimo, el promedio y el máximo, y enviar un único mensaje cada 30 minutos. Se pierde casi nada de información y se transmite una treintava parte.

03 · Teoría

El teorema del muestreo y el aliasing

El teorema de Nyquist-Shannon dice que una señal cuya frecuencia más alta es f puede reconstruirse a partir de sus muestras si se toman a una frecuencia mayor que 2 × f. Dicho en tiempo: hay que medir más de dos veces por ciclo de la variación más rápida que interesa. A medir justo dos veces se lo llama límite de Nyquist, y es un mínimo teórico: en la práctica se toman de cinco a diez muestras por ciclo.

fmuestreo > 2 × fmáxima de la señal

Si se mide más lento, no solo se pierde detalle: ocurre el aliasing. Las muestras de una oscilación rápida se confunden con las de una oscilación lenta que no existe. El efecto es el mismo que hace que las ruedas de un auto parezcan girar hacia atrás en una película: la cámara toma pocas fotos por vuelta y el cerebro «reconstruye» un movimiento falso.

Aliasing al medir cada 15 minutos una oscilación de 20 minutos Una curva celeste muestra la temperatura real de una cámara que oscila con un período de 20 minutos. Cinco puntos naranjas por cada hora muestran las muestras tomadas cada 15 minutos. Una curva naranja punteada que pasa por todos los puntos tiene un período de 60 minutos: es la oscilación falsa que el dispositivo cree ver. 040 min80 min120 min Señal real: ciclo de 20 min Lo que ve el dispositivo (una muestra cada 15 min): ciclo falso de 60 min Con 15 min entre muestras hay menos de 2 muestras por ciclo: el ciclo se deforma

Un detalle que importa en IoT: el aliasing no tiene remedio una vez tomadas las muestras. Ningún filtro, algoritmo ni análisis en la nube puede distinguir la oscilación falsa de una verdadera. Hay que evitarlo al medir.

Y aparece otro caso insidioso: el ruido rápido. Si el cable del sensor capta la interferencia de 50 Hz de la red eléctrica y el dispositivo lee una sola vez por minuto, ese ruido no se ve como ruido: se convierte en un valor casi constante que suma un error fijo a la medida. La defensa es sobremuestrear: tomar muchas lecturas rápidas en cada despertar (por ejemplo, 16 a 64 en unos milisegundos) y promediarlas, lo que actúa como filtro, y recién entonces guardar un solo valor.

04 · Criterios

Cómo elegir la frecuencia

La regla de fondo es doble: medir al menos varias veces por cada cambio que interesa detectar, y no medir más rápido de lo que el sensor puede responder. Para ubicarse, ayuda pensar en la escala de tiempo de cada variable.

Escalas de tiempo típicas de algunas variables y frecuencias de lectura razonables. Son orientativas.
VariableCómo cambiaLectura razonablePor qué
Temperatura ambiente de una casaHorasCada 5 a 15 minutosVariación lenta por la inercia térmica
Humedad del sueloHoras a díasCada 30 a 60 minutosCambia con el riego y la lluvia
Temperatura de una cámara frigoríficaMinutos (ciclos del compresor, puertas)Cada 1 a 5 minutosHay que ver los ciclos y detectar aperturas
Nivel de un tanqueMinutos a horasCada 5 a 15 minutosLlenado y consumo graduales
Consumo eléctrico de un equipoSegundosCada 1 a 10 segundosLos arranques de motores son breves
Posición de un vehículoSegundosCada 1 a 30 segundosDepende de la velocidad y la precisión pedida
Vibración de un motorCientos de ciclos por segundoMiles de muestras por segundo, en ráfagasNyquist con frecuencias de cientos de hercios

El otro límite lo pone el propio sensor. Muchos sensores no responden al instante: se describen con una constante de tiempo τ, el tiempo que tardan en alcanzar el 63 % de un cambio. Para llegar al 95 % hacen falta unos 3τ. Un sensor de humedad con τ de 30 segundos no puede mostrar cambios de segundos, por más que se lo lea cada segundo; medir más seguido que τ aporta lecturas repetidas, no información nueva.

05 · Compromisos

Lo que cuesta medir de más y de menos

Los dos extremos tienen un precio, pero no el mismo tipo de precio. Medir de menos se paga en información perdida; medir de más, en recursos gastados.

Consecuencias de medir demasiado poco o demasiado seguido.
Si se mide…ConsecuenciaEjemplo
Demasiado pocoEventos breves que nunca se venUna apertura de puerta de 10 minutos con lecturas cada 30
Demasiado pocoAliasing: se ven fenómenos que no existenUn ciclo de 20 minutos medido cada 15 se ve como uno de 60
Demasiado pocoAlertas tardíasUna fuga se detecta media hora después de empezar
Demasiado seguidoBatería: cada despertar tiene un costo fijo1440 despertares por día en vez de 96
Demasiado seguidoDatos: red, nube y almacenamiento crecen en proporciónDe 0,35 MB a 5 MB por mes por equipo
Demasiado seguidoRuido de información: es difícil encontrar lo importantePaneles con millones de puntos repetidos

Para un evento de duración d y lecturas cada Δ, la probabilidad de captarlo es d / Δ cuando d es menor que Δ, y se capta siempre si d ≥ Δ. Un evento de 40 minutos con lecturas cada 60 se detecta en dos de cada tres casos; con lecturas cada 30, siempre. Es una cuenta que conviene hacer antes de fijar el período.

06 · Estrategias

Estrategias de muestreo

No hay que elegir entre «ahorrar» y «no perder nada». Las estrategias combinan lecturas frecuentes con envíos escasos:

  • Periódico. Una lectura cada Δ fijo. Es lo más simple y predecible, y el punto de partida.
  • Con resumen. Se lee con frecuencia y cada cierto tiempo se envía el mínimo, el promedio y el máximo de ese período, a veces con la hora del extremo. Conserva los picos, que son lo que más importa, y reduce el tráfico decenas de veces.
  • Adaptativo. Se lee y envía poco en calma y mucho cuando algo cambia. Por ejemplo, cada 15 minutos normalmente y cada minuto si la variable se acerca al umbral de alarma.
  • Por evento. El dispositivo duerme y un sensor de bajo consumo lo despierta por interrupción cuando se supera un umbral (un acelerómetro, un comparador, un interruptor). Es lo ideal para eventos raros.
  • En ráfaga. Raramente, y por un instante, muestrea a muy alta velocidad (por ejemplo, 2 segundos de vibración a 4 kHz), calcula resultados en el equipo y envía los resultados.

Las estrategias adaptativa y por evento son muy rentables, pero exigen un detalle: la decisión de medir más seguido tiene que tomarse en el dispositivo, sin esperar una orden de la nube, para no depender de una red que quizá no está.

07 · Tiempo

El tiempo de cada muestra

Una lectura sin hora es mucho menos útil. La marca de tiempo permite ordenar los datos, detectar huecos y reconstruir lo que pasó cuando hubo cortes de red. Tres cuidados:

  • Un reloj confiable. Los microcontroladores no tienen hora al encender. Se obtiene de Internet (protocolo NTP) o de un reloj de tiempo real, y se mantiene entre reinicios y sueños. Con deriva, el reloj interno se atrasa o adelanta segundos por día.
  • Hora universal. Las marcas se guardan en UTC y la conversión al huso horario se hace al mostrarlas. Evita errores con cambios de horario y viajes entre países.
  • Regularidad (jitter). Medir con delay() acumula atrasos en cada ciclo; un temporizador de hardware o la hora absoluta mantiene el ritmo. Para el aliasing importa más que el intervalo sea constante que que sea exacto.

Cuando los datos se acumulan en el dispositivo por falta de red y se envían después, la marca de tiempo se toma al medir y no al enviar. Si se pone la hora de envío, una ráfaga de datos atrasados parecerá un solo instante.

08 · Analogía con programación

Ver el aliasing en Python

El programa simula la temperatura de una cámara frigorífica que oscila con un ciclo del compresor de 20 minutos (4 °C de media, 1,5 °C de amplitud). Toma muestras durante un día con distintos intervalos y estima el período que «ve» el dispositivo: cuenta los cruces ascendentes por la media. Lo compara con el valor teórico del aliasing, calculado con la fórmula |f − k·fs|, donde k es el entero más cercano a f / fs.

Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.

import math

PERIODO_COMPRESOR_MIN = 20     # la temperatura de la cámara oscila con el compresor
MEDIA, AMPLITUD, FASE = 4.0, 1.5, 0.6


def temperatura(minuto):
    return MEDIA + AMPLITUD * math.sin(2 * math.pi * minuto / PERIODO_COMPRESOR_MIN + FASE)


def periodo_aparente(muestras, intervalo_min):
    """Estima el período que se ve en las muestras contando cruces ascendentes por la media."""
    cruces = sum(1 for a, b in zip(muestras, muestras[1:]) if a < MEDIA <= b)
    return None if cruces == 0 else len(muestras) * intervalo_min / cruces


def frecuencia_alias(f, fs):
    """Frecuencia que aparenta una señal de frecuencia f muestreada a fs (ambas por hora)."""
    return abs(f - round(f / fs) * fs)


F_REAL = 60 / PERIODO_COMPRESOR_MIN      # ciclos por hora
print("cada    muestras/día  máx    mín   período aparente   alias teórico")
for intervalo in (1, 5, 10, 15, 30, 60):
    muestras = [temperatura(m) for m in range(0, 1440, intervalo)]
    aparente = periodo_aparente(muestras, intervalo)
    fa = frecuencia_alias(F_REAL, 60 / intervalo)
    teorico = "—" if fa == 0 else f"{60 / fa:.0f} min"
    texto = "ninguno" if aparente is None else f"{aparente:.0f} min"
    print(f"{intervalo:>3} min {len(muestras):>10} {max(muestras):>6.2f} {min(muestras):>6.2f} {texto:>16} {teorico:>14}")

Resultado con los valores iniciales: midiendo cada 1, 5 o 10 minutos el período aparente es de 20 minutos, el real. Cada 15 minutos aparece un ciclo falso de 60 minutos, exactamente el valor teórico. Cada 30 minutos el programa estima 63 minutos (el teórico es 60; la diferencia se debe a los bordes del conteo con pocas muestras). Y cada 60 minutos las 24 muestras caen siempre en el mismo punto del ciclo: marcan 4,85 °C todo el día y el dispositivo cree que la cámara está quieta. Además, el máximo registrado depende del intervalo: 5,50 °C (el real) con muestras cada minuto, 5,24 °C cada 5 o 15 minutos y 4,85 °C cada 10, 30 o 60.

Dos conclusiones del modelo. Una: medir justo al límite de Nyquist (cada 10 minutos) conserva el período pero distorsiona la amplitud, que depende de la fase en que caen las muestras. Otra: medir de manera más lenta que el límite produce un resultado equivocado sin ningún aviso: el programa sigue funcionando y los números parecen razonables.

09 · Exploración interactiva

Qué ve el dispositivo, de extremo a extremo

Este laboratorio ejecuta el mismo modelo del código anterior y agrega una segunda señal, mucho más lenta, para comparar. Elegí la variable, cada cuántos minutos se mide y si se envía cada muestra o un resumen de 30 minutos. La curva celeste es la señal real; la naranja punteada, con círculos, es lo que reconstruye el dispositivo a partir de sus muestras.

Muestreo de una señal

Muestras por día—
Período que ve el dispositivo—
Máximo registrado—
Mensajes por día—
Resultado—

Elegí los parámetros y presioná «Muestrear».

Recorrido guiado

  1. Con los valores iniciales (cámara frigorífica, cada 15 minutos), muestreá. La señal real tiene ciclos de 20 minutos y el dispositivo ve uno de 60: «Aliasing». La curva naranja pasa por todos los puntos y es completamente distinta de la celeste.
  2. Pasá a 10 minutos: «En el límite». El período se ve bien (20 minutos), pero el máximo registrado es 4,85 °C contra 5,5 °C reales: la amplitud depende de dónde caen las muestras.
  3. Pasá a 5 minutos: «Fiel». Se ve el ciclo correcto y el máximo es 5,24 °C. Con 1 minuto el máximo llega a 5,50 °C, pero son 1440 muestras por día.
  4. Probá 60 minutos: el dispositivo ve un valor casi constante, sin ciclo. Las 24 muestras caen siempre en el mismo punto de la oscilación.
  5. Con medición cada 1 minuto, cambiá el envío a Resumen cada 30 min. Los mensajes bajan de 1440 a 48, y el máximo registrado sigue siendo 5,50 °C. Se mide con detalle y se transmite poco.
  6. Cambiá la variable a Temperatura ambiente (ciclo de 24 horas) y medí cada 1 minuto: «Fiel», pero con 1440 muestras para una señal que tarda un día en dar un ciclo. Con 60 minutos (24 muestras) el resultado es igual de fiel.
Desafío: cuándo se pierde una puerta abierta

La puerta de la cámara se abre durante 40 minutos. Con lecturas cada 60 minutos, la probabilidad de que alguna lectura caiga dentro de ese intervalo es 40 / 60 ≈ 67 %: una de cada tres veces la apertura pasa inadvertida. Con lecturas cada 30 minutos, el intervalo de 40 minutos contiene siempre al menos una lectura: 100 %. Y para una apertura de 10 minutos, se necesitarían lecturas cada 10 minutos para tener certeza. La frecuencia de lectura se decide según el evento más breve que no se puede perder, no según el ciclo normal de la variable.

10 · Método de trabajo

Cómo decidir la frecuencia de un sensor

Seguí estos pasos antes de escribir el delay:

  1. Definí el evento más breve que no podés perder (o el ciclo más rápido que querés ver) y su duración.
  2. Calculá el intervalo máximo: la mitad del ciclo más rápido como límite teórico, y un quinto o un décimo en la práctica; para un evento aislado, no más que su duración.
  3. Verificá la respuesta del sensor. Su constante de tiempo debe ser menor que el intervalo elegido, o medir más seguido no sirve.
  4. Revisá el ruido rápido. Si hay interferencias, sobremuestreá y promediá en cada despertar.
  5. Estimá el costo en energía, datos y almacenamiento para la flota completa.
  6. Separá la lectura del envío. Elegí un resumen o un envío por evento si el costo es alto.
  7. Agregá la marca de tiempo en el momento de la medición, con hora universal.
  8. Probá con datos reales. Registrá unas horas a alta frecuencia y compará con la configuración elegida: si no ves diferencias importantes, la elección es buena.

El último paso es el más convincente: una grabación breve a velocidad máxima te muestra qué hay realmente en la señal, y es la mejor base para decidir cuánto se puede relajar la frecuencia.

11 · Comprensión

Confusiones frecuentes

«Medir cada minuto es suficiente para casi todo»

Depende de la variable. Para la temperatura de una casa sobra; para el arranque de un motor es una eternidad. El valor de un minuto es una costumbre, no una regla: se calcula según el fenómeno.

«Si guardo más datos, después puedo corregir cualquier problema»

Más datos ayudan con el ruido, pero no con el aliasing: una oscilación mal muestreada no se recupera con ningún análisis posterior. La frecuencia de lectura debe ser correcta en el origen.

«Medir más seguido siempre es mejor»

Hasta cierto punto aporta información; después solo repite lo mismo y consume batería, red y almacenamiento. Y si el sensor responde en 30 segundos, leerlo cada segundo no revela nada nuevo.

«Si envío cada hora, tengo que medir cada hora»

No. Se puede medir cada minuto, calcular localmente un resumen (mínimo, media y máximo) y enviarlo cada hora. Así se detectan picos y eventos que una sola lectura horaria perdería.

«El teorema de Nyquist dice que alcanza con medir dos veces por ciclo»

Dice que es el mínimo teórico, bajo condiciones ideales y con una reconstrucción perfecta. En la práctica, con ruido y sin conocer la fase, se miden de cinco a diez veces por ciclo. Justo en el límite, la amplitud se distorsiona.

«La hora la pone el servidor al recibir el dato»

Con cortes de red y envíos atrasados, la hora de recepción no es la de la medición. La marca de tiempo se toma en el dispositivo en el momento de medir, o los datos pierden su orden y su significado.

12 · Práctica guiada

Predecí antes de comprobar

1. El límite de Nyquist

Una máquina vibra a 120 Hz. ¿Cuál es la frecuencia de muestreo mínima teórica? ¿Y la razonable en la práctica?

Ver solución

El mínimo teórico es más de 240 muestras por segundo. En la práctica se toman de 5 a 10 muestras por ciclo, es decir, entre 600 y 1200 muestras por segundo.

2. ¿Qué ve el dispositivo?

Una señal oscila con un ciclo de 20 minutos y se muestrea cada 30 minutos. ¿Cuál es el período aparente?

Ver solución

Frecuencia real: 3 ciclos por hora. Frecuencia de muestreo: 2 por hora. El alias es |3 − 2·2| = 1 ciclo por hora (también |3 − 2| = 1), es decir, un ciclo aparente de 60 minutos. Es una oscilación falsa que no existe.

3. El ruido de la red

Un cable largo capta interferencia de 50 Hz. El dispositivo lee una vez por minuto. ¿Cómo se ve el ruido y cómo se evita?

Ver solución

En un minuto caben exactamente 3000 ciclos de 50 Hz, así que cada lectura cae en el mismo punto del ciclo de la interferencia: el ruido se disfraza de valor casi constante y suma un error fijo (con una deriva lenta si el reloj no es perfecto). Se evita sobremuestreando (varias decenas de lecturas rápidas promediadas en cada despertar), filtrando por hardware o mejorando el blindaje del cable.

4. Detectar un evento

La puerta de una cámara se abre 40 minutos. ¿Con qué probabilidad se detecta con lecturas cada 60 minutos? ¿Y cada 30?

Ver solución

Cada 60 minutos: 40 / 60 ≈ 67 %. Cada 30 minutos: 100 %, porque el evento dura más que el intervalo. Para una apertura de 10 minutos haría falta medir cada 10 minutos o menos.

5. El volumen de datos

Un mensaje pesa 120 bytes. ¿Cuántos datos produce un equipo al mes enviando cada minuto, y cada 15 minutos? ¿Y enviando un resumen cada 30 minutos?

Ver solución

Cada minuto: 1440 × 30 = 43.200 mensajes por mes × 120 bytes ≈ 5,18 MB. Cada 15 minutos: 96 × 30 × 120 ≈ 0,35 MB. Resumen cada 30 minutos: 48 × 30 × 120 ≈ 0,17 MB. El resumen reduce el tráfico 30 veces respecto de enviar cada minuto, sin renunciar a medirlo.

6. Respuesta del sensor

Un sensor de humedad tiene una constante de tiempo de 30 segundos. ¿Cuánto hay que esperar tras un cambio para que muestre cerca del 95 % del valor nuevo? ¿Tiene sentido leerlo cada 5 segundos?

Ver solución

Hacen falta unos 3τ = 90 segundos. Leerlo cada 5 segundos no aporta información nueva, porque el sensor no puede reflejar cambios tan rápidos: serían lecturas repetidas que gastan energía. Si el fenómeno cambia en segundos, hay que elegir otro sensor, no medir más seguido.

13 · Síntesis

Ideas para recordar

  • No hay que confundir el muestreo interno del conversor, la frecuencia de lectura del dispositivo y la frecuencia de envío a la red: se eligen por separado.
  • El teorema de Nyquist exige muestrear a más del doble de la frecuencia más rápida que interesa; en la práctica, de cinco a diez muestras por ciclo.
  • Si se mide más lento, aparece aliasing: una oscilación rápida se disfraza de lenta, y ningún análisis posterior puede corregirlo.
  • El ruido rápido también se disfraza si se mide poco; sobremuestrear y promediar en cada despertar lo reduce.
  • La frecuencia de lectura se fija por el evento más breve que no se puede perder y por la respuesta del sensor, y no por costumbre.
  • Medir de menos pierde eventos y produce aliasing; medir de más gasta batería, red y almacenamiento sin aportar información.
  • Se puede medir seguido y enviar poco: resúmenes de mínimo, media y máximo, muestreo adaptativo, eventos por interrupción y ráfagas.
  • Cada muestra lleva su marca de tiempo tomada al medir, en hora universal y con un reloj confiable.

¿Listo para el tema 10?

Antes de avanzar, elegí una variable de tu entorno y respondé: ¿cuál es el evento más breve que no te podés perder? ¿Cuál es el ciclo más rápido que querés ver? ¿Cuál es la constante de tiempo del sensor? Con eso, calculá el intervalo máximo y comprobá cuánta batería ahorrás enviando un resumen en lugar de cada muestra.

En el próximo tema trabajamos la calibración, el filtrado y la calidad de la medida: ruido, promedios, offset, valores atípicos y lecturas inválidas, para que el dato que se envía sea confiable.