¿Por qué una computadora de bicicleta calcularía la distancia con precisión pero la velocidad promedio de manera incorrecta?

6

Mi computadora de bicicleta que no es GPS, de otra manera confiable, calcula una velocidad promedio extremadamente inexacta para mis viajes matutinos. Después de mi viaje esta mañana, leí los siguientes valores de la pantalla (las unidades están en millas y millas por hora):

  • viaje dist: 1.70
  • tiempo de viaje: 00:06:29
  • velocidad promedio: 16.47
  • velocidad máxima: 23.86

Sin embargo, la velocidad promedio real es: 1.7 / (6/60 + 29/3600) = 15.73. El valor informado está apagado en casi un 5%. Esto me molesta porque me gusta establecer metas para mejorar mi velocidad promedio (para mi "entrenamiento de intervalo" impuesto por el semáforo), pero la inexactitud es mayor que los incrementos de 0.5 mph que alcanzo.

¿Asumiría que una computadora de bicicleta calcularía la velocidad promedio simplemente dividiendo "dist de viaje" por "tiempo de viaje"? ¿Qué es la computación y por qué es diferente del promedio real?

(levemente relacionado: ¿Por qué no se calculan las velocidades promedio sobre la distancia? )

amcnabb
fuente
3
¿Tu computadora deja de contar en las paradas? es decir: ¿es "tiempo de viaje" el tiempo total y su "tiempo de viaje" se encuentra en otro lugar? Hay una diferencia entre la velocidad promedio y la velocidad de movimiento promedio.
Ritch Melton el
Detiene la acumulación de tiempo en las paradas, pero también deja de actualizar la velocidad promedio en las paradas. Por lo que puedo decir, se supone que el "tiempo de viaje" y la "velocidad promedio" son el tiempo de movimiento y la velocidad de movimiento promedio.
amcnabb
44
Digo, si quiere decirme que lo estoy haciendo más rápido de lo que realmente soy, no voy a discutirlo.
Daniel R Hicks
¿Qué tipo de computadora es? GPS, GPS + sensor o simplemente la buena computadora vieja? Tal vez eso pueda ayudar a encontrar la fuente de la diferencia. Creo que el sensor GPS + es el más preciso, puede calibrar el tamaño de la rueda. El GPS solo puede ser susceptible a la pérdida de señal, como entrar en un túnel. Eso siempre da un salto en mi velocidad promedio porque pensé que me detuve al comienzo de un túnel y llegué al final a la velocidad de la luz.
imel96
1
@CareyGregory, pero si fuera por eso, empujaría la velocidad promedio a un nivel más bajo de lo esperado, no más alto.
PeteH

Respuestas:

16

Bien, esto realmente requiere cierto conocimiento de cómo funcionan estas pequeñas computadoras internamente. Las computadoras para bicicletas deben tener una potencia extremadamente baja, por lo que la forma más fácil de hacerlo es hacerlas muy simples. Las computadoras normales pueden usar números no enteros. Un número entero es 1,2,3,4, etc., no entero significa, por ejemplo, 1/2, 0.5762 o pi. Las computadoras usan los llamados números de punto flotante para representar números no enteros.

Sin embargo, los números de coma flotante son muy difíciles de usar para estas pequeñas computadoras en comparación con los enteros. ¡Entonces no lo hacen! Solo usan enteros para hacer todos los cálculos necesarios, y con muy pocas excepciones, todos están limitados a enteros de 8 bits. Un entero de 8 bits puede almacenar un valor de 0-255. Por lo tanto, cualquier cálculo (a) no será más preciso que un número entero (por ejemplo: dividir 8 entre 5 producirá 1 en lugar de 1.6 porque no puede representar números detrás del punto decimal) y (b) no puede exceder el rango de 0 -255.

Es aún peor: la mayoría de las computadoras de bicicleta ni siquiera pueden hacer matemáticas. Bueno, generalmente pueden sumar y multiplicar, pero no pueden dividir ni restar. En realidad, son cosas súper básicas, porque tienen que sobrevivir durante un par de años en el jugo en una sola celda.

Entonces, ¿cómo afecta esto al cálculo de la distancia, la velocidad y, finalmente, la velocidad promedio? Bueno, una computadora para bicicleta tiene solo 2 entradas: un temporizador muy preciso (que generalmente genera entre 1024 y 32768 pulsos por segundo) y una entrada de pulso desde un imán en su rueda. También sabe cuánto mide la circunferencia de su rueda. Entonces, para calcular su velocidad actual, hace lo siguiente:

  • espera un pulso de tu rueda
  • iniciar un temporizador
  • cuando llegue el siguiente pulso de la rueda, detenga el temporizador
  • divide la circunferencia de la rueda entre el tiempo y usa una tabla de búsqueda para convertir esto en algo legible para los humanos.

Entonces, digamos que el temporizador funciona a 1024Hz y la rueda de su bicicleta gira a aproximadamente 5 rotaciones por segundo (36 km / ho 22 mph). Esto significaría que contaría el piso (1024/5) = 204 tics de temporizador por rotación de la rueda. En el pequeño procesador hay una tabla de búsqueda que relaciona esos 204 ticks con el tamaño específico de la rueda (que programó) y luego encuentra la velocidad que debe mostrarse en su pantalla. En realidad no lo calcula, porque es muy difícil para ese procesador hacer tales cosas. Además, esta tabla solo necesita ser un par de tamaños de rueda por unas pocas decenas o tal vez 100 valores de tiempo diferentes. Por ejemplo, una tabla de 5x100, bastante pequeña en términos de computadora.

La distancia es muy fácil de calcular: simplemente multiplique la circunferencia de la rueda por el número de rotaciones. Luego use otra tabla de búsqueda para relacionar esto con algo visualizable. Esto también solo requiere una pequeña tabla de búsqueda.

Sin embargo, la velocidad promedio no es algo que se pueda poner en una tabla de búsqueda de tamaño razonable. Hay demasiados valores posibles de distancia de viaje y tiempo de viaje que pueden ocurrir. Entonces, estas computadoras tienen que hacer trampa de alguna manera: o necesitan usar las capacidades matemáticas muy limitadas que tienen, o necesitan redondear algunas cosas o buscar el valor promedio más cercano. Esto es exactamente lo que está haciendo la computadora de su bicicleta.

Hay computadoras para bicicletas más avanzadas, especialmente hoy en día. Con diseños más antiguos, realmente se podía ver esta naturaleza de operación de la tabla de búsqueda: podría mostrar, por ejemplo, 22.3 km / hy 22.5, pero no 22.4. ¿Por qué? No estaba en la tabla de búsqueda. No importa cuánto intente conducir exactamente a 22.4 km / h, en realidad nunca mostrará este valor. Además, los diseños más antiguos solo le permitirían ingresar el tamaño en pulgadas de sus neumáticos, no la circunferencia precisa real en mm.

Hoy en día, en realidad hay computadoras para bicicletas que pueden manejar operaciones matemáticas más "complejas" y usar mejores representaciones de números (enteros de 16 bits o números de coma flotante) para obtener una mejor estimación de su velocidad y promedios.

usuario36129
fuente
1
Esta respuesta hace un trabajo fantástico al explicar las limitaciones del procesamiento en una computadora de bicicleta. Pero creo que podría haber un poco más en el promedio porque la computadora de la bicicleta muestra velocidades promedio que cambian en incrementos de 0.1 mph, pero el error es mucho más alto que esto. ¿Hay alguna forma de usar una tabla de búsqueda para encontrar la velocidad promedio en intervalos de tiempo discretos y luego tiene alguna forma de "hacer trampa" para combinarlos?
amcnabb
Por supuesto, hay miles de millones de permutaciones de estos trucos de cálculo que pueden suceder para calcular promedios. Escribí esta respuesta para transmitir cómo estas computadoras 'engañan', pero el truco específico para este cálculo no está escrito en piedra ni nada.
user36129
1
No estoy seguro de que me guste su suposición sobre el uso de una tabla de búsqueda para la división. Hacer la división simple necesaria para calcular la velocidad promedio a 3 dígitos está dentro de las capacidades de un microprocesador simple. Es más probable que haya una programación descuidada en este caso o que se esté utilizando algún tipo de enfoque de "promedio de ejecución".
Daniel R Hicks
1
Debo aclarar más (y siéntase libre de editar esto de alguna manera significativa): solo estoy tratando de transmitir los tipos de 'trampa' que estos procesadores hacen para llegar a la potencia más baja absoluta. Las tablas de búsqueda son mucho, mucho más eficientes que una ALU. Especialmente en los diseños anteriores, estas cosas ni siquiera tenían forma de calcular nada, solo tenían contadores y tablas de búsqueda, implementadas en una cantidad ridículamente pequeña de transistores. No estoy afirmando que esta es exactamente la forma en que funcionan todas las computadoras de bicicleta ahora, sino solo tratando de que las personas tengan la mentalidad de estos dispositivos.
user36129
@ user26129 Dijiste que no puede restar. Ni siquiera estoy seguro de que los cpus más grandes tuvieran resta de hardware porque puedes restar sumando el complemento de dos del número. Además, incluso los cpus de risc de gama alta no tenían (¿no?) Operación de división. No veo cómo puedes ver la "tabla de búsqueda de la naturaleza de la operación". Si el punto flotante se emulara (con un entero de 8 bits), todavía mostraría el comportamiento como lo describe y esa es la naturaleza del punto flotante. Incluso en una CPU más grande se comportaría así, solo que menos notablemente.
imel96
3

Sospecho que el cálculo de la velocidad promedio se realiza con una precisión numérica insuficiente, por todas las razones detalladas en la otra respuesta (esencialmente, haciendo que la batería dure mucho tiempo)

Por ejemplo, supongamos que la distancia se almacena en metros y el tiempo en segundos, por ejemplo:

distance = int(1.7 * 1000) # in metres
time = int(6*60 + 29) # in seconds

Si quisiera calcular la velocidad promedio sin usar cálculos de punto flotante, mi primer intento podría ser este:

(distance*10 // time*10 * 36) / (10*10*10) # result: 15.48
# The `36` is (60sec*60sec) * 1000m to convert to m/s to km/h, multiplied by 10

..esto daría como resultado un valor de 15,48 km / h. Es probable que un dispositivo integrado realice el cálculo de manera bastante diferente y tenga diferentes limitaciones, pero esto muestra el problema general

Comparado esto con el equivalente de coma flotante:

float(distance) / float(time) * 3.6 # result: ~15.732

(nota: los cálculos anteriores se realizaron en Python 3, /es la división flotante, //es la división entera).

dbr
fuente
pero esto va en la dirección equivocada: 15.73 es la velocidad promedio que @amcnabb calcula a partir de la distancia y el tiempo medidos. 16.47 es el promedio. velocidad que calcula la computadora y que es mayor que el promedio. calculado "a mano". En su ejemplo, el cálculo de enteros empeoraría la situación.
Benedikt Bauer
@BenediktBauer Vaya, gracias por detectar mi, err, dislexia numérica ... pero, el punto principal fue demostrar cómo las limitaciones en el cálculo introducirían errores. Edité la pregunta para aclarar esto un poco
dbr
2

Creo que la clave radica en la corta distancia que recorre, ya que hay dos puntos de incertidumbre en la forma en que funciona su computadora que tienen un gran impacto si las distancias son cortas pero más o menos desaparecen para distancias más largas.

Primero veamos cómo funciona una computadora de bicicleta digital: básicamente hace dos cosas, ya que cuenta con qué frecuencia el pequeño imán de radio ha pasado su sensor, dándole (con conocimiento de la circunferencia de la rueda) la distancia recorrida, y mide el tiempo entre dos pasajes magnéticos para obtener la velocidad. Si el imán acaba de pasar, la computadora está esperando la próxima vez que pase, lo que significa que la computadora está sorda y ciega durante este tiempo.

Si detiene su bicicleta ahora, hay una situación incómoda para su computadora, ya que espera el próximo impulso del imán que pasa, que nunca llegará ya que la rueda ya no gira. Puede ver este momento en el temporizador de viaje de su computadora, ya que los segundos del cronómetro siguen contando durante aproximadamente 3 a 5 segundos, aunque ya está de pie. Este es el momento en que la computadora espera a que llegue el próximo impulso, pero no recibe ninguno.

Aquí se pone un poco especulativo: supongo que su computadora tiene básicamente dos contadores, uno para el número de rotaciones de las ruedas y otro para el tiempo necesario para esas rotaciones, mientras que el tiempo de viaje se ejecuta en un contador separado que es solo para la salida de tiempo pero no se toma en los cálculos. La diferencia entre el contador de tiempo de rotación (RTC) y el contador de cronómetro (SWC) es que el RTC contiene solo el tiempo en que la computadora puede decir con seguridad que la rueda estaba girando, mientras que el SWC también contiene el tiempo donde la computadora estaba esperando si la rueda sigue girando Como las computadoras de ciclismo se construyen principalmente para viajes más largos (donde normalmente no se detiene cada cinco minutos), esta discrepancia no tendrá un gran efecto allí, pero en su caso con un tiempo de medición muy corto, podría tener un gran efecto.

Si calcula a partir del promedio que tiene su computadora al tiempo que debería haber usado, obtendrá 6 min 12 seg, que es una diferencia de 17 segundos con respecto al tiempo de viaje de su computadora. Escribes algo sobre "entrenamiento de intervalos forzado por semáforos", así que supongo que tienes que detenerte en algunos de ellos. Si ahora asume que su tiempo de viaje contará entre 3 y 5 segundos adicionales en cada parada, solo tomará entre 3 y 5 paradas para obtener la diferencia horaria.

Benedikt Bauer
fuente