

VoxID
Sistema embebido para identificar hablantes a partir de la palabra de referencia MARIPOSA.
- Size
- 142 × 92 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 59
- Nets
- 30
- Pads
- 115
- Tracks, vias
- 194, 0
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 16 Oct 2026
- Updated
- 5 Nov 2026
Overview
VoxID is an open-source printed circuit board by Sudo-Guts, from the Sudo-Guts/VoxID repository on GitHub. It is a 2-layer board of 142 × 92 mm with 59 parts on 30 nets, routed with 194 tracks and 0 vias.
It is built around the TL072 and LM1117T-3.3. Its parts include 17 resistors, 8 capacitors, 8 connectors, 4 ICs and 2 diodes.
Main components
2TL072
SOP-8-18V~18V 0℃~+70℃ 1.4mA 1.5nA 10V/us 10mV 2 2.5nA 3MHz 85dB SOP-8 Operational Amplifier ROHSGcoreOperational AmplifierLM1117T-3.3
TO-220-3L-40℃~+125℃@(Tj) 0.003%Vout 1 1.25V@(1A) 10mA 15V 1A 3.3V 75dB@(120Hz) Fixed Over Current Protection、Thermal shutdown Positive TO-220-3L Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSHGSEMIVoltage Regulators - Linear, Low Drop Out (LDO) Regulators
README
README.mdVoxID
Sistema embebido para identificar hablantes a partir de la palabra de referencia MARIPOSA.
La plataforma digital es Ophyra con STM32F407VGT6, pantalla ST7735 de 160 × 128 píxeles y cuatro pulsadores. El firmware principal está en C0DE/ophyra/voxid; el núcleo DSP compartido está en C0DE/src y C0DE/inc.
Etapas y estado
| Etapa | Alcance | Estado |
|---|---|---|
| 1 | ADC1 + TIM2 + DMA y círculos de preparación | Implementada; funcionamiento general reportado en Ophyra. Mediciones de temporización pendientes. |
| 2 | ADC a PCM y extracción MFCC de audio real | Implementada y probada en PC; funcionamiento general reportado en Ophyra. Calibración y mediciones pendientes. |
| 3 | Registro de tres prototipos MFCC por locutor | Implementada y probada en PC; funcionamiento general reportado en Ophyra. Ajustes con varias personas pendientes. |
| 4 | EEPROM M24C32 e identificación por distancia normalizada | Implementada y probada en PC; funcionamiento general y navegación de locutores confirmados por el usuario. Calibración pendiente. |
La interfaz permite registrar cuatro locutores, con tres prototipos de 13 coeficientes por locutor. Los perfiles se guardan en EEPROM y se recuperan en RAM al arrancar. La identificación compara una toma nueva con los tres prototipos de cada locutor y puede rechazar por distancia o ambigüedad. Los umbrales iniciales requieren calibración; el código no verifica la palabra pronunciada.
Adquisición y procesamiento
La cadena prevista comprende micrófono electret, preamplificación, filtros pasaaltas y pasabajas, adaptación de nivel al ADC y procesamiento digital.
| Parámetro digital | Configuración |
|---|---|
| Entrada | PA2, ADC1_IN2, 12 bits |
| Muestreo | 16 kHz, TIM2 TRGO; reloj TIM2 de 84 MHz, PSC 0 y ARR 5249 |
| Captura | 3 segundos, 48 000 muestras |
| DMA | DMA2 Stream0 Channel0, circular; dos mitades de 640 muestras |
| Tiempo entre mitades | 40 ms |
| Frame y avance | 400 muestras, 25 ms; avance de 160 muestras, 10 ms |
| Extracción | Hamming, FFT de 512, potencia, 26 filtros Mel, logaritmo y DCT-II |
| Resultado | 298 vectores de 13 coeficientes por toma |
voxid_config.h concentra los parámetros compartidos. La ISR notifica bloques; el bucle principal convierte ADC a PCM, elimina DC y procesa MFCC. Se usan buffers estáticos y no se guarda el audio completo.
La media MFCC utiliza únicamente frames cuya energía supera VOXID_VOICE_MIN_RMS. El umbral inicial es RMS 0.01 respecto de la escala completa y necesita calibración con voz y ruido medidos en la placa. Un ruido suficientemente intenso también puede superar este criterio. Si no se selecciona ningún frame, la captura puede ser válida, pero la UI muestra CON VOZ: 0 y no dibuja una media de voz.
Registro de locutores
REGISTRAR permite elegir un locutor y capturar tres tomas independientes. OK acepta cada toma válida y empieza la siguiente; en la tercera confirma el guardado verificado en EEPROM. BACK descarta el registro pendiente y conserva el perfil anterior si existía.
El mínimo inicial es de 20 frames seleccionados por toma, configurable en voxid_config.h y pendiente de calibración física. Una toma insuficiente o un error se repite sin avanzar. Consultar el flujo de etapa 3 y la persistencia e identificación de etapa 4.
Consulta de locutores
El menú ofrece IDENTIFICAR, REGISTRAR y LOCUTORES. En LOCUTORES, UP/DN selecciona uno de los cuatro espacios; se muestra su estado, cantidad de tomas y 13 MFCC por toma. OK abre las tomas de un perfil registrado. Dentro, UP/DN recorre TOMA 1/3, 2/3 y 3/3; BACK regresa al mismo locutor y otro BACK al menú. Los botones sin acción quedan sin texto y con el fondo inactivo de la paleta.
Cada toma tiene su propia gráfica C01..C12, normalizada a norma L2 unitaria y con escala fija -1..1; C00 queda fuera de la comparación. El identificador promedia las tres distancias, por lo que se conservan las tres referencias. La consulta usa RAM, sin capturar audio, reiniciar el DSP ni escribir EEPROM. Los perfiles ya guardados siguen siendo compatibles.
Identificación y EEPROM
I2C1 utiliza PB6/PB7 a 100 kHz para la M24C32 integrada. Cada locutor dispone de dos copias con versión y CRC: el reemplazo conserva la copia vigente hasta verificar la nueva. El arranque lee los perfiles sin formatear ni escribir. Un fallo de guardado permite reintentar la tercera toma sin volver a capturarla.
La distancia es el promedio de las tres distancias euclidianas entre vectores C01..C12 normalizados a norma L2 unitaria. Los valores iniciales son distancia máxima 0.35 y margen mínimo 0.05 respecto al segundo candidato. La pantalla muestra LOCUTOR nn, DESCONOCIDO, VOZ AMBIGUA, SIN LOCUTORES o VOZ INSUFICIENTE. UP/DN conserva el acceso a la gráfica MFCC y a las estadísticas ADC.
Los parámetros y la revisión DSP están en voxid_config.h; el formato y las comprobaciones describen sus límites y la calibración pendiente.
Organización
| Ruta | Responsabilidad |
|---|---|
C0DE/inc, C0DE/src | Algoritmos DSP portables en C. |
C0DE/tests | Pruebas numéricas y regresiones de voz, adquisición e interfaz. |
C0DE/tests/support | HAL simulada, exclusiva para PC. |
C0DE/ophyra/voxid | Firmware principal de Ophyra. |
C0DE/ophyra/voxid_test | Benchmark sintético histórico; conserva la biblioteca INTESC que utiliza. |
C0DE/out | Resultados locales de compilación, excluidos de Git salvo .gitkeep. |
DOC | Seguimiento y validación. |
PCB | Proyecto KiCad voxid y archivos de fabricación versionados. |
SIM | Preparación de grabaciones en MATLAB, antecedentes PSIM y experimentos SPICE; ver la guía. |
Compilar y probar en PC
Se necesitan GCC, GNU Make y objdump. Desde la raíz del repositorio:
make -C C0DE all
make -C C0DE test
make -C C0DE test test_voice.c
make -C C0DE cleanEn Windows con MinGW, usar mingw32-make en lugar de make. La ruta de ejecución y la limpieza tienen reglas para ambos sistemas; la verificación automatizada de esta revisión se realizó en Linux.
all comprueba la compilación y el enlace del núcleo portable y genera un ejecutable mínimo y su desensamblado. test ejecuta once pruebas: Frame, ventana, FFT, MFCC, voz, adquisición, interfaz, GFX, registro, persistencia e identificación. Las pruebas con HAL de PC no sustituyen las mediciones en placa.
Compilar el firmware
- Mantener el checkout completo del repositorio: el proyecto enlaza los ocho módulos DSP compartidos mediante rutas relativas.
- Importar
C0DE/ophyra/voxiden STM32CubeIDE. - Refrescar con F5, ejecutar Clean y Build Debug, y programar Ophyra.
- Seguir la validación de etapas 1 y 2, el registro de etapa 3 y la validación de etapa 4.
El Makefile de PC no genera firmware ARM. Si CubeMX regenera código, comprobar la configuración DMA del .ioc, la vinculación con ADC1 y el orden GPIO, DMA, ADC1, SPI1, TIM2, I2C1 y los GPIO PB6/PB7 de I2C1.
Hardware y simulaciones
main integra el firmware de las cuatro etapas, el diseño analógico de PCB/voxid.kicad_sch y PCB/voxid.kicad_pcb, sus archivos de fabricación y el trabajo de simulación. Se conserva pcb-sim para continuar los cambios de hardware y simulación; las ramas de etapas incorporadas se retiran sin borrar sus commits.
Los tres experimentos SPICE actualizados usan los dieciséis componentes comerciales de las cuatro secciones de filtro de la PCB. Desde la raíz, comprobar su correspondencia con:
python3 SIM/tests/comprobar_valores.pyLos antecedentes PSIM y los resultados históricos de filtros se conservan por separado en SIM. Deben repetirse los análisis AC, Monte Carlo y ruido con los valores vigentes. Las simulaciones, los Gerbers y los archivos KiCad no acreditan por sí solos mediciones físicas ni aprobación ERC/DRC o de fabricación.
La preparación de grabaciones en MATLAB lee archivos o una carpeta, selecciona un canal, retira la media y remuestrea a 16 kHz cuando hace falta. Exporta WAV, CSV y MAT sin modificar los originales. Sus grabaciones y resultados locales quedan fuera de Git. Esta preparación todavía no calcula MFCC ni identifica locutores; la ejecución de sus pruebas en MATLAB y la lectura de un MP4 real siguen pendientes. Consultar SIM/README.md para requisitos y comandos.
El usuario confirmó el funcionamiento general del firmware y la navegación LOCUTORES. Las mediciones de temporización, la calibración de umbrales y los ensayos de fallos en hardware requieren evidencia específica. Consultar el seguimiento para distinguir estos pendientes de la implementación y las pruebas en PC.
Parts
59| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100nF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | Cin1, Cref2, Cref3, Cref4, Cref5, Cref6, Cref7 |
| 6 | TestPoint | TestPoint:TestPoint_Bridge_Pitch7.62mm_Drill1.3mm | TP1, TP2, TP3, TP4, TP5, TP6 |
| 5 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R17, R18, R19, R20, R21 |
| 4 | 470nF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | C1, C2, C3, C4 |
| 3 | TL072 | Package_DIP:DIP-8_W7.62mm_Socket | U1, U2, U3 |
| 2 | 1N5819 | Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal | D1, D2 |
| 2 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R16, R23 |
| 2 | 2.2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R5, R15 |
| 2 | 22nF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | C6, C8 |
| 2 | 3.9k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R4, R14 |
| 2 | Offset | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J4, J8 |
| 2 | v3.3 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J5, J7 |
| 1 | 1.05K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R22 |
| 1 | 1.2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1 |
| 1 | 100k | Potentiometer_THT:Potentiometer_Bourns_3296W_Vertical | RV1 |
| 1 | 10nF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | C9 |
| 1 | 10uF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | Cout1 |
| 1 | 1uF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | Caudio1 |
| 1 | 2.2nF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | C7 |
| 1 | 22uF | Capacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mm | Cref1 |
| 1 | 3.3k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R3 |
| 1 | 4.7k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | Rlim1 |
| 1 | 6.8k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R6 |
| 1 | 8.2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R2 |
| 1 | 820 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R10 |
| 1 | Audio | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J1 |
| 1 | AudioOut | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm | J6 |
| 1 | Conn_01x03 | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mm | Vin1 |
| 1 | HPF_O | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | LM1117T-3.3 | Package_TO_SOT_THT:TO-220-3_Vertical | U4 |
| 1 | LPFO | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J3 |
| 1 | Microphone | Sensor_Audio:POM-2244P-C3310-2-R | MK1 |
Questions
How big is the VoxID PCB?
It measures 142 × 92 mm and has 2 copper layers, 1.6 mm thick.
What parts does the VoxID use?
59 parts, built around the TL072 and LM1117T-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the VoxID KiCad files?
From the Sudo-Guts/VoxID repository on GitHub, at the commit this page was made from: the board is PCB/voxid.kicad_pcb and its schematic PCB/voxid.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the VoxID design in my own project?
Its repository states no licence, so its author keeps all rights: ask Sudo-Guts before reusing the design.
Similar boards
- 2 layers68.6 × 53.3 mm

- 2 layers

T41-Main+RF board V012
DRWJSCHMIDT/T41
This is the repository for the officially released V10, V11, and V12 versions of the T41 Software Defined Transceiver hardware and kits.
255 parts66 - 4 layers100 × 100 mm

- 2 layers99.9 × 99.9 mm

- 4 layers100 × 100 mm

- 4 layers98.5 × 82 mm

Pico2lvds
ceteras/PicoLVDS
Tested with B089AW01-V.0 and HSD089IFW1-A00-V1.0 on a breadboard. I'm sure it will work with other displays from old netbooks.
43 parts7GPL-3.0 - 2 layers54.5 × 77.5 mm

- 2 layers
