Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿El microcontrolador Singyang 61 y sus ventajas en el reconocimiento de voz?

¿El microcontrolador Singyang 61 y sus ventajas en el reconocimiento de voz?

El propio Lingyang MCU tiene función de reconocimiento de voz y no necesita expandir el módulo de reconocimiento de voz. Aunque tiene una pequeña función DSP, puede lograr la función de reconocimiento de voz. Aunque tiene una pequeña función DSP, también puede realizar funciones de reconocimiento de voz. Por ejemplo, robots comunes controlados por voz, automóviles controlados por voz, etc.

El audio del que hablamos se refiere a la señal de sonido con una frecuencia de 20 Hz ~ 20 kHz, que se divide en tres tipos: sonido de forma de onda, habla y música. Entre ellos, el sonido de forma de onda es el general. término para todos los sonidos de la naturaleza y es la base de la digitalización del sonido. El habla también se puede expresar como sonidos en forma de onda, pero los sonidos en forma de onda no representan la connotación del lenguaje o del habla. El habla es una abstracción de los sonidos del lenguaje. Es portador del lenguaje, un sistema de información único de la sociedad humana y un símbolo de herramienta de comunicación social. En comparación con el habla, la música está más estandarizada y es un sonido simbólico. Pero la música no puede simbolizar todos los sonidos. La notación musical es un conjunto de símbolos que simbolizan el sonido y representan un contenido de información sonora más complejo que un solo símbolo.

El proceso de digitalizar (discretizar) formas de onda de sonido analógicas (continuas) para facilitar el procesamiento digital por computadora incluye principalmente muestreo y cuantificación.

La calidad del audio digital depende de dos parámetros importantes: la frecuencia de muestreo y los bits de cuantificación. Además, la cantidad de canales y el equipo de audio correspondiente también afectan la calidad del audio.

La cantidad de datos en la codificación de compresión de voz es: Cantidad de datos = (frecuencia de muestreo × número de bits de cuantificación) / 8 ( número de bytes) ×Número de canales.

El propósito de la codificación de compresión: lograr un almacenamiento y conversión de información de alta eficiencia mediante la compresión de información, es decir, expresar y transmitir información de sonido con la tasa de información mínima garantizando al mismo tiempo una cierta calidad de sonido.

La necesidad de codificación por compresión: en aplicaciones prácticas, la cantidad de datos de audio sin comprimir es muy grande, lo que hace que la transmisión o el almacenamiento no sean realistas. Por tanto, es necesario comprimir la información prediciendo tendencias de señales y procesando información redundante, lo que nos permite construir más información con menos recursos.

Por ejemplo, un minuto de información a nivel de CD sin comprimir requiere 11 MB de capacidad de memoria para almacenarse. Si los datos originales se comprimen y los datos se comprimen a la mitad sin perder la calidad del sonido, el efecto de 5,5 MB se puede restaurar por completo. En aplicaciones prácticas, puede elegir el algoritmo adecuado según sus necesidades.

Métodos comunes de codificación de compresión de audio:

1) Codificación de forma de onda: convierte la señal en el dominio del tiempo directamente en codificación digital e intenta mantener la forma de onda del habla reconstruida como la forma de onda del habla original. señal. El principio básico de la codificación de formas de onda es muestrear la voz analógica a una determinada velocidad en el eje del tiempo y luego cuantificar jerárquicamente las muestras de amplitud y representarlas mediante codificación. La decodificación es el proceso inverso, que consiste en decodificar y filtrar la secuencia digital recibida y restaurarla a una señal analógica.

Por ejemplo, modulación de código de pulsos (PCM), modulación de código de pulsos diferencial (DPCM), modulación delta (DM) y sus diversas modificaciones, como modulación de código de pulsos diferencial adaptativa (ADPCM), modulación incremental adaptativa ADM. (ADM), la codificación de transmisión adaptativa (ATC) y la codificación de subbanda (SBC) son tecnologías de codificación de formas de onda.

Las características de la codificación de forma de onda: alta calidad de voz y alta velocidad de bits, adecuadas para música y voz de alta fidelidad.

2) Codificación paramétrica: La codificación paramétrica, también conocida como codificación fuente, extrae los parámetros característicos de la señal fuente en el dominio de la frecuencia u otros dominios de transformación ortogonal, y los transforma en códigos digitales para su transmisión. La decodificación es su proceso inverso, es decir, la secuencia digital recibida se transforma para restaurar los parámetros característicos y luego se reconstruye la señal de voz en función de los parámetros característicos. Específicamente, la codificación paramétrica hace que la señal de voz reconstruida sea lo más precisa posible extrayendo los parámetros característicos de la señal de voz y codificándolos, pero la forma de onda de la señal reconstruida puede ser muy diferente de la forma de onda de la señal de voz original.

Por ejemplo, la codificación predictiva lineal (LPC) y varios otros tipos mejorados son codificación paramétrica. La velocidad de bits de esta codificación se puede comprimir a 2 Kbit/s-4,8 Kbit/s o incluso menos, pero la calidad de la voz sólo puede considerarse moderada, especialmente la naturalidad es baja.

Las características de la codificación paramétrica: alta relación de compresión, gran cantidad de cálculos, baja calidad de sonido y precio económico.

3) Codificación híbrida: la codificación híbrida utiliza tecnología de codificación de parámetros y tecnología de codificación de formas de onda. El desarrollo de las computadoras ha proporcionado una herramienta poderosa para la investigación de la tecnología de codificación de voz a gran escala y ultragrande. Los circuitos integrados a escala han proporcionado una poderosa herramienta para la codificación de voz y proporcionan la base para su implementación. Desde la década de 1980, la tecnología de codificación de voz ha logrado grandes avances, lo que ha dado como resultado una nueva generación de algoritmos de codificación, la codificación híbrida. Combina codificación de forma de onda y codificación de parámetros, supera las debilidades de la codificación de forma de onda y de la codificación de parámetros originales, combina sus respectivas fortalezas e intenta mantener la alta calidad de la codificación de formas de onda y la baja tasa de codificación de parámetros.

Por ejemplo, la codificación predictiva lineal excitada por impulsos múltiples (MPLPC), la codificación predictiva lineal excitada por impulsos de planificación (KPELPC), la codificación predictiva lineal excitada por libro de códigos (CELP), etc., son todas tecnologías de codificación híbrida. Sus velocidades de datos y calidad de sonido son intermedias entre la codificación paramétrica y de forma de onda.

En resumen, hay dos tendencias de desarrollo en la tecnología de compresión de audio:

1) Para ocasiones económicas y de baja fidelidad (como teléfonos), reducir la velocidad de transmisión de datos y mejorar la compresión. Comparar.

2) Busque tecnología de compresión compleja y de alta fidelidad (como CD).

7.1.5 Introducción a la tecnología de síntesis y reconocimiento de voz:

Según las funciones implementadas, la síntesis de voz se puede dividir en dos niveles:

(1) Vocabulario limitado Salida de voz por computadora

(2) Conversión de texto a voz (TTS: Text-to-Speech) basada en tecnología de síntesis de voz

Según diferentes niveles de funciones del lenguaje humano , síntesis de voz Se puede dividir en tres niveles:

(1) Síntesis de texto a voz (Text-to-Speech)

(2) Síntesis de concepto a voz (Concepto -to -Speech)

(3) Síntesis de intención de voz (Intention-to-Speech)

En los primeros días, solo el usuario específico, es decir, el usuario específico Se puede reconocer el modo de altavoz (Dependiente del altavoz, SD), los usuarios pueden identificar palabras para un hablante específico (que puede ser definido por el usuario, como el nombre de un marcador activado por voz) y el reconocimiento se puede realizar de forma sencilla y rápida. grabando las características de la voz del usuario. A medida que la tecnología madura, después de ingresar a la etapa de adaptación de voz SA (adaptación del hablante), los usuarios solo necesitan ingresar al núcleo de reconocimiento de voz y después de un período de entrenamiento de acento, pueden lograr una buena tasa de reconocimiento.

2) Modo Speaker Independent (SI), que los usuarios pueden utilizar y reconocer sin formación. Esta tecnología puede ser utilizada por cualquier persona en cualquier momento, independientemente del hablante, es decir, hombre, mujer, niños, ancianos.

Habla continua:

1) Reconocimiento de sonido de un solo carácter: Para garantizar que el sonido de cada carácter se pueda pronunciar correctamente, es necesario pronunciar cada carácter individualmente, lo que Es muy antinatural e inconsistente con el nuestro. Todavía hay una cierta diferencia en la forma continua de hablar.

2) Reconocimiento de frases completas: simplemente di lo que quieras decir directamente a tu velocidad habitual, sin hacer pausas en el medio. Este método es el más directo y natural, pero también el más difícil. En esta etapa, es difícil hablar continuamente. Aunque la tasa de reconocimiento y la tasa de precisión no son malas, aún es necesario mejorarlas. Sin embargo, hay demasiados homófonos en los caracteres chinos, por lo que casi todos los sistemas chinos actuales de reconocimiento de voz utilizan caracteres como base para juzgar si los homófonos son correctos o no.

El número de palabras que se pueden reconocer:

El número de bases de datos de vocabulario integradas también afecta directamente a su capacidad de reconocimiento. Por tanto, existen tres tipos de vocabulario para el reconocimiento de voz:

1) Vocabulario pequeño (10-100)

2) Vocabulario medio (100-1000)

3) Vocabulario ilimitado (es decir, dictáfono)

La compresión se divide en compresión sin pérdidas y compresión con pérdidas.

La compresión sin pérdida generalmente se refiere a: archivos de disco, con una relación de compresión baja: 2:1 a 4:1.

La compresión con pérdida se refiere a: archivos de audio/vídeo, la relación de compresión puede ser tan alta como 100:1.

Los algoritmos de compresión de audio de Sunplus se dividen en los siguientes tipos según las diferentes relaciones de compresión (consulte la sección de herramientas de compresión de voz):

SACM-A2000: 8:1, 8:1.25, 8: 1.5

SACM- S480: 80:3, 80:4.5

SACM- S240: 80:1.5

Clasificados por calidad de sonido: A2000>S480 >S240

El SPCE061A de Lingyang es un microcontrolador de 16 bits con función DSP. Tiene fuertes capacidades de procesamiento de información, una frecuencia de reloj máxima de hasta 49MHz y tiene las ventajas de una velocidad de computación rápida. Estas son sin duda adecuadas. Para la reproducción, grabación, reproducción, síntesis y reconocimiento de voz se proporcionan las condiciones.

SACM_A2000, SACM_S480 y SACM_S240 en el algoritmo de compresión Sungyang se usan principalmente para reproducción y se pueden usar para indicaciones de voz, mientras que DVR se usa para grabación y reproducción. Para la síntesis musical MS01, su algoritmo es relativamente engorroso y requiere conocimientos de teoría musical, orquestación y armonía. Por lo tanto, los entusiastas dedicados pueden visitar nuestro sitio web para conocer el contenido relevante. Aquí solo damos una introducción a sus funciones API y código de programa. ejemplos.

Hemos introducido algunos aspectos del reconocimiento de voz anteriormente. Aquí damos un ejemplo de SPCE061 que identifica específicamente al hablante SD (dependiente del hablante) para referencia de amigos interesados. SD es una muestra de voz entrenada por una persona. Solo puede reconocer los comandos de voz de una persona. La tasa de reconocimiento de los comandos de otras personas es muy baja o difícilmente puede ser reconocida por otras personas. F_BSR_DeleteSDGroup(0)

Descripción de la función Inicialización de SRAM.

Parámetro Este parámetro es un identificador utilizado para la identificación, 0 significa seleccionar SRAM e inicializarla. F_BSR_Train entrenamiento

La función describe la función de entrenamiento.

Parámetros

CommandID: ID de comando, que va de 0x100 a 0x105, cada conjunto de declaraciones de entrenamiento es único.

TraindMode: el número de tiempos de entrenamiento, que requieren que el usuario entrene una o dos veces antes de aplicar:

BSR_TRAIN_ONCE: requiere entrenamiento una vez.

BSR_TRAIN_TWICE requiere entrenamiento dos veces.

Valor de retorno Si el entrenamiento es exitoso, devuelve 0; si no hay sonido, devuelve -1; si se necesitan más datos de voz para el entrenamiento, devuelve -2 si el ambiente es demasiado ruidoso, devuelve -; 3; si la base de datos está llena, devuelve -4; si los dos comandos de entrada no son razonables, se devolverá -5; si el número de secuencia está fuera de rango, se devolverá -6;

Observaciones

① Antes de llamar al programa de entrenamiento, asegúrese de que el reconocedor se haya inicializado correctamente.

② Cuando el número de tiempos de entrenamiento es 2, los resultados de los dos entrenamientos deben ser diferentes, por lo que es necesario asegurarse de que los resultados de los dos entrenamientos sean cercanos.

③ Para mejorar la confiabilidad, es mejor corregir el programa Realizar entrenamiento dos veces; de lo contrario, los comandos reconocidos son propensos a generar ruido.

④ Después de llamar a la función, espere 2 segundos para comenzar el entrenamiento y cada comando solo se ejecutará 1,3 segundos, es decir, cuando el comando de entrenamiento supera los 1,3 segundos, solo son válidos los comandos de los primeros 1,3 segundos.

Parte de reconocimiento:

1) Formato API C: void BSR_InitRecognizer(int AudioSource)

ASM: F_BSR_InitRecognizer

Inicialización del reconocedor de descripción de función .

Los parámetros definen la fuente de entrada de voz. Entrada de voz a través de entrada analógica de voltaje MIC o LINE_IN.

Valor de retorno Ninguno.

2) Formato API C: int BSR_GetResult();

ASM: F_BSR_GetResult

Valor de retorno=R1

La descripción de la función obtiene la identificación datos en.

Parámetros Ninguno.

Valor de retorno

Devuelve 0 cuando no se reconoce el comando;

Devuelve -1 cuando el reconocedor se detiene sin inicializar o no activa el reconocimiento;

Devuelve -2 cuando falla el reconocimiento;

Devuelve el número de secuencia del comando cuando se reconoce el comando.

` Comentarios Esta función se utiliza para iniciar el reconocimiento, BSR_GetResult();

3) Formato API C: void BSR_StopRecognizer(void);

ASM: F_BSR_StopRecognizer

La descripción de la función detiene el reconocimiento.

Parámetros Ninguno.

Valor de retorno Ninguno.

Nota: Esta función se utiliza para detener el reconocimiento. Cuando se llama a esta función, la interrupción FIQ_TMA se desactivará.

Parte de la interrupción:

Formato API ASM:_BSR_InitRecognizer

Descripción de la función Se llama en la interrupción y envía la señal de voz al canal DAC a través de la interrupción para su reproducción. .

Parámetros Ninguno.

Valor de retorno Ninguno.

Nota

①Esta función se llama en la interrupción FIQ_TMA

②Cuando el programa principal llama a BSR_InitRecognizer, el reconocedor abrirá la interrupción FIQ_TMA con una frecuencia de muestreo de 8K Y comience a llenar los datos de voz muestreados en la cola de datos del reconocedor.

③ La aplicación necesita configurar el segmento del programa en FIQ_TMA:

.PUBLIC _FIQ

.EXTERNAL _BSR_FIQ_Routine //definir variables globales

.TEXT

_FIQ:

PUSH R1,R4 a [SP] // registra.to [SP] //registrarse en la protección de pila

R1 = [ P_INT_Ctrl]

CALL _BSR_FIQ_Routine //llamar subrutina

R1 = 0x2000 //borrar bit de indicador de interrupción

[P_INT_Clear] = R1

POP R1, R4 de [SP]; //registro establecido fuera de la pila

RETI

END

El siguiente es un ejemplo de reconocimiento de persona específica. :

En este programa, demostramos el reconocimiento de tonos secuenciales específicos de humanos entrenando con tres declaraciones (la primera es el nombre del activador). Los otros dos son comandos, que se reconocerán una vez completado el entrenamiento. Cuando se reconozca el nombre del activador, se emitirán comandos. En este momento, escuchará su propio conjunto de reacciones. Los comandos específicos son los siguientes:

**** ************ tren**************************** ********* *****

Solicitud para ingresar voz

------------------ ---------- ---------------------------------------- ---------- --------------------------

"Ingrese el nombre del activador.

""Guardia"

"Ingresa el primer comando""Disparar"

"Ingresa el segundo comando""¿Qué estás haciendo? "

"Por favor, repita" (este comando aparece cada vez que suena el pitido anterior)

"No se escucha ningún sonido" (este comando aparece cuando no se detecta ningún sonido)

p>"Los nombres ingresados ​​dos veces son diferentes" (este comando aparecerá cuando los nombres ingresados ​​dos veces sean diferentes)

"Comando

" El comando es en dos instancias diferentes" (este El comando ocurre cuando hay una diferencia entre las dos entradas)

"El comando es diferente en las dos instancias" (este comando ocurre cuando hay una diferencia entre las dos entradas)

"Por favor ingrese el primer comando""disparar.

(Este comando aparecerá cuando haya una diferencia entre los dos comandos de entrada)

"Listo, inicie el reconocimiento" (Cuando las tres declaraciones anteriores se entrenen con éxito, se ingresará el reconocimiento)

************************ Identificar*************************** *** *******************************************

Emitir un comando Responder

-------------------------------- ---------- ---------------------------------------- ---------- ------ --------

"Guardia" "está aquí"/"Señor"

" Disparado" "Disparado"

"¿Qué estás haciendo?" "Estoy patrullando"/"Estoy descansando"/"Estoy esperando a alguien"

Nota : ingrese 2-3 segundos después de que cada pitido finalice el comando, o emita el comando 2-3 segundos después de la última respuesta

#INCLUDE "bsrsd.h"

#DEFINE NAME_ID 0x100

#DEFINE COMMAND_ONE_ID 0x101

#DEFINE COMMAND_TWO_ID 0x102

#DEFINE RSP_INTR0

#Definir RSP_NAME 1

# Definir RSP_FIRE 2

#Definir RSP_GUARD 3

#Definir RSP_AGAIN 4

#Definir RSP_NOVOICE 5

#DEFINE RSP_NAMEDIFF 6

#DEFINE RSP_CMDDIFF 7

# DEFINE RSP_STAR 8

#DEFINE RSP_MASTER9

#DEFINE RSP_HERE 10

#DEFINE RSP_GUNSHOT 0

# DEFINE RSP_PATROL 11

#DEFINE RSP_READY 12

#DEFINE RSP.................

# DEFINE RSP_NOISY 14

//.............Todas las variables............. ...... ................................................. ................................................. ...

int gActivated = 0;

// Esta variable se utiliza para detectar si hay un comando de activación. Cuando hay una declaración reconocida como nombre de activación, posición 1.

int gTriggerRespond[] = {RSP_MASTER, RSP_HERE, RSP_MASTER};

//Respuesta del primer comando

int gComm2Respond[] = {RSP_PATROL, RSP_READY, RSP_COPY };

//Respuesta del segundo comando

extern void ClearWatchDog ();

int PlayFlag = 0;

void PlayRespond2(int Resultado)

//subrutina de reproducción de disparos

{

BSR_StopRecognizer();

SACM_A2000_Initial(1);

SACM_A2000_Play(Resultado, 3, 3);

while((SACM_A2000_Status()&0x0001) ! = 0)

{

SACM_A2000_ServiceLoop();

ClearWatchDog();

}

SACM_A2000_Stop ();

BSR_InitRecognizer(BSR_ MIC);

BSR_EnableCPUIindicator();

}

void PlayRespond(int Result) // subrutina de reproducción

{

BSR_StopRecognizer();

SACM_S480_Initial(1);

SACM_S480_Play(Resultado, 3, 3); /p>

while((SACM_S480_Status()&0x0001) != 0)

{

SACM_S480_ServiceLoop();

ClearWatchDog();

}

SACM_S480_Stop();

BSR_InitRecognizer(BSR_MIC);

BSR_EnableCPUInditor(); //iniciar monitoreo en tiempo real

}

int TrainWord(int WordID, int RespondID) //entrenamiento de comandos

{

int res;

PlayRespond(RespondID);

while(1)

{

res = BSR_Train(WordID,BSR_TRAIN_TWICE);

if( res == 0) break;

switch( res)

{

case -1: // No se detecta sonido

PlayRespond( RSP_NOVOICE);

return -1;

case -2: // Necesita volver a entrenar

PlayRespond(RSP_ AGAIN);

break;

case -3: //El entorno es demasiado ruidoso

PlayRespond(RSP_NOISY);

Return -1; > case -4: //La base de datos está llena

Devuelve -1;

case -5: //detecta una voz diferente

if(WordID == NAME_ID)

PlayRespond(RSP_NAMEDIFF); // nombre diferente ingresado dos veces

else

PlayRespond(RSP_CMDDIFF);// los dos comandos de entrada son diferentes

retorno -1;

caso -6://wro

ng número de serie

devuelve -1;

}

}

devuelve 0;

}

int main()

{

int res, timeCnt=0, random_no=0;

BSR_DeleteSDGroup(0); la memoria a la RAM

PlayRespond(RSP_INTR); // Reproduce el pitido para iniciar el entrenamiento

//..........Nombre del entrenamiento.... ........................

while(TrainWord(NAME_ID,1) != 0

//..........Entrenando el primer comando.......................

while(TrainWord( COMMAND_ONE_ID,2) != 0);

//.......Entrena el segundo comando....... ........ ..

while(TrainWord(COMMAND_TWO_ID,3) != 0

//.......Iniciar comando de reconocimiento.......... .............

BSR_InitRecognizer(BSR_MIC); //Inicialización del reconocedor

BSR_EnableCPUI Indicator();

PlayRespond( RSP_STAR); // Sonido del mensaje de reconocimiento de inicio de reproducción

while(1 )

{

random_no ++

if(random_no; >= 3) random_no = 0;

res = BSR_GetResult();

if(res > 0) // Reconocer comando

{

if(gActivated)

{

timeCnt = 0;

switch( res)

{

caso NAME_ID:

PlayRespond(gTriggerRespond[random_ no]);

break;

caso COMMAND_ONE_ID:

PlayFlag = 1 ;

PlayRespond2(RSP_GUNSHOT);

PlayFlag = 0;

gActivated = 0;

descanso;

caso COMMAND_TWO_ID:

PlayRespond(gComm2Respond[random_no]);

gActivated = 0;

}

}

else

{

if(res == NAME_ID)

{PlayRespond (gTriggerRespond[random_no]);

gActivated = 1;

tiempoCnt = 0;

}

}

}

> }

else if (gActivated)

{

if (++timeCnt > 450) // excede el temporizador

{ PlayRespond(RSP_NOVOICE);

gActivated = 0;

timeCnt = 0;

}

}

}

}

Programa de interrupción:

.PUBLIC _FIQ

.EXTERNAL _BSR_FIQ_Routine<

.EXTERNAL __gIsStopRecog // Valor de la variable = 0 Analizador ocupado

// = 1 Analizador detenido

.PUBLIC _BREAK,_IRQ0, _IRQ1, _IRQ2, _IRQ3, _IRQ4, _IRQ5, _IRQ6, _IRQ7

.

.EXTERNAL _PlayFlag

.INCLUDE s480.inc

.INCLUDE A2000.inc

.INCLUDE recurso.inc;

.INCLUDE hardware.inc;

.EXTERNAL _PlayFlag

.TEXT

_FIQ:

Empuje R1, R4 a [SP]

R1 = [P_INT_Ctrl]

R1 &= 0x2000

jz ?notTimerA //Si no es TIQ_TMA, entonces gire a

R1 = [__ gIsStopRecog]

jnz ?BSR_NotBusy

//[__gIsStopRecog] es 1, luego ingrese al procesamiento de reproducción

p>

Llamar a _BSR_FIQ_Routine // Si es 0, llamar a la subrutina de identificación

jmp ?BSR_Busy // Devuelve interrupción BSR_NotBusy: //Procesamiento de reproducción

R2 = [_PlayFlag]< / p>

jnz ?Play2000 //[_PlayFlag] de 1 es la reproducción de 2000

call F_FIQ_Service_SACM_S480; //para 0. Play480

jmp ?BSR_Busy // Volver a interrumpir Play2000://2000 reproducir subrutina

Llamar a F_FIQ_Service_SACM_A2000; BSR_Busy://volver a interrumpir

R1 = 0x2000

[P_INT_Clear] = R1

pop R1,R4 de [SP];

reti; notTimerA:

R1 = 0x8800;

[P_INT_Clear] = R1;

pop R1,R4 de [ SP];

reti;

.

pt type="text/javascript" src="../css/tongji.js">