Skip to the content
PCBKitNew board
2 layers142 × 92 mmVoxID, the printed circuit board in 3D

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

2

README

README.md

VoxID

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

EtapaAlcanceEstado
1ADC1 + TIM2 + DMA y círculos de preparaciónImplementada; funcionamiento general reportado en Ophyra. Mediciones de temporización pendientes.
2ADC a PCM y extracción MFCC de audio realImplementada y probada en PC; funcionamiento general reportado en Ophyra. Calibración y mediciones pendientes.
3Registro de tres prototipos MFCC por locutorImplementada y probada en PC; funcionamiento general reportado en Ophyra. Ajustes con varias personas pendientes.
4EEPROM M24C32 e identificación por distancia normalizadaImplementada 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 digitalConfiguración
EntradaPA2, ADC1_IN2, 12 bits
Muestreo16 kHz, TIM2 TRGO; reloj TIM2 de 84 MHz, PSC 0 y ARR 5249
Captura3 segundos, 48 000 muestras
DMADMA2 Stream0 Channel0, circular; dos mitades de 640 muestras
Tiempo entre mitades40 ms
Frame y avance400 muestras, 25 ms; avance de 160 muestras, 10 ms
ExtracciónHamming, FFT de 512, potencia, 26 filtros Mel, logaritmo y DCT-II
Resultado298 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

RutaResponsabilidad
C0DE/inc, C0DE/srcAlgoritmos DSP portables en C.
C0DE/testsPruebas numéricas y regresiones de voz, adquisición e interfaz.
C0DE/tests/supportHAL simulada, exclusiva para PC.
C0DE/ophyra/voxidFirmware principal de Ophyra.
C0DE/ophyra/voxid_testBenchmark sintético histórico; conserva la biblioteca INTESC que utiliza.
C0DE/outResultados locales de compilación, excluidos de Git salvo .gitkeep.
DOCSeguimiento y validación.
PCBProyecto KiCad voxid y archivos de fabricación versionados.
SIMPreparació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:

bash
make -C C0DE all
make -C C0DE test
make -C C0DE test test_voice.c
make -C C0DE clean

En 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

  1. Mantener el checkout completo del repositorio: el proyecto enlaza los ocho módulos DSP compartidos mediante rutas relativas.
  2. Importar C0DE/ophyra/voxid en STM32CubeIDE.
  3. Refrescar con F5, ejecutar Clean y Build Debug, y programar Ophyra.
  4. 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:

bash
python3 SIM/tests/comprobar_valores.py

Los 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
QtyValueFootprintReferences
7100nFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmCin1, Cref2, Cref3, Cref4, Cref5, Cref6, Cref7
6TestPointTestPoint:TestPoint_Bridge_Pitch7.62mm_Drill1.3mmTP1, TP2, TP3, TP4, TP5, TP6
510kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR17, R18, R19, R20, R21
4470nFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmC1, C2, C3, C4
3TL072Package_DIP:DIP-8_W7.62mm_SocketU1, U2, U3
21N5819Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD1, D2
21kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR16, R23
22.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR5, R15
222nFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmC6, C8
23.9kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR4, R14
2OffsetConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ4, J8
2v3.3Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ5, J7
11.05KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR22
11.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
1100kPotentiometer_THT:Potentiometer_Bourns_3296W_VerticalRV1
110nFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmC9
110uFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmCout1
11uFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmCaudio1
12.2nFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmC7
122uFCapacitor_THT:CP_Radial_Tantal_D5.0mm_P5.00mmCref1
13.3kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR3
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalRlim1
16.8kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR6
18.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR2
1820Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR10
1AudioConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ1
1AudioOutTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ6
1Conn_01x03TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mmVin1
1HPF_OConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1LM1117T-3.3Package_TO_SOT_THT:TO-220-3_VerticalU4
1LPFOConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1MicrophoneSensor_Audio:POM-2244P-C3310-2-RMK1

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 mmDw probe tht, the printed circuit board in 3D

    Dw probe tht

    felias-fogg/dw-link

    An Arduino-UNO-based debugWIRE hardware-debugger

    28 parts90GPL-3.0
  • 2 layersT41-Main+RF board V012, the printed circuit board in 3D

    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
  • 2 layers99.9 × 99.9 mmIsa debug card, the printed circuit board in 3D

    Isa debug card

    maniekx86/isa_debug_post_card

    8-bit ISA debug and POST card

    85 parts13GPL-3.0
  • 4 layers100 × 100 mmT41, the printed circuit board in 3D

    T41

    ai6ym/t41

    T41-EP SDT Files

    234 parts10
  • 4 layers98.5 × 82 mmPico2lvds, the printed circuit board in 3D

    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 mmEmbedded pcb, the printed circuit board in 3D

    Embedded pcb

    mvx-dev/morphing-airfoil

    UNSW DESN1000 morphing airfoil project

    32 parts6