ESTADO: V0.7.0 MVP · DSP 100% PYTHON/NUMPY PURO · ZERO-SCIPY

Advanced Timegrapher

Modern Watch Escape Analyzer

Analizador acústico y cronocomparador de alta precisión para relojes mecánicos y de cuarzo. Mide en tiempo real la marcha (Rate en s/d), el error de batimiento (Beat Error en ms) y la amplitud (°) mediante procesamiento digital de señales (DSP) desacoplado, con calibración dinámica de la deriva del reloj de la tarjeta de sonido.

OS: macOS · Windows · Linux
Python: ≥ 3.12 (Pure NumPy)
Licencia: GPL-3.0-or-later
Audio: SPSC Lock-Free Ring Buffer
Precisión: Regresión Ponderada Theil-Sen
Resolución: Sub-muestra en P1 / P3
Horological Metrology Console · Real-Time Telemetry
Calibre:
Marcha (Rate) [OK]
+1.2s/d
Tendencia: estable (±0.2 s/d)
Error Batimiento (Beat Error) [P1]
0.1ms
Calculado en P1 (Mediana)
Amplitud (Amplitude) [LA: 51°]
295°
Tic: 294° · Tac: 296°
Frecuencia Nom. DSP
28,800bph
4.0 Hz · P: 125.0 ms
Deriva Reloj ADC Nivel 3
+0.00ppm
Compensación Host Activa
P1: Desbloqueo (Unlocking)
P2: Impulso (Impulse)
P3: Caída/Toque (Drop & Lock)
Cinta Continua Witschi (Paper Tape ms)
VENTANA: 30s · SNR: +34.8 dB · MUESTRAS: 48 kHz / 24-bit
Arquitectura por Capas · Docs v0.7.0

Ingeniería Horológica de Máxima Fidelidad

Diseñado desde cero con separación estricta de responsabilidades: captura sin bloqueos, motor DSP en Python puro y trazabilidad matemática total sin cajas negras.

Capa 1 & 2 · Audio & DSP

Motor Acústico DSP NumPy Puro

Procesamiento digital de señales 100% en Python/NumPy sin dependencias de SciPy ni extensiones C++ en tiempo de ejecución. Buffer circular lock-free SPSC (Single-Producer Single-Consumer) con indexación absoluta referenciada al reloj del convertidor ADC.

// SPSC Ring Buffer: cero pérdida de audio
index_abs = total_samples + write_head
residuos = t_host - (n / f_s)
  • Captura desacoplada en proceso hijo dedicado (PortAudio nativo).
  • La interfaz GUI jamás bloquea ni retrasa la ingesta de audio.
  • Detección de sobrescritura de muestras (`SamplesOverwritten`).
Capa 2 · Beat Detector

Análisis Tri-Pulsante del Escape

Identificación de los tres sub-eventos acústicos generados en cada alternancia por el volante, el áncora y la rueda de escape. Resolución temporal sub-muestra con discriminación automática de ruido.

t_lift = P3 - P1 (Tiempo de alzado)
A = LA / (2 · sin(π · f · t_lift))
  • P1 (Desbloqueo): La elipse entra en la horquilla.
  • P2 (Impulso): El diente empuja la paleta de alzado.
  • P3 (Caída): El diente choca en la bocallave y tope.
Capa 3 · Metrics Engine

Métricas con Regresión Ponderada

Cálculo de marcha y error de batimiento mediante regresión lineal robusta ponderada por paridad tic/tac con recorte a 5σ (MAD), eliminando los valores atípicos causados por ruidos mecánicos externos.

t_k = a + P·k + c·(-1)^k
Rate = (P_nom / P - 1) · 86400 [s/d]
Beat Error = 2·|c| [medido en P1]
  • Error de batimiento medido en P1 para fidelidad horológica absoluta.
  • Estimación de amplitud media, amplitud tic y amplitud tac independientes.
  • Ventana deslizante configurable de 10 s a 60 s con refresco a 4 Hz.
Capa 4 · Hardware Clock

Calibración de Deriva del ADC

Los cristales de las tarjetas de sonido USB tienen tolerancias de ±30 a ±100 ppm (1 ppm = 0.0864 s/d). Advanced Timegrapher mide y compensa esta desviación respecto al reloj del sistema o referencias externas.

1 ppm = 0.0864 s/d
+35 ppm sin corregir = error de +3.02 s/d
Calibración Theil-Sen con niveles 0 a 3
  • Soporte de pulsos de sincronización PPS por GPS (NEO-6M a 4 kHz).
  • Calibración automática o manual por dispositivo de audio.
  • Cero distorsión sistemática en la marcha calculada.
Capa 5 · Visualización Witschi

Cinta de Papel Virtual Continua

Representación fiel de los cronocomparadores de laboratorio clásicos: un punto por cada batimiento separado por paridad (tic / tac). La pendiente visual revela inmediatamente el atraso o adelanto en ms.

Renderizado PyQt6 / pyqtgraph
Líneas de 1 px sin antialiasing · 30 FPS
0 congelamientos de GUI (latencia < 33 ms)
  • Osciloscopio dinámico centrado en las ventanas P1 / P2 / P3.
  • Historial de cinta con autoescala y selector de zoom temporal.
  • Indicador de salud de captura y detección de saturación (clipping).
Extensibilidad & Compatibilidad

Modo Cuarzo & Base de Calibres

Modo especializado para movimientos de cuarzo paso a paso (1 a 16 pulsos/segundo). Base de datos horológica integrada (`watch_db.csv`) con parámetros de calibres legendarios.

ETA C07 (Powermatic 80): LA 51° · 21.6k
Miyota 9015: LA 51° · 28.8k · Seiko 4R36: LA 53°
Seagull ST1901: LA 47° (Verificado Weishi 1900)
  • Exportación e importación de grabaciones en FLAC de 24 bits.
  • Metadatos Vorbis / ICMT completos para trazabilidad técnica.
  • Soporte para micrófonos piezoeléctricos USB (CM18) y estándar.
Fundamento Físico del Escape Suizo de Áncora

Los Tres Impulsos Acústicos (P1, P2, P3)

Fórmula Amplitud: A = LA / [2 · sin(π · f · t_lift)]

En cada semioscilación, el conjunto oscilador produce tres transitorios acústicos sucesivos. Identificar con precisión micrométrica la ventana temporal entre P1 y P3 es el requisito físico esencial para deducir la amplitud de giro del volante sin recurrir a sensores ópticos o desensambles invasivos.

P1 · Desbloqueo
Entrada de la Elipse en la Horquilla

La elipse del platillo del volante impacta en la muesca del áncora y la desplaza para desbloquear el diente de la rueda de escape. Es el único sonido producido directamente por la inercia del volante. Por esta razón física, el error de batimiento se mide con rigor estricto en P1.

P2 · Impulso
Transferencia Dinámica de Energía

El diente de la rueda de escape resbala sobre el plano de impulso de la paleta del áncora. El áncora empuja la elipse del platillo, transmitiendo energía al volante para compensar la fricción. Es un sonido acústicamente difuso e irregular que la instrumentación Witschi omite en el cálculo de alzado.

P3 · Caída y Tope
Impacto de Paleta y Bocallave

El diente de escape cae sobre la paleta opuesta (Drop) y el brazo del áncora choca con violencia contra el pasador de tope limitador (Banking pin). Es acústicamente el evento de mayor amplitud y energía, utilizado como ancla temporal en el detector acústico.

Distribución & Empaquetado Multiplataforma

Instalación Rápida

Instaladores nativos listos para producción o despliegue en entorno Python puro.

macOS 11+ (Apple Silicon & Intel)

Instalador `.dmg`

Paquete universal empaquetado con PyInstaller, PortAudio nativo y soporte para pantalla Retina.

Terminal (macOS)
# 1. Descarga el archivo .dmg desde Releases # 2. Arrastra a /Applications # 3. En caso de aviso de Gatekeeper (build beta sin notarizar): xattr -cr /Applications/Advanced\ Timegrapher.app
Descargar .dmg
Windows 10 / 11 (64-bit)

Instalador `.exe` / Inno Setup

Instalador profesional guiado o binario portable en `.zip` con soporte para PortAudio WASAPI / MME.

PowerShell
# Extraer el .zip o ejecutar adv-tg-setup.exe # Si aparece SmartScreen: "Más información" -> "Ejecutar de todos modos" .\adv-tg.exe
Descargar Windows .exe
Linux & Python Pip Puro

Pip o RPM Package

Instalación estándar en cualquier distribución Linux (Debian, Ubuntu, Fedora, Arch) con Python ≥ 3.12.

Bash
# Requisito nativo: PortAudio sudo apt install libportaudio2 # Instalación vía pip pip install advanced-timegrapher adv-tg
Ver Paquetes Linux
DevSecOps & Software Supply Chain Security

Seguridad Proactiva y Protección de Buffer

Pipeline: GitHub Actions CI/CD · SAST + SCA

Advanced Timegrapher implementa medidas de endurecimiento continuo para prevenir desbordamientos de buffer, bloqueos de memoria y ataques a la cadena de suministro en el ecosistema de dependencias.

✓
Límite Rígido de Memoria de Audio:
Tope explícito `MAX_IN_MEMORY_BYTES = 8 GiB` para evitar agotamiento de RAM o ataques DoS por buffers descontrolados.
✓
Auditoría Estática SAST (Bandit):
Escaneo automatizado en cada pull request y despliegue para detectar deserializaciones inseguras o accesos a archivos no autorizados.
✓
Monitoreo Continuo SCA (Dependabot):
Supervisión proactiva de vulnerabilidades y CVEs en el ecosistema de paquetes (PyQt6, NumPy, SoundFile, sounddevice).
✓
Sanitización Rigurosa de Entradas:
Mitigaciones SEC-01 a SEC-11: protección contra inyección en CSV (`sanitize_csv_cell`), anonimización de logs y sanitización de rutas (`safe_filename_base`).