INFORME FINAL - Universidad Nacional del Callao.

Anuncio
UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
RECONOCIMIENTO DE VOZ PARA CONVERTIR EL DISCURSO
HABLADO EN TEXTO APLICANDO REDES NEURONALES
ARTIFICIALES
SALLY KARINA TORRES ALVARADO
(RESOLUCIÓN RECTORAL No 416-2010-R)
(01 de Abril 2010 – 30 de Setiembre 2011)
CALLAO 2011
1. RESUMEN
Como alternativa muy fácil y rápida de comunicación entre el usuario y una
maquina es el uso de lenguaje natural hablado.
Una de las primeras fases para la creación de interfaces inteligentes para las
maquinas con lenguaje natural hablado es la captura del los sonidos y convertirlos
a texto escrito.
Para esto es necesario capturar los sonidos en archivos de WAV (VER APENDICE
A) y procesar para extraer los datos (VER APENDICE B), que son señales de
forma particular de acuerdo a cada fonema capturado, esta diferencia de la señal
se utiliza para realizar el reconocimiento.
Como propuesta de solución al problema de reconocimiento de fonemas, en este
proyecto se propone el uso de redes neuronales artificiales, para lo cual se
necesita crear una red por cada fonema del lenguaje. De esta forma durante el
trascurso de fonemas emitidos, que forman palabras en un discurso en el tiempo
se activan una secuencia de redes neuronales correspondientes a los fonemas
reconocidos y pueden ser escritos en archivos de texto.
Para la implementación del procesamiento del sonido y las redes neuronales
artificiales se usa un lenguaje Visual C++ que permite una gran velocidad de
cálculo ya que requiere una gran cantidad de neuronas artificiales para cada
fonema.
2
2. INTRODUCCIÓN
La manera natural y más rápida de comunicación entre personas es el lenguaje
natural hablado, emitido como una secuencia de sonidos que conforma las
palabras y a su vez un conjunto de palabras forman un discurso que contiene
información.
La evolución de las interfaces hombre también se orientan a una comunicación
mediante el lenguaje natural hablado, lo que hace necesario desarrollar
innovadoras tecnologías que permitan convertir el discurso hablado en texto que se
pueda almacenar en una computadora en forma de archivo para luego realizar las
faces restantes de procesamiento de lenguaje natural.
Para convertir el discurso oral es necesario realizar un proceso de reconocimiento
de voz la cual es una tarea muy compleja debido a todos los requerimientos que le
son implícitos. Además del alto orden de los conocimientos que en ella se
conjugan, deben tenerse nociones de los factores inmersos que propician un
evento de análisis individual (estados de ánimo, salud, etc.).
La historia esencial de los sistemas de reconocimiento de voz se puede resumir
con los siguientes eventos:
• Los inicios: años 50’s

Bell Labs. Reconocimiento de dígitos aislados monolocutor.

RCA Labs. Reconocimiento de 10 sílabas monolocutor.

University College in England. Reconocedor fonético.

MIT Lincoln Lab. Reconocedor de vocales independiente del hablante.
3
• Los fundamentos: años 60’s – Comienzo en Japón (NEC labs)

Dynamic Time Warping (DTW – Alineación Dinámica en Tiempo -). Vintsyuk
(Soviet Union).

CMU (Carnegie Mellon University). Reconocimiento del Habla Continua.
HAL 9000.
• Las primeras soluciones: años 70’s - El mundo probabilístico.

Reconocimiento de palabras aisladas.

IBM: desarrollo de proyectos de reconocimiento de grandes vocabularios.

Gran inversión en los EE. UU.: proyectos DARPA.

Sistema HARPY (CMU), primer sistema con éxito.
• Reconocimiento del Habla Continua: años 80’s - Expansión, algoritmos para el
habla continua y grandes vocabularios

Explosión de los métodos estadísticos: Modelos Ocultos de Markov.

Introducción de las redes neuronales en el reconocimiento de voz.

Sistema SPHINX.
• Empieza el negocio: años 90’s - Primeras aplicaciones: ordenadores y
procesadores baratos y rápidos.

Sistemas de dictado.

Integración entre reconocimiento de voz y procesamiento del lenguaje
natural.
• Una realidad: años 00’s - Integración en el Sistema Operativo
4

Integración de aplicaciones por teléfono y sitios de Internet dedicados a la
gestión de reconocimiento de voz (Voice Web Browsers).

Aparece el estándar VoiceXML.
Algunos de los métodos usados son Bancos de Filtros, Codificación Predictiva
Lineal, Modelos Ocultos de Markov, Redes Neuronales Artificiales, Lógica Difusa,
Sistema de reconocimiento híbrido, etc.
Esta tecnología debe se eficiente en cuanto a uso de recursos de la computadora
por lo que se requiere métodos y principios sofisticados, que en la actualidad
ofrecen novedosos métodos de inteligencia artificial, específicamente las redes
neuronales
artificiales
se
caracterizan
por
el
baja
usos
de
recursos
computacionales.
En base a lo expresado, el problema de la presente investigación se plantea de la
siguiente forma:
¿Es posible convertir el discurso emitido por las personas en texto
realizando el reconocimiento de la voz aplicando redes neuronales
artificiales?
Planteándose como objetivo de Implementar el reconocimiento de voz mediante
redes neuronales artificiales que permitan convertir el discurso hablado de las
personas a texto, Para lo cual se:
a. Realiza la captura de la voz de un discurso en un formato digital mediante la
computadora.
b. Estudia las características de la voz que conforma el discurso.
5
c. Realiza el reconocimiento de voz para convertir el discurso hablado en texto.
Cabe destacar que la presente investigación se justifica ya que en la actualidad se
requiere de aplicaciones computacionales con interfaces inteligentes que sean
capaces de operar mediante órdenes habladas, capturar dictados, etc. Estas
aplicaciones requieren de un modulo que permita convertir el discurso hablado en
texto escrito. Uno de los métodos para lograr la conversión, es realizar
reconocimiento de voz aplicando redes neuronales artificiales.
En este contexto la presente investigación hace un gran aporte tecnológico ya que
permitirá implementar las aplicaciones que requieran capturar en forma escrita el
discurso hablado por las personas.
3. MARCO TEÓRICO
Para convertir el discurso hablado a texto escrito es necesario capturar el discurso
mediante un micrófono conectado a una computadora y guardarlo en el disco duro
en forma de archivo utilizando un aplicación en un formato que sea fácil de
manipular para lo cual se usa WAV (APÉNDICE A).
Los fonemas emitidos durante un discurso hablado forman señales, (APÉNDICE A)
en donde se pueden apreciar separados: por silencios los fonemas y por silencios
mas grandes las palabras.Esto se puede utilizar para separar los fonemas y
palabras.
Para reconocer los fonemas se aplica redes neuronales artificiales (JANG 2007)
de perceptrones que son muy eficientes para reconocer formas.
6
El pre – procesamiento de imágenes consiste en la obtención de los pixeles de la
imagen, binarización y expansión/reducción se utilizan algoritmos implementados
en un programa en Visual C++. La fase de expansión/reducción permite
estandarizar el tamaño de la imagen a uno predeterminado ya que la red neuronal
tiene un número predefinido de entradas.
El aprendizaje de la red neuronal consiste en ajustar los pesos de las entradas de
cada una de las neuronas, aplicando un método de backpropagation modificado, el
cual se basa en un método heurístico computacional, que modifica los pesos que
influyen en la salida correspondiente.
El funcionamiento del sistema consiste en realizar el pre - procesamiento de la
imagen de la voz, y realizar el algoritmo de cálculo de la red, el cual consiste en
calcular la sumatoria de los productos de las entradas de cada neurona, pasar por
la función de activación y propagar el resultado hacia delante hasta llegar a la capa
de salida. Este algoritmo esta implementado en Visual C++. El tiempo de
reconocimiento siempre es el mismo y no es afectado por el tipo de datos que se
ingresen al sistema.
El discurso genera un secuencia de fonemas en el tiempo (VER APENDICE B) los
cuales son reconocidos por un conjunto de redes neuronales artificiales que se
activan en una secuencia de acuerdo a la aparición de fonemas en el tiempo
mientras una persona habla una secuencia de palabras que conforman las frases
para comunicarse. Esta activación en secuencia de las diversas redes se utiliza
para escribir el resultado en un archivo de texto.
7
4. MATERIALES Y METODOS
4.1.
El Universo.- Son todas las organizaciones estatales y privadas donde se
necesiten aplicaciones que utilicen el modulo de conversión de discurso
hablado a texto escrito.
4.2.
Técnicas de recopilación de datos.- La presente investigación es de tipo
tecnológica – experimental, en la cual se utilizo las siguientes técnicas de
recopilación de datos:

Exploración conceptual y experimental para determinar la mejor
herramienta para capturar la voz del discurso hablado y guardarlo en
forma de archivo de sonido.

Exploración conceptual y experimental para determinar los fonemas que
conforman del lenguaje español hablado.

Exploración conceptual y experimental determinar las características de
la voz emitiendo los fonemas.

Exploración conceptual y experimental para determinar las herramientas
tecnológicas de programación para implementar la posible solución al
problema planteado en la presente investigación.

Para la contrastación de la hipótesis se utiliza resultados de la
implementación experimental de un prototipo que permite verificar la
conversión de los fonemas en texto.
8
4.3.
Técnicas estadísticas.- La presente investigación no requiere la aplicación
de técnicas estadísticas ya que el reconocimiento de voz no es un proceso
estocástico.
Cabe destacar que ninguna de las variables influyentes en la presente
investigación, tienen un comportamiento estocástico, excluyendo de esta
forma la aplicación de técnicas estadísticas.
4.4.
Materiales.- Para la realización del experimento es necesario los siguientes
materiales:

Computadora Core 2 DUO: Disco duro de 250 GB; RAM 2 GB; monitor;
teclado; o cualquier equipo superior.
4.5.

Micrófono para capturar el sonido.

Software de captura de sonidos.

Sistema operativo Microsoft Windows.

Lenguaje de programación Microsoft Visual C++.

Archivos WAV con los fonemas grabados por distintas personas.
Procedimiento.- Para ejecutar el experimento se debe:

Copiar el código fuente en la computadora con Visual C++ 6.00 en el
disco C desde la carpeta /voz del CD.

Ejecutar el programa con Visual C++ 6.00.

Hacer el proceso de aprendizaje de fonemas con el programa de
aprendizaje (APÉNDICE D).
9

Verificar
el
reconocimiento
de
fonemas
con
el
programa
de
reconocimiento (APÉNDICE E).
5. RESULTADOS
Mediante un micrófono conectado a una computadora y la aplicación grabadora de
sonidos de Windows, se capturo fonemas en formato WAV.
Utilizando el prototipo de programa en Visual C++ 6.00 (APÉNDICE C) que lee los
datos de acuerdo al formato WAV (APÉNDICE A) se construyo las imágenes de la
señal de sonido captada para cada fonema (APÉNDICE B) en los archivos WAV.
Estas imágenes nos permitió determinar, que cada fonema generaba una señal
semejante de diferente frecuencia, que depende de el tono de emisión del fonema,
es decir si es agudo la frecuencia es mayor o cuando es grave la frecuencia se
reduce.
En base a que la forma es la misma y solo difiere en la frecuencia
entonces se opto por aplicar un red neuronal de perceptrones (JANG 1997) que
nos permite reconocer formas, con facilidad para reconocer un fonema, salvo que
se tiene que hacer un estiramiento o encogimiento de la imagen para lograr una
forma estándar de cada fonema.
Utilizando el prototipo de programa en Visual C++ 6.00 (APÉNDICE D) se realizo el
proceso de aprendizaje de la red neuronal artificial para las imágenes generadas
por las cinco vocales (APÉNDICE B).
Y se comprobó el reconocimiento del
fonema con el prototipo en Visual C++ (APÉNDICE E).
De esta forma la presente investigación ha permitido comprobar que utilizando
redes neuronales artificiales es posible reconocer los fonemas que conforman el
10
lenguaje español los cuales a su vez forman palabras que conforman un discurso
hablado, al ser reconocidos estos fonemas se pueden escribir la secuencia de
letras reconocidas.
El resultado de la presente investigación genera la experiencia científica y
tecnológica en la implementación de sistemas de reconocimiento de voz mediante
redes neuronales artificiales en un lenguaje de programación común como es el
Visual C++ y lo mas importante es que se ha obtenido los algoritmos de
implementación.
Los resultados obtenidos durante la presente investigación demuestran la hipótesis
planteada.
6. DISCUSIÓN
Si bien muchas empresas de países desarrollados ofrecen aplicaciones de
reconocimiento de voz pero no existen aplicaciones de uso masivo, que integren
los sistemas operativos de las computadoras o sistemas en general y por otro lado
son aplicaciones cerradas donde no es posible saber cómo han sido realizadas lo
que nos dificulta la aplicación generalizada en sistemas computacionales.
En esta investigación se planteo resolver este problema de reconocimiento de voz
utilizando redes neuronales artificiales logrando obtener y probar el método para
implementar el reconocimiento de voz en cualquier lenguaje de programación.
De esta forma en la presente investigación se ha logrado cumplir con el objetivo de
implementar el reconocimiento de voz aplicando redes neuronales artificiales con
herramientas básicas de programación como es el Visual C++ y puede ser
11
desplazado a cualquier tipo de lenguaje de programación que tenga la posibilidad
de manejo de archivos y matrices, de esta forma no es necesario la adquisición de
costosas librerías desarrollada para tales fines, logrando el desarrollo tecnológico
en esta área.
Complementándose como un gran beneficio que ha sido implementado utilizando
las redes neuronales que requieren un bajo procesamiento, lo cual permite
implementar el sistema en computadoras personales de bajo costo lo que hace
posible la utilización de esta alta tecnología, y da acceso a organizaciones y
empresas con bajos recursos.
7. REFERENCIAS
7.1.
BATES, JON. TOMPKINS, TIM. microsoft Visual C++ 6, Madrid: Prentice
Hall Iberia S.R.L. 1ra, 1999.
7.2.
CEBALLOS, FCO. JAVIER. Microsoft Visual C++ 6 Programación Avanzada
en Win32, México: Alfaomega grupo editor S.A. 2da, 1999.
7.3.
Fayin, L. Wechsler, H. Open Set Face Recognition Using Transduction.
IEEE Transactions on Pattern Analysis and Machine Intelligence, November
2005, v.27 n.11, p.1686-1697.
7.4.
JANG, J. -S. R. SUN, C. –T. MIZUTAMI, E.
Neuro – Fuzzy and Soft
Computing A Computational Approach to Learning and Machine Intelligence,
Upper Saddle River: Pretice Hall INC., 1ra, 1997.
7.5.
NILS, J. NILSON. Inteligencia artificial Un nueva síntesis, Madrid: McGrawHill/Interamericana de España S.A.U., 1ra, 2000.
12
7.6.
OROPEZA RODRÍGUEZ J. Algoritmos y Métodos para el Reconocimiento
de Voz en Español Mediante Sílabas. Mexico, Computación y Sistemas Vol.
9 Núm. 3, pp. 270-286, 2006.
7.7.
Rowley, H. Baluja, S. Kanade T. Neural Network-Based Face Detection.
IEEE Transactions on Pattern Analysis and Machine Intelligence, January,
1998, Vol. 20, No. 1, pp. 23-38.
7.8.
STUART, RUSSELL. PETER, NORVING. Inteligencia artificial Un enfoque
moderno, México: Pretice Hall Hispanoamerica S.A., 1ra, 1996.
13
8. APÉNDICE
APÉNDICE A. Especificación de formato wave.
Descripción.- El formato wave es nativo de Windows y sirve para almacenar datos de
audio y es usado por la mayoría de aplicaciones de audio.
Estructura del archivo wave.- Los archivos wave usan el estándar RIFF, que
consisten en almacenamiento de datos
de audio en porciones separadas que
contienen su propia cabecera y datos. La cabecera de la porción contiene el tipo y el
tamaño de datos.
Cabecera del archivo wave.-
Los primeros 8 bytes contiene el identificador de
porción y el tamaño de los datos que es igual al tamaño de archivo menos 8 bytes.
Offset Size Description
Value
0x00
4
Chunk ID
"RIFF" (0x52494646)
0x04
4
Chunk Data Size (file size) - 8
0x08
4
RIFF Type
0x10
"WAVE" (0x57415645)
Wave chunks
Formato de la porción.- El formato contiene información sobre cómo está
almacenado los datos y como deben ser reproducido incluyendo el formato de
compresión, numero de canales, periodo de muestreo, bits por muestreo y otros.
Offset Size Description
Value
14
0x00
4
Chunk ID
"fmt " (0x666D7420)
0x04
4
Chunk Data Size
16 + extra format bytes
0x08
2
Compression code
1 - 65,535
0x0a
2
Number of channels
1 - 65,535
0x0c
4
Sample rate
1 - 0xFFFFFFFF
0x10
4
Average bytes per second 1 - 0xFFFFFFFF
0x14
2
Block align
0x16
2
Significant bits per sample 2 - 65,535
0x18
2
Extra format bytes
0x1a
1 - 65,535
0 - 65,535
Extra format bytes *
Códigos de compresión
Code
Description
0 (0x0000)
Unknown
1 (0x0001)
PCM/uncompressed
2 (0x0002)
Microsoft ADPCM
15
6 (0x0006)
ITU G.711 a-law
7 (0x0007)
ITU G.711 µ-law
17 (0x0011)
IMA ADPCM
20 (0x0016)
ITU G.723 ADPCM (Yamaha)
49 (0x0031)
GSM 6.10
64 (0x0040)
ITU G.721 ADPCM
80 (0x0050)
MPEG
65,536 (0xFFFF) Experimental
Datos de audio.- Contiene los datos de audio de cada muestra que debe ser
decodificada d acuerdo a método de compresión especificado en la cabecera.
Offset Length Type
Description Value
0x00
4
char[4] chunk ID
"data" (0x64617461)
0x04
4
dword chunk size
depends on sample length and compression
0x08
sample data
16
APÉNDICE B. IMÁGENES DE FONEMAS (Fuente: Elaboración propia)
Letra “a” aguda
Letra “a” grave
Letra “e”
17
Palabra “Papa”
Frase “Hola Papa”
18
APÉNDICE C. CÓDIGO FUENTE PARA LECTURA DE DATOS DE ARCHIVO WAV
DE LOS FONEMAS (Fuente: Elaboración propia)
x=fopen("o.wav","rb");
y=fopen("data.txt", "w");
if(!x){
exit(0);
}
else
{
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "ChunkID : %x\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "ChunkSize : %d\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "Format : %x\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "Subchunk1ID : %x\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "Subchunk1Size : %u\n", son);
fread(&faudio, sizeof(unsigned short int), 1, x);
fprintf(y, "AudioFormat : %u\n", faudio);
fread(&canales, sizeof(unsigned short int), 1, x);
fprintf(y, "NumChannels : %u\n", canales);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "SampleRate : %u\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "ByteRate : %u\n", son);
fread(&canales, sizeof(unsigned short int), 1, x);
fprintf(y, "BlockAlign : %u\n", canales);
fread(&canales, sizeof(unsigned short int), 1, x);
fprintf(y, "BitsPerSample : %u\n", canales);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "Subchunk2ID : %u\n", son);
fread(&son, sizeof(unsigned long), 1, x);
fprintf(y, "Subchunk2Size : %d\n", son);
fprintf(y, "Datos : \n");
datson=0;
datsona=0;
muestra=0;
muestraa=0;
cmuestra=0;
do{
cmuestra++;
fread(&datson, sizeof(unsigned short int), 1, x);
if ((cmuestra>=inigraf) & (cmuestra<=fingraf)){
muestra++;
pDC->MoveTo(xc1+exe*muestraa,yc1-eye*datsona);
pDC->LineTo(xc1+exe*muestra,yc1-eye*datson);
muestraa=muestra;
datsona=datson;
}
fprintf(y, "Datos : %d\n", datson);
}while (!feof(x));
fclose(x);
fclose(y);
}
APÉNDICE D. CÓDIGO FUENTE DE APRENDIZAJE DE LA RED NEURONAL
ARTIFICIAL (Fuente: Elaboración propia)
/* Definicion de la estructura de la red*/
sred[0]=4;
sred[1]=20;
sred[2]=40;
sred[3]=20;
sred[4]=1;
int ir=0;
for (int j=1;j<=sred[0];j++){
if (j==1){
for (int k=0;k<sred[j];k++){
rna[ir].m=(int)ancho*alto;
rna[ir].capa=j;
for (int p=0;p<rna[ir].m;p++){
rna[ir].peso[p]=rand()*0.000001;
}
rna[ir].k=1;
rna[ir].u=6000;
ir++;
}
}
else{
for (int k=0;k<sred[j];k++){
rna[ir].m=sred[j-1];
rna[ir].capa=j;
for (int p=0;p<rna[ir].m;p++){
rna[ir].peso[p]=rand()*0.000001;
}
rna[ir].k=1;
rna[ir].u=6000;
ir++;
}
}
}
int nred=0;
for (int j=1;j<=sred[0];j++){
nred=nred+sred[j];
}
fprintf(r,"\n\nEstrucutra de la Red\n\n");
fprintf(r,"Numero de neuronas de la red=%d\n",nred);
for (int j=0;j<nred;j++){
fprintf(r,"rna[%d].m=%d : rna[%d].capa=%d : rna[%d].k=%f\n",j,rna[j].m,j,rna[j].capa,j,rna[j].k);
}
/* Aprendizaje */
/* Calcular la red */
float res=CalculoRed(nred);
fprintf(r,"\nResultado=%f\n",res);
fprintf(r,"\nm=%d\n",rna[0].m);
fprintf(r,"\nu=%f\n",rna[0].u);
int ne=0;
float AP=0.005;
float ka=0.000001;
float na=0;
20
float error=0;
float res1=0;
unsigned int ni=0;
unsigned int nia=0;
float exe=dx/fx;
float eye=dy/pmax;
fprintf(r,"\nexe=%f\n",exe);
fprintf(r,"\neye=%f\n",eye);
pDC->MoveTo(xc1,yc1-eye*rna[nred-1].u);
pDC->LineTo(xc1+exe*fx,yc1-eye*rna[nred-1].u);
pOldPen=pDC->SelectObject(&myPen1);
do{
for (int j=0;j<nred;j++){
res=CalculoRed(nred);
if (res<rna[nred-1].u){
error=rna[nred-1].u+100-res;
if (rna[j].capa==1){
for (ne=0;ne<rna[j].m;ne++){
if (e[ne]>0){
rna[j].peso[ne]=rna[j].peso[ne]+error*ka*e[ne];
}
ni++;
}
}
else{
for (ne=0;ne<rna[j].m;ne++){
rna[j].peso[ne]=rna[j].peso[ne]+error*ka;
ni++;
}
}
}
pDC->MoveTo(xc1+exe*nia,yc1-eye*na);
pDC->LineTo(xc1+exe*ni,yc1-eye*res);
nia=ni;
na=res;
}
}while (res<rna[nred-1].u);
for (int j=0;j<nred;j++){
fprintf(r,"rna[%d].m=%d : rna[%d].capa=%d : rna[%d].k=%f\n",j,rna[j].m,j,rna[j].capa,j,rna[j].k);
for (int pp=0;pp<rna[j].m;pp++){
fprintf(r,"%f - ",rna[j].peso[pp]);
}
fprintf(r,"\n\n");
}
pDC->TextOut(600,300,"Fin de aprendizaje");
fclose(r);
21
APÉNDICE E. CÓDIGO FUENTE DE FUNCIONAMIENTO RED NEURONAL
ARTIFICIAL (fuente: Elaboración propia).
sred[0]=4;
sred[1]=20;
sred[2]=40;
sred[3]=20;
sred[4]=1;
arna = fopen("red.dat","w");
fread(rna,sizeof(rna),1,arna);
fclose(arna);
int nred=0;
for (int j=1;j<=sred[0];j++){
nred=nred+sred[j];
}
/* Calcular la red */
float res=0;
arna = fopen("red.dat","w");
fwrite(rna,sizeof(rna),1,arna);
fclose(arna);
res=CalculoRed(nred);
if (res<rna[nred-1].u){
pDC->TextOut(600,300,"No reconoce el fonema");
}
else{
pDC->TextOut(600,300,"Si reconoce el fonema")
}
float CalculoRed(int nred){
for (int n=0;n<nred;n++){
if (rna[n].capa==1){
rna[n].n=0;
for (int ne=0; ne<rna[n].m;ne++){
rna[n].n=rna[n].n+e[ne]*rna[n].peso[ne];
}
rna[n].a=rna[n].n*rna[n].k;
}
else{
int ni=0;
for (int cc=1;cc<rna[n].capa-1;cc++){
ni=ni+sred[cc];
}
rna[n].n=0;
for (int ne=0;ne<rna[n].m;ne++){
rna[n].n=rna[n].n+rna[n].peso[ne]*rna[ni].a;
ni++;
}
rna[n].a=rna[n].n*rna[n].k;
}
}
return rna[nred-1].a;
}
22
Descargar