¿Es posible la síntesis de voz simple (solo dígitos 0-9) con Cortex-M0 + con flash de 4kB?

3

Estoy trabajando en un pequeño proyecto paralelo con el LPC810 (Cortex M0 + 32 bit ARM MCU, paquete DIP de 8 pines, 4kB flash, 1kB SRAM). Necesito una interfaz de usuario para transmitir al usuario un ajuste de temperatura. Solo tengo alrededor de 2 pines de repuesto para implementar la interfaz de usuario ... por lo que usar los LED es un desafío.

Tuve la idea de usar solo un pin para conducir un altavoz o un zumbador de peizzo y transmitir la temperatura en el habla. Sólo necesito los dígitos del 0 al 9 en inglés. Almacenar 0-9 en PCM está fuera de la cuestión con tan poco flash. Así que me preguntaba si alguien conoce el código de código abierto que permitiría una compresión muy alta de un pequeño diccionario de palabras. ¿Qué sería lo suficientemente ligero en la CPU / RAM para funcionar con una MCU de clase Cortex M0? (Tengo un fuerte presentimiento de que esto está fuera del alcance de las MCU Cortex M0 de gama baja sin memoria externa).

    
pregunta jdesbonnet

4 respuestas

5

Si bien esto puede no ser una respuesta completa, independiente y lista para usar, pero creo que puede obtener algunas ideas ingeniosas, implementarlas (o transferirlas) a Cortex-M0. Aquí asumo que, desde el punto de vista de recursos y potencia de cómputo, un Cortex-M0 tiene más que ofrecer que el popular AVR de 8 bits Atmel (ATmega328P) que se ejecuta en un Arduino.

Aquí hay 2 proyectos, que logran usar el pin PWM de Arduino y un circuito de filtro RC para reproducir la voz sintetizada. Por supuesto, no estamos viendo el audio de alta fidelidad, sino algo que es reconocible. También tenga en cuenta que, aparte de la necesidad de un pin compatible con PWM, su microcontrolador puede estar muy ocupado durante la síntesis, tanto que puede pasar la mayor parte de sus ciclos haciéndolo. El software PWM pondría más presión.

Ahora para los 2 proyectos:

PS > Personalmente, no los he implementado, pero los he buscado para un proyecto.

    
respondido por el jay
3
  

Necesito una interfaz de usuario para transmitir al usuario un ajuste de temperatura. Solo tengo alrededor de 2 pines de repuesto para implementar la interfaz de usuario ... por lo que usar los LED es un desafío.

Use los dos pines como I²C Bus y conecte un chip de expansión GPIO como MAX6956, que tiene 20 pines de salida en un paquete DIP de 28 pines. Eso es suficiente para unas pocas pantallas de 7 segmentos, y puede conectar más de un chip de expansión al bus.

    
respondido por el Turbo J
1

Puede ser posible escribir código que se ajuste a 4K que produzca un habla vagamente reconocible para los dígitos 0-9, pero probablemente sería más fácil definir patrones de pitidos para ellos. Es posible que se requiera una pequeña cantidad de entrenamiento para reconocer los patrones de pitidos (entre otras cosas, si está usando una notación posicional, saber cómo se transmitiría un cero) pero si todas las temperaturas son positivas, puede que no sea demasiado difícil definir un pitido. Secuencias para valores 90-10 y 9-1.

+90: XXXXX--XX--XX---
+80: XXXXX---X-X-X---
+70: XXXXX-X-X---
+60: XXXXX-X-
+50: XXXXX---
+40: XX--XX--
+30: X-X-X---
+20: X-X-
+10: X---

Cada "X" representa 50ms activados y 50ms desactivados, mientras que cada "-" representa 100ms desactivados. Para los valores 9-1, use las mismas cadencias que 90-10 pero un tono diferente. Los patrones de cadencia anteriores podrían almacenarse fácilmente en una matriz de enteros de 16 bits. Las secuencias anteriores se eligen no solo para permitir el conteo, sino también para ser reconocibles como patrones. Contar pulsos no rítmicos directos de hasta nueve puede ser un poco difícil, pero organizar las cosas que se contarán en agrupaciones ritmicas puede ayudar mucho.

    
respondido por el supercat
0

Si el espacio de la placa no es una limitación, una expansión de puerto A + algunos contadores (74HC161 o similar), una ROM de muestra externa y un DAC pueden implementar esto sin requerir mucho espacio de código.

    
respondido por el Lior Bilia

Lea otras preguntas en las etiquetas