93
UNIVERSIDADE FEDERAL DE SANTA CATARINA Reconhecimento de Palavras Usando Redes Neurais Elton Vitor Seemann Florianópolis – SC 2006 / 1

Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

Embed Size (px)

Citation preview

Page 1: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

UNIVERSIDADE FEDERAL DE SANTA CATARINA

Reconhecimento de Palavras

Usando Redes Neurais

Elton Vitor Seemann

Florianópolis – SC

2006 / 1

Page 2: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

UNIVERSIDADE FEDERAL DE SANTA CATARINA

DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA

CURSO DE SISTEMAS DE INFORMAÇÃO

Reconhecimento de Palavras

Usando Redes Neurais

Elton Vitor Seemann

Trabalho de conclusão de curso apresentado como parte dos requisitos para obtenção do grau de Bacharel em Sistemas de Informação.

Florianópolis – SC

2006 / 1

Page 3: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

i

Elton Vitor Seemann

Reconhecimento de Palavras Usando Redes Neurais

Trabalho de conclusão de curso apresentado como parte dos requisitos

para obtenção do grau de Bacharel em Sistemas de Informação.

Orientador:

__________________________________ Prof. João Cândido Lima Dovicchi, Dr.

Coorientador:

__________________________________

Prof. Jovelino Falqueto, Dr.

Banca examinadora:

__________________________________ Prof. João Bosco da Mota Alves, Dr.

__________________________________ Wemerson Délcio Parreira, MSc.

Page 4: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

ii

Resumo

Neste trabalho são abordadas técnicas de processamento digital de sinais que

permitem analisar o conteúdo do sinal de voz, mais especificamente a transformada de

Fourier (Short-time Fourier Transform) e a transformada Wavelet (Wavelet Discrete

Transform). Quatro diferentes métodos de extração de características do som de

palavras são aplicados aos sinais e o resultado do reconhecimento usando uma rede

neural e aprendizado supervisionado é apresentado. Também são discutidos detalhes da

topologia e regra de aprendizado da rede para o problema do reconhecimento de

palavras isoladas.

WAVELET, PROCESSAMENTO DIGITAL DE SINAIS, PROCESSAMENTO DE VOZ, REDES

NEURAIS ARTIFICIAIS.

Page 5: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

iii

Abstract

This work describes techniques for digital signal processing that allow voice signal

analysis throuth its contents. These techniques use Short-time Fourier Transform

(STFT) and discrete Wavelet Transform (DWT). Four different methods of features

extraction were applied and results yielded were used in a supervisioned learning neural

network for recognition of words. Details of network topology and learning rules are

discussed to the problem.

WAVELET, DIGITAL SIGNAL PROCESSING, NEURAL NETWORKS.

Page 6: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

iv

Sumário

LISTA DE FIGURAS.............................................................................................................................................V

LISTA DE TABELAS.........................................................................................................................................VII

LISTA DE QUADROS...................................................................................................................................... VIII

1 INTRODUÇÃO..................................................................................................................................................9

1.1 APLICAÇÕES DIVERSAS...............................................................................................................................10 1.2 ESCOPO.......................................................................................................................................................11

2 REDES NEURAIS ARTIFICIAIS.................................................................................................................14

2.1 CONCEITOS BÁSICOS...................................................................................................................................15 2.2 TOPOLOGIAS DE REDE.................................................................................................................................18 2.3 TREINAMENTO ............................................................................................................................................19

2.3.1 A lei de aprendizado do Perceptron................................................................................................20 2.3.2 Adaline (adaptative linear element) ................................................................................................23 2.3.3 Problemas linearmente não-separáveis ..........................................................................................25 2.3.4 O Perceptron multicamadas............................................................................................................27

3 PROCESSAMENTO DIGITAL DE SINAIS................................................................................................30

3.1 TRANSFORMADA DE FOURIER ....................................................................................................................30 3.2 SHORT-TIME FOURIER TRANSFORM (STFT) ..............................................................................................33 3.3 TRANSFORMADA WAVELET .......................................................................................................................37

4 METODOLOGIA............................................................................................................................................43

4.1 AQUISIÇÃO DOS SINAIS DE ÁUDIO...............................................................................................................43 4.2 EXTRAÇÃO DE CARACTERÍSTICAS ..............................................................................................................45

4.2.1 Extração com STFT.........................................................................................................................45 4.2.2 Extração com DWT .........................................................................................................................48

4.3 O CLASSIFICADOR ......................................................................................................................................51

5 RESULTADOS ................................................................................................................................................54

5.1 RESULTADO COM CÁLCULO DE CENTRÓIDES ..............................................................................................54 5.2 RESULTADOS COM STFT............................................................................................................................56 5.3 RESULTADOS COM DWT ............................................................................................................................58 5.4 RESULTADOS COM DWT (MÉTODO B) .......................................................................................................60 5.5 COMPARATIVO ENTRE MÉTODOS DE EXTRAÇÃO.........................................................................................62 5.6 O SUPERTREINAMENTO ..............................................................................................................................64 5.7 RESULTADOS UTILIZANDO SOFTWARE DE TERCEIROS ................................................................................66

5.7.1 Multi Layer Perceptron ...................................................................................................................68

6 CONCLUSÕES................................................................................................................................................70

REFERÊNCIAS.....................................................................................................................................................72

APÊNDICE A – CÓDIGO FONTE DA REDE NEURAL USADA NOS EXPERIMENTOS ......................76

APÊNDICE B – ALGORITMOS DE EXTRAÇÃO USANDO STFT.............................................................81

APÊNDICE C – ALGORITMOS DE EXTRAÇÃO USANDO DWT .............................................................85

ANEXO A – CÓDIGO FONTE DA FFT............................................................................................................87

ANEXO B – CÓDIGO FONTE DA TRANSFORMADA WAVELET DAUBECHIES 4 .............................90

Page 7: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

v

Lista de Figuras

FIGURA 1.1 VISÃO SIMPLES DA PRODUÇÃO DA FALA (QUATIERI APUD (PARREIRA, 2005)) ................................... 12

FIGURA 1.2 ESPECTOGRAMA DA FALA, ADAPTADO DE (TRAUBE, 2006) ................................................................. 13

FIGURA 2.1 COMPONENTES BÁSICOS DE UMA REDE NEURAL ARTIFICIAL (KRÖSE & SMAGT, 1996) ....................... 16

FIGURA 2.2 FUNÇÕES DE ATIVAÇÃO (KOVÁCS, 1996)............................................................................................. 18

FIGURA 2.3 REDE DE CAMADA ÚNICA COM DUAS ENTRADAS E UMA SAÍDA ............................................................ 21

FIGURA 2.4 REPRESENTAÇÃO GEOMÉTRICA DA FUNÇÃO DISCRIMINANTE E DOS PESOS .......................................... 22

FIGURA 2.5 IMPLEMENTAÇÃO FÍSICA DO ADALINE ................................................................................................. 23

FIGURA 2.6 REPRESENTAÇÃO GEOMÉTRICA DO ESPAÇO DAS ENTRADAS ................................................................ 26

FIGURA 2.7 SOLUÇÃO DA FUNÇÃO XOR. ADAPTADO DE KRÖSE & SMAGT (1996) ................................................ 26

FIGURA 2.8 REDE MLP E A RETRO-PROPAGAÇÃO DOS ERROS (PATTERSON, 1995) ................................................ 28

FIGURA 3.1 AMOSTRAGEM EM FUNÇÃO DO TEMPO E SEU ESPECTRO (DOVICCHI 1999) .......................................... 31

FIGURA 3.2 JANELAMENTO DO SINAL ...................................................................................................................... 33

FIGURA 3.3 ELEMENTOS BASE DA STFT, ADAPTADO DE (CHAPLAIS, 1999). .......................................................... 34

FIGURA 3.4 EXEMPLO DE ELEMENTO BASE COM 10.5 PERÍODOS E JANELA DE HANNING ........................................ 35

FIGURA 3.5 ESPECTRO DO ELEMENTO BASE COM CORTE ABRUPTO (A) E JANELADO (B) POR FUNÇÃO DE

HANNING................................................................................................................................................ 35

FIGURA 3.6 ALGUMAS FUNÇÕES DE JANELAMENTO E SUAS TRANSFORMADAS COSSENO (WEISSTEIN, 2006A) ...... 36

FIGURA 3.7 ELEMENTOS BASE DA TRANSFORMADA WAVELET, ADAPTADO DE (CHAPLAIS, 1999)......................... 38

FIGURA 3.8 WAVELET MÃE 12Dψ , WAVELET COM ESCALA 1j −= E À DIREITA COM ESCALA 2j −= ............ 39

FIGURA 3.9 BANCO DE FILTROS DE 3 NÍVEIS............................................................................................................ 41

FIGURA 3.10 REPRESENTAÇÃO DA DWT NO DOMÍNIO DAS FREQÜÊNCIAS.............................................................. 41

FIGURA 3.11 ESTRUTURA LÓGICA DO RESULTADO DA DWT (KAPLAN, 2002) ....................................................... 42

FIGURA 4.1 GRAVADOR DIGITAL, A SETA VERMELHA INDICA O MICROFONE EMBUTIDO......................................... 43

FIGURA 4.2 DIFERENTES FUNÇÕES DE JANELAMENTO............................................................................................. 45

FIGURA 4.3 ESPECTRO DE FREQÜÊNCIA DE 7 FRAMES CONSECUTIVOS, EM VERMELHO O MESMO FRAME ............... 46

FIGURA 4.4 VALORES DAS CENTRÓIDES PARA (A) REPETIÇÕES DE UMA MESMA PALAVRA E (B) PALAVRAS

DIFERENTE .............................................................................................................................................. 46

FIGURA 4.5 ESPECTRO DE UM FRAME DIVIDIDO EM 5 REGIÕES................................................................................ 47

FIGURA 4.6 PROCESSO DE EXTRAÇÃO ..................................................................................................................... 47

FIGURA 4.7 FUNÇÃO WAVELET E FUNÇÃO ESCALONANTE DAUB4 ......................................................................... 48

FIGURA 4.8 EXTRAÇÃO: CINCO REPETIÇÕES, MESMA PALAVRA .............................................................................. 49

FIGURA 4.9 EXTRAÇÃO: CINCO PALAVRAS DIFERENTES.......................................................................................... 49

FIGURA 4.10 DIVISÃO DO PLANO TEMPO-FREQUENCIA RESULTANTE DA EXTRAÇÃO COM DWT ............................ 50

FIGURA 4.11 PROCESSO DE ORDENAÇÃO NO TEMPO PARA NÚMERO FIXO DE FRAMES POR SUB-BANDA.................. 50

FIGURA 4.12 TOPOLOGIA DO CLASSIFICADOR ......................................................................................................... 51

FIGURA 5.1CURVAS DE APRENDIZADO BASEADO NA EXTRAÇÃO DE CENTRÓIDES .................................................. 55

FIGURA 5.2 DISPERSÃO DOS VALORES DE SAÍDA DA REDE NO O CONJ. DE TESTE – EXTRAÇÃO DE CENTRÓIDES ..... 55

FIGURA 5.3 CURVAS DE APRENDIZADO BASEADO NA EXTRAÇÃO STFT ................................................................. 56

Page 8: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

vi

FIGURA 5.4 DISPERSÃO DOS VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – EXTRAÇÃO STFT ........................ 57

FIGURA 5.5 CURVAS DE APRENDIZADO BASEADO NA EXTRAÇÃO DWT.................................................................. 58

FIGURA 5.6 GRÁFICO DE DISPERSÃO DOS VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – EXTRAÇÃO

DWT ...................................................................................................................................................... 59

FIGURA 5.7CURVAS DE APRENDIZADO BASEADO NA EXTRAÇÃO DWT (MÉTODO B).............................................. 60

FIGURA 5.8 GRÁFICO DE DISPERSÃO DOS VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – EXTRAÇÃO

DWT (MÉTODO B) ................................................................................................................................. 61

FIGURA 5.9 VALORES DE SAÍDA DA REDE NO CONJUNTO DE TESTE – EXTRAÇÃO COM MUITAS DIVISÕES ............... 62

FIGURA 5.10 VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – EXTRAÇÃO COM POUCAS DIVISÕES .................... 63

FIGURA 5.11 CURVAS DE APRENDIZADO PARA 10000 ÉPOCAS ................................................................................ 64

FIGURA 5.12 VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – DIFERENTES NÚMEROS DE ÉPOCAS..................... 64

FIGURA 5.13 CURVAS DE TREINAMENTO COM EXTRAÇÃO DWT ............................................................................ 67

FIGURA 5.14 CURVAS DE TREINAMENTO COM EXTRAÇÃO DWT MÉTODO B .......................................................... 67

FIGURA 5.15 CURVAS DE TREINAMENTO COM EXTRAÇÃO STFT DE 155 DIVISÕES ................................................. 67

FIGURA 5.16 CURVAS DE TREINAMENTO COM EXTRAÇÃO STFT DE 35 DIVISÕES ................................................... 67

FIGURA 5.17 CURVAS DE TREINAMENTO COM EXTRAÇÃO DE 31 CENTRÓIDES........................................................ 68

FIGURA 5.18 CURVA DE APRENDIZADO DO MLP COM 3 NÓS NA CAMADA ESCONDIDA .......................................... 69

FIGURA 5.19 CURVA DE APRENDIZADO DO MLP COM 70 NÓS NA CAMADA ESCONDIDA ........................................ 69

Page 9: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

vii

Lista de tabelas

TABELA 1 TABELA VERDADE DO OU-EXCLUSIVO .................................................................................................... 25

TABELA 2 ESQUEMA DE GRAVAÇÃO DAS AMOSTRAS DE TESTE............................................................................... 44

TABELA 3 RESULTADOS DE CLASSIFICAÇÃO BASEADOS NO CÁLCULO DE CENTRÓIDES .......................................... 54

TABELA 4 3 RESULTADOS DE CLASSIFICAÇÃO BASEADOS NA STFT ....................................................................... 56

TABELA 5 RESULTADOS DE CLASSIFICAÇÃO BASEADOS NA EXTRAÇÃO DWT........................................................ 58

TABELA 6 RESULTADOS DE CLASSIFICAÇÃO BASEADOS NA EXTRAÇÃO DWT (MÉTODO B) ................................... 60

TABELA 7 ESTATÍSTICAS DOS VALORES DE SAÍDA DA REDE NO CONJUNTO DE TESTE – EXTRAÇÃO COM

MUITAS DIVISÕES.................................................................................................................................... 62

TABELA 8 ESTATÍSTICAS DOS VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – EXTRAÇÃO COM POUCAS

DIVISÕES................................................................................................................................................. 63

TABELA 9 ESTATÍSTICAS DOS VALORES DE SAÍDA DA REDE NO CONJ. DE TESTE – DIFERENTES NÚMEROS DE

ÉPOCAS ................................................................................................................................................... 65

TABELA 10 RESULTADOS UTILIZANDO ALGORITMOS DE REDES NEURAIS DO SAS.................................................. 66

Page 10: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

viii

Lista de Quadros

QUADRO 1 HISTÓRICO DO DESENVOLVIMENTO DE SOFTWARE DE PROCESSAMENTO DE VOZ.................................. 10

Page 11: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

9

1 INTRODUÇÃO

A área de Inteligência Artificial conhecida como processamento de voz teve seu

surgimento com a idéia de emitir ordens para o computador usando a fala. Desde o final da

década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse

processada pelo computador. E, antes mesmo da Internet ter alcançado popularidade,

empresas já estavam comercializando programas para PC's com tecnologia de voz.

Corriqueiramente, a expressão “reconhecimento de voz” é utilizada com vários sentidos,

que na verdade refere-se a tecnologias distintas. O processamento da voz pode ser aplicado

em quatro áreas principais: comandos por voz, fala natural, síntese de voz e autenticação por

voz.

O reconhecimento de palavras (ou comando de voz) processa um pequeno trecho de fala

para identificar que tipo de ação o sistema deve tomar. Em uma central de atendimento

telefônico, num palm, celular ou PC, o usuário pode usar a fala em vez de apertar botões.

O reconhecimento da fala natural envolve uma ou mais frases, ou seja, várias palavras que

tenham um sentido semântico. Na síntese de voz, o sintetizador recebe um texto e o

transforma em ondas sonoras, fazendo uma “leitura em voz alta”.

Já a autenticação se baseia no fato de que a voz é única para cada pessoa e pode ser

utilizada para identificar alguém. Os sistemas de autenticação podem ser aplicados para

permitir o acesso de uma pessoa a determinado recurso. Hoje vários sistemas estão sendo

usados de maneira comercial onde a porcentagem de reconhecimento correto pode chegar a

99% (Peacocke & Graf apud (Parreira, 2005)).

Page 12: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

10

Quadro 1 Histórico do desenvolvimento de software de processamento de voz

Final da década de 1950: Primeiras pesquisas tecnológicas para o reconhecimento de voz. 1964: IBM apresenta um sintetizador de voz para a fala de dígitos. 1978: A Texas Instruments lançou o primeiro chip dedicado à síntese de voz.

1993: IBM lança o primeiro software comercial para reconhecimento de voz, o IBM Personal Dictation System, para OS/2.

1993: Apple apresenta conjunto de rotinas para Mac, para reconhecimento e síntese de voz.

1993: Universidade Federal do Rio de Janeiro desenvolve Dosvox, com síntese de voz em português, para deficientes visuais usarem PC's com DOS.

1994: Dragon Systems apresenta o Dragon Dictate para ditados.

1996: IBM apresenta o MedSpeak/Radiology, primeiro produto para reconhecimento da fala contínua em tempo real.

1996: OS/2 Warp é o primeiro sistema a embutir comandos de voz.

1997: Dragon Systems lança o primeiro programa de uso geral para reconhecimento da fala contínua em inglês.

1997: IBM lança o ViaVoice, para fala contínua. 1998: IBM lança ViaVoice em português. 1998: MicroPower lança DeltaTalk, sintetizador de voz em português. 1999: Philips lança FreeSpeech 2000, com reconhecimento da fala em português. 1999: Lotus e Corel acrescentam recursos de voz a seus pacotes de aplicativos. 2000: L&H adquire Dragon Systems e lança L&H Dragon NaturallySpeaking 5.0.

2001: Telemar lança Vocall, primeiro serviço de voz aberto ao público, com síntese e reconhecimento da fala, para e-mails e agenda.

2001: L&H é colocada à venda, por se encontrar em grave crise financeira.

2001: Microsoft acrescenta recursos de voz (para ditados e comandos) ao Office XP. Na versão em português, essa facilidade está ausente.

Fonte: Revista PCWORD (Goya, 2002).

1.1 Aplicações diversas

Vários produtos podem ser encontrados no mercado de reconhecimento de voz, e novas

aplicações, como os portais de voz e outras aplicações dentro do CRM1, surgem a partir do

novo recurso de interface que a tecnologia de processamento de voz proporciona. A seguir,

alguns dos softwares disponíveis no mercado:

• Philips FreeSpeech, em português, não comercializado isoladamente para o usuário

final, mas apenas para parceiros que queiram integrar a solução a outros

aplicativos;

1 Customer Relationship Management

Page 13: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

11

• IBM ViaVoice em português, plataforma Windows. A versão Pro aceita ditados

em qualquer aplicativo do Windows e reconhece comandos de voz para navegação

no Windows e na Web. Faz ainda a conversão de texto em fala;

• IBM Home Page Reader, que faz a leitura de páginas da Web. Faz a leitura em voz

alta de toda informação contida na página, incluindo links, tabelas, ocorrência de

gráficos, texto em colunas, campos de entrada de dados e mapas clicáveis (IBM,

2006a);

• IBM Embedded ViaVoice Enterprise Edition Software Developers Kit, um

midleware que permite: Reconhecimento de fala natural; Vocabulários

independentes de locutor; Acesso ativo a bases de dados de voz de capacidade

ilimitada; Síntese de voz; Alterna dinamicamente ente idiomas na síntese de voz. A

IBM também oferece serviço de geração de bases de dados de voz (IBM, 2006b);

• Sistema Telephony, da IBM, acoplado a centrais telefônicas, para atendimento

automatizado;

• Portais de voz, como o Vocall, lançado pela Telemar em 2001 em São Paulo e Rio

de Janeiro. Permite ler e enviar e-mails, consultar agenda de endereços e

compromissos, e outros conteúdos de voz, como informações sobre o tempo,

temperatura e hora certa.

1.2 Escopo

Como vimos, a área de processamento de voz é bastante ampla, e soluções efetivas já se

encontram disponíveis. O tema deste trabalho abrange o reconhecimento de palavras isoladas

(ou comandos).

O problema de reconhecer palavras pode ser dividido em três partes: a aquisição do sinal,

a extração de características e a classificação. A aquisição envolve simplesmente a captura do

sinal sonoro e digitalização. A extração envolve o processamento digital do sinal a fim de

Page 14: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

12

extrair parâmetros que o representem o melhor possível, ou seja, características necessárias e

suficientes para o seu reconhecimento. A classificação consiste em fazer uso das informações

quantizadas (padrões) na construção de um modelo capaz de reconhecer novas ocorrências de

um conjunto pré-determinado de palavras, ou simplesmente classificar um sinal (quantizado)

em uma destas classes.

Figura 1.1 Visão simples da produção da fala (Quatieri apud (Parreira, 2005))

Quando falamos em reconhecer comandos de voz, estamos falando em classificar sinais

sonoros de diferentes palavras compostas por diferentes fonemas que, em nível mais básico,

possuem diferentes formas de onda e conteúdo de freqüência. Veja a figura 1.1: a voz humana

é produzida quando o ar expiratório (vindo dos pulmões) passa pelas pregas vocais, que por

nosso comando neural, por meio de ajustes musculares, faz pressões de diferentes graus na

região abaixo das pregas vocais, fazendo-as vibrarem.

Não podemos esquecer que voz é som, e som é igual à onda sonora. O ar expiratório, que

fez as pregas vocais vibrarem vai sendo modificado e os sons vão sendo articulados (vogais e

consoantes). Depois, emitidos pela boca e nariz, formam a onda sonora que vai atingir a

Page 15: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

13

cóclea do ouvinte. Diferentes fonemas apresentam diferentes regiões formantes, como é

mostrado na figura 1.2.

Figura 1.2 Espectograma da fala, adaptado de (Traube, 2006)

Neste trabalho abordaremos técnicas de processamento digital de sinais que permitem

analisar o conteúdo do sinal de voz. Uma vez extraídas estas características, partiremos para a

classificação (ou reconhecimento) usando redes neurais e aprendizado supervisionado.

Objetivos principais:

• Estudar e aplicar técnicas de processamento digital de sinais na extração de

parâmetros do sinal discreto de áudio; Avaliar diferentes técnicas;

• Avaliar o uso das redes neurais como classificador neste contexto; Escolher a

melhor arquitetura; Avaliar o resultado do conjunto (rede neural e método de

extração);

• Construção de um protótipo completo em linguagem Java (construído ao longo das

etapas citadas acima).

Page 16: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

14

2 REDES NEURAIS ARTIFICIAIS

A primeira onda de interesse nas redes neurais (também conhecidas por “modelos

conexionistas”) surgiu após a introdução dos neurônios simplificados de McCulloch e Pitts

em 1943 (McCulloch & Pitts, 1988). Estes neurônios foram apresentados como modelos do

neurônio biológico e como componente conceitual para circuitos capazes de executar tarefas

computacionais.

Em 1959 Frank Rosenblatt criou uma rede de múltiplos neurônios do tipo discriminadores

lineares e a batizou de rede perceptron. Rosenblatt baseou-se nas linhas de pensamento de

McCulloch e Pitts para desenvolver seu modelo.

Enquanto Rosenblatt trabalhava no perceptron, Bernard Widrow da Universidade de

Stanford desenvolvia um novo modelo de processamento batizado de Adaline2 (Widrow &

Hoff, 1988). As redes Adaline se destacavam pela poderosa lei de aprendizado, o princípio de

treinamento que ficou conhecido como Regra Delta.

Quando Minsky e Papert publicaram seu livro Perceptrons em 1969 (Minsky & Papert,

1988) onde demonstravam as deficiências dos modelos perceptron, a maioria dos

investimentos foi redirecionada e os pesquisadores abandonaram a área, com exceção de

alguns poucos.

O interesse nas redes neurais reapareceu somente a partir de alguns resultados teóricos

importantes alcançados no começo da década de oitenta (mais notoriamente a descoberta da

retro-propagação dos erros ou backpropagation) e novos avanços no desenvolvimento do

hardware que aumentaram a capacidade de processamento.

Redes neurais artificiais são caracterizadas mais adequadamente como “modelos

computacionais” com propriedades particulares como capacidade de adaptação ou

aprendizado, de generalização, ou de organização dos dados, e cuja operação é baseada em 2 Adaptative Linear Element, publicado em 1960

Page 17: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

15

processamento paralelo (Kröse & Smagt, 1996). No entanto, várias destas características estão

presentes em outros tipos de modelos; a questão é até que ponto a abordagem neural prova ser

mais adequada a determinadas aplicações que os modelos existentes.

Hoje em dia a maior parte dos pesquisadores concorda que as redes neurais são muito

diferentes do cérebro em termos de estrutura. No entanto, como o cérebro, uma rede neural é

uma coleção massivamente paralela de unidades de processamento pequenas e simples, onde

as interligações formam a maior parte da inteligência da rede.

Principais características das Redes Neurais (Barone, 1999):

• capacidade de “aprender” através de exemplos e de generalizar este aprendizado de

forma a reconhecer elementos similares não apresentados no conjunto de

treinamento;

• bom desempenho em tarefas pouco ou mal definidas, onde falta o conhecimento

explícito de como resolvê-las;

• robustez à presença de informações falsas ou ausentes;

• tolerância à falha.

2.1 Conceitos básicos

Uma rede artificial consiste de um agrupamento de unidades simples de processamento

que se comunicam enviando sinais uma para a outra a partir de um grande número de

conexões e seus pesos.

Um conjunto de aspectos principais pode ser definido em um modelo neural (McClelland

& Rumelhart (apud Kröse & Smagt, 1996, p.15)):

• um conjunto de unidades de processamento (“neurônios”, “células”);

• um estado de ativação κy para cada unidade, o que equivale a saída da unidade

Page 18: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

16

• conexões entre as unidades. Geralmente cada conexão é definida por um peso

jkw que determina o efeito que o sinal vindo da unidade j tem em k ;

• uma regra de propagação, que determina a entrada efetiva ks de uma unidade a

partir de suas entradas externas;

• uma função de ativação kF que determina o novo nível de ativação baseada na

entrada efetiva (t)sk e o estado de ativação atual (t)y k ;

• uma entrada externa (chamado de viés ou bias) kθ para cada unidade;

• um método para tratamento das informações (regra de treinamento);

• um ambiente com o qual o sistema interage, que fornece os sinais de entrada e – se

necessário – sinais de erro.

Cada unidade faz um trabalho relativamente simples: recebe entrada dos vizinhos ou fonte

externa e a usa para computar o sinal de saída propagado para as outras unidades.

Independente desta primeira, uma segunda tarefa é o ajuste dos pesos das conexões. Segundo

Kröse & Smagt (1996) trata-se de um sistema inerentemente paralelo no sentido de que

muitas unidades podem fornecer o resultado de sua computação ao mesmo temo.

Figura 2.1 Componentes básicos de uma rede neural artificial (Kröse & Smagt, 1996)

Page 19: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

17

A figura 2.1 mostra os elementos de uma unidade de processamento. No caso, a regra de

propagação usada é a soma ponderada pelos pesos.

Dentro de uma rede neural é interessante distinguir três tipos de unidades: as unidades de

entrada (indicada pelo índice i) que recebem dados de fora da rede neural, unidades de saída

(indicadas pelo índice o) que mandam o sinal pra fora da rede, e as unidades escondidas ou

hidden (indicadas pelo índice h) das quais os sinais de entrada e saída continuam dentro da

rede.

Cada unidade responde por uma parcela da entrada das unidades a ela conectadas. A

entrada total para uma unidade k é simplesmente a soma ponderada das saídas vindas de cada

unidade a ela conectada mais um termo de viés:

A contribuição no caso de um peso positivo é considerada como uma excitação e para um

peso negativo como uma inibição. Unidades com esta regra de propagação são chamadas

unidades sigma.

O efeito da entrada total sobre a ativação da unidade é determinado pela função de

transferência kF que toma o total de entrada (t)sk e o estado de ativação corrente (t)y k e

produz o novo valor de ativação da unidade k :

Freqüentemente, a função de ativação é uma função não-decrescente da entrada total da

unidade:

Geralmente algum tipo de função de limiar é usado: função de limite ríspido, ou uma

função linear ou semilinear, ou uma função mais suave como a sigmóide (formato de S).

Page 20: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

18

Figura 2.2 Funções de ativação (Kovács, 1996)

Em certas aplicações a tangente hiperbólica é usada, o que permite valores de saída no

intervalo 1] [-1, .

2.2 Topologias de rede

Quanto ao padrão de conexão entre as unidades e a propagação dos dados podemos

distinguir dois tipos de rede (Kröse & Smagt, 1996 p.17):

• diretas (feed-forward) ou acíclicas, onde o fluxo de dados das unidades de entrada

para as saídas é estritamente no sentido direto. O processamento dos dados pode se

entender sobre múltiplas camadas de unidades, entretanto não estão presentes

realimentações, ou seja, conexões partindo das saídas de unidades para a entrada

de unidades de camadas anteriores ou da mesma camada;

• retro-alimentadas ou cíclicas contém conexões de realimentação. Ao contrário das

redes acíclicas, as propriedades dinâmicas da rede são importantes. Em alguns

casos, os valores de ativação das unidades causam um processo no qual a rede é

levada a um estado estável, onde estes valores de ativação não mudam mais.

Page 21: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

19

Podemos citar como exemplos de redes recorrentes as redes de Kohonen e

Hopfield. Esta última também é conhecida como memória de Hopfield.

Uma aplicação típica das redes feed-forward consiste na construção de modelos para

reconhecimento de padrões e classificação. Uma rede feed-forward pode ser vista como uma

ferramenta que realiza a análise de regressão não linear (Nascimento, 1994). Exemplos

clássicos de redes retroalimentadas são o Perceptron e o Adaline (ADAptive LInear Element).

2.3 Treinamento

Uma rede neural tem que ser configurada de maneira que a aplicação de um conjunto de

entradas produza o conjunto de saídas desejado. Existem vários métodos para se definir a

intensidade das conexões. Uma maneira seria atribuir os pesos explicitamente, usando um

conhecimento a priori. A outra forma consiste em “treinar” a rede neural alimentando ela com

padrões de treinamento e deixando-a mudar seus pesos internos de acordo com alguma regra

de aprendizado.

Os métodos de aprendizado das redes neurais estão divididos em dois paradigmas

principais:

• treinamento supervisionado ou associativo, onde a rede é treinada pelo

fornecimento dos padrões de entrada e respectivas saídas desejadas. Estes pares

entrada-saída (padrões) podem ser fornecidos por um agente externo, ou pelo

próprio sistema que contém a rede (auto-supervisionado);

• treinamento não-supervisionado, onde uma unidade (de saída) é treinada para

responder a clusters de padrões contidos na entrada. Neste paradigma o sistema

tenta detectar características estatísticas salientes na população da entrada. Ao

contrário do paradigma supervisionado, não existe um conjunto de categorias pré-

definidas nas quais os padrões precisam ser classificados; ao invés disso o sistema

tem que desenvolver sua própria representação.

Page 22: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

20

Ambos os paradigmas resultam no ajuste dos pesos das conexões entre as unidades, de

acordo com alguma regra de aprendizado. Virtualmente todas as regras de aprendizado para

modelos deste tipo podem ser consideradas como uma variação da regra de treinamento

sugerida em 1949 por Hebb em seu livro Organization of Behavior (Hebb, 1988). A idéia

básica é que se duas unidades j e k são ativadas simultaneamente, então suas interconexões

tem que ser reforçadas. Se j recebe estímulo de k , a mais simples versão da lei de Hebb

manda atualizar o peso jkw com

onde γ é uma constante positiva de proporcionalidade que representa a taxa de treinamento.

Uma outra regra, ao invés da atual ativação da unidade k, usa a diferença entre o valor atual e

o desejado para ajustar os pesos:

onde kd é a ativação desejada, fornecida pelo conjunto de treinamento. Esta regra de

treinamento é conhecida por regra de Widrow-Hoff ou regra delta.

Neste trabalho detalharemos apenas o paradigma de treinamento supervisionado das redes

feed-forward.

2.3.1 A lei de aprendizado do Perceptron

Uma rede feed-forward de camada única consiste de um ou mais neurônios de saída o ,

cada qual conectado por um peso iow a cada uma das entradas i . Na forma mais simples a

rede possui apenas duas entradas e saída única, conforme mostra a figura 1.3.

Page 23: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

21

Figura 2.3 Rede de camada única com duas entradas e uma saída

A entrada do neurônio é a soma ponderada das entradas mais o termo de viés. A saída é

formada pela ativação do neurônio de saída, que é alguma função da entrada:

A função de ativação pode ser linear de modo que teríamos uma rede linear, ou não-linear.

Consideremos a função de limiar:

A saída da rede neural será então +1 ou -1 dependendo da entrada. A rede pode agora ser

usada para uma tarefa de classificação: decidir se um padrão de entrada pertence a uma entre

duas classes. Se a entrada total é positiva, a amostra será atribuída à classe +1, se a entrada

total é negativa, a amostra será atribuída à classe -1. A separação entre estas duas classes

neste caso é uma reta, dada pela equação:

Uma rede de camada única representa uma função discriminante linear (Kröse & Smagt,

1996). Isolando 2x e reescrevendo a equação:

podemos ver que os pesos determinam o ângulo da reta e o termo de viés θ define o quanto a

reta fica afastada da origem. Os pesos também podem ser representados no espaço das

entradas: o vetor de pesos é sempre uma reta perpendicular à função discriminante. Observe a

representação no espaço das entradas (figura 2.4):

Page 24: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

22

Figura 2.4 Representação geométrica da função discriminante e dos pesos

Suponhamos um conjunto de treinamento composto de vetores de entrada x e a saída

desejada )(xd . A regra de treinamento do perceptron é muito simples:

• Comece com valores randômicos para os pesos;

• Selecione um vetor de entrada x do conjunto de treinamento;

• Se )(xdy ≠ (o perceptron errou a resposta), modifique todas as conexões iw de

acordo com ii xxdw ×=∆ )(

• Volta ao passo 2 até o fim do conjunto de treinamento

Adicionalmente, precisamos ajustar o termo de viés θ . O valor de θ é considerado como

uma conexão 0w entre o nó de saída e uma unidade que tem sempre valor de saída 1x0 = .

Assim, este valor deve ser modificado de acordo com a mesma regra de treinamento:

Para a regra de treinamento do Perceptron existe um teorema da convergência, que afirma

o seguinte:

Teorema 1: Se existe um conjunto de pesos de conexão w* capaz de realizar a

transformação )(xdy = , a regra de treinamento do perceptron irá convergir para

alguma solução (que pode ser ou não a mesma que w*) num número finito de passos

para qualquer conjunto inicial de pesos.

Page 25: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

23

Rosenblatt (apud Kröse & Smagt, 1996, p.26) demonstrou a prova deste teorema em 1959,

o que criou uma onda de otimismo e interesse no início dos anos sessenta. Essa euforia durou

apenas até a publicação de Perceptrons em 1969, onde Minsky e Papert provaram as severas

restrições no que os perceptrons são capazes de representar.

2.3.2 Adaline (adaptative linear element)

Uma generalização importante do algoritmo de treinamento do perceceptron foi

apresentada por Widrow e Hoff com o nome de LMS (“least mean square”) também

conhecida como regra delta. A grande diferença em relação à regra do perceptron está na

forma como a saída é usada na lei de aprendizado. O perceptron usa a saída da função de

ativação para aprender (ou 1 ou -1). A regra delta usa a entrada total da unidade, ou seja, sem

mapear para os valores -1 ou 1.

A regra delta foi aplicada ao Adaline desenvolvido por Widrow. Numa implementação

física simples, este dispositivo consistia de um conjunto de resistores reguláveis conectados a

um circuito que somava as correntes causadas pelas tensões de entrada. Este bloco somador

era seguido por um quantizador cuja saída era +1 ou -1 dependendo da polaridade da soma.

Figura 2.5 Implementação física do Adaline

Page 26: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

24

Considerando o esquema da figura, sendo as resistências de entrada denotadas por iw ,

n...,1,0i = , o sinal de entrada por ix e a saída y , então a saída no bloco somador é

onde 0w≡θ . A regra delta de Widrow tenta ajustar os pesos iw iterativamente de modo que

a média dos quadrados dos erros em relação a y seja minimizada. Aplicando a função de

limiar a y temos a saída do Adaline.

Imaginemos agora uma rede como a anterior, porém com uma função de ativação linear.

Uma rede tão simples é capaz de representar uma relação linear entre o valor da unidade de

saída e os valores da unidade de entrada. No caso de duas unidades de entrada, o espaço de

entrada será um plano. Se existirem mais do que duas entradas, a rede representará um

hiperplano (Tafner, 1996) e é claro que múltiplas unidades de saída também podem ser

definidas.

Suponha que precisamos treinar uma rede de tal forma que um hiperplano seja dividido

tão bem quanto possível para um dado conjunto de padrões de treinamento formado por

valores de entrada px e valores de saída desejadas pd . Para cada padrão de treinamento, a

saída da rede difere do valor desejado pd em ( )pp yd − , onde py é a saída da rede para o

padrão de treinamento atual. A regra delta aplica uma função de erro baseada nessas

diferenças para ajustar os pesos.

A função de erro, como indicado pelo nome do método least mean square, é a soma dos

quadrados dos erros. O erro total é definido como:

onde o índice p varia dentro do conjunto dos padrões de treinamento e pE representa o erro

para o padrão p . O algoritmo LMS busca um conjunto de pesos que minimize a função de

Page 27: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

25

erro por um método chamado gradiente descendente. O princípio é fazer o ajuste do peso

proporcional ao valor da derivada parcial do erro com relação a cada peso:

onde γ é uma constante de proporcionalidade. A derivada é

Simplificando por causa da função de ativação linear:

e

logo

onde ppp yd −=δ é a diferença entre a saída desejada e atual para o padrão p .

2.3.3 Problemas linearmente não-separáveis

Como já mencionado, Minsky e Papert provaram severas restrições no poder de

representação das redes perceptron. Eles demonstraram que um perceptron de camada única

não poderia representar uma simples função lógica XOR.

Tabela 1 Tabela verdade do ou-exclusivo

0x 1x d

-1 -1 -1 -1 1 1

1 -1 1

1 1 -1

Numa rede com duas entradas e uma saída, a entrada da rede equivale a:

Consideremos a função de limiar:

Page 28: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

26

Então a saída do perceptron será definida por uma linha que divide o plano em duas

regiões. Para um valor fixo de θ , a saída do perceptron será igual a “um” de um lado da reta

definida por:

e igual a “zero” do outro lado da reta.

Figura 2.6 Representação geométrica do espaço das entradas

Como podemos ver na figura 2.6 os dois pontos em (1,-1) e (-1,1) não podem ser

separados dos pontos (-1,-1) e (1,1) por uma linha reta. Minsky e Papert provaram que para

entradas binárias, qualquer transformação pode ser realizada adicionando uma camada

escondida conectada a todas as entradas.

Figura 2.7 Solução da função XOR. Adaptado de Kröse & Smagt (1996)

Page 29: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

27

Os valores de pesos (ao lado de cada linha) e de limiar (dentro do círculo) indicados na

figura 2.7a são um exemplo de solução da função XOR. O espaço das entradas agora possui

três dimensões, definidas pelas duas entradas da rede mais a saída da unidade escondida.

Como mostra a figura 2.7b, a rede agora representa um plano que separa o espaço das

entradas, e a distinção nos dois grupos desejados passa a ser possível.

Minsky e Papert mostraram que a adição de unidades escondidas aumenta a classe de

problemas solucionada pelas redes feed-forward do tipo perceptron. Entretanto uma solução

para o problema de como ajustar os pesos entre as entradas e unidades escondidas só foi

apresentada bem mais tarde.

2.3.4 O Perceptron multicamadas

A solução para o problema do ajuste dos pesos em redes feed-forward multicamadas foi

apresentada por Rumelhart, Hinton e William em 1986 (apud Kröse & Smagt, 1996, p.33), e

soluções similares parecem ter sido publicadas antes, como a apresentada por Werbos em

1974 em sua tese de doutorado “Beyond Regression: New Tools for Prediction and Analysis

in the Behavioral Sciences”.

A idéia central da solução é que os erros nas unidades da camada escondida são

determinados pela retro-propagação dos erros nas unidades da camada de saída, motivo pelo

qual este método recebe o nome de back-propagation. O algoritmo back-propagation também

pode ser considerado como uma generalização da regra delta para funções de ativação não-

lineares e redes multicamadas.

Durante a fase de treinamento, os padrões do conjunto de treinamento são apresentados à

rede em uma ordem qualquer. Quando um padrão de treinamento é aplicado, os valores de

ativação são propagados, camada após camada, em direção às unidades de saída, e a saída

calculada pela rede é então comparada com a saída desejada. Temos então um valor de erro

Page 30: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

28

para cada unidade de saída, que chamaremos de 0e para uma determinada unidade de saída o .

O objetivo é fazer com que 0e se aproxime de zero.

Figura 2.8 Rede MLP e a retro-propagação dos erros (Patterson, 1995)

A maneira mais simples de conseguir minimizar 0e é ajustando os pesos de forma que

numa próxima iteração, 0e seja nulo para aquele padrão de treinamento. Sabemos pela regra

delta que para reduzir o erro de uma unidade, precisamos ajustar suas conexões de entrada de

acordo com:

Isto corrige os pesos das conexões com as unidades de saída. Para corrigir os pesos da

entrada para as camadas escondidas, precisamos aplicar novamente a regra delta. Entretanto

não temos um valor de erroδ para as unidades escondidas. Isto é resolvido pela derivada das

funções em cadeia, fazendo o seguinte: distribuir o erro de uma unidade de saída o por todas

as unidades escondidas a ela conectadas, ponderado pelo peso desta conexão. Em outras

palavras, uma unidade escondida h recebe um delta de cada unidade de saída o igual ao delta

desta unidade de saída (fator de correção do peso entre a unidade escondida h e a unidade

Page 31: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

29

escondida o ) ponderado pelo peso de conexão destas unidades. Matematicamente, o sinal de

erro hδ é hoo

oh w∑= δδ . Para que a fórmula fique correta precisamos aplicar a derivada da

função de ativação da unidade escondida, 'F . A generalização da regra delta para funções de

ativação não-lineares pode ser vista em Kröse & Smagt (1996, p34-35). Com a função de

ativação sigmóide, temos o seguinte:

)y1(y)yd( ooooo −−=δ

hoo

ohhh w)y1(y ∑−= δδ

O ajuste de cada peso de conexão da rede, para um padrão de treinamento p pode ser

calculado por:

pj

pkjkp yw γδ=∆

Kröse & Smagt (1996, p.37) fazem uma observação importante a respeito do treinamento

por padrões:

Embora, teoricamente, o algoritmo back-propagation aplique o gradiente

descendente no erro total somente se os pesos forem ajustados após a apresentação

de todo o conjunto de padrões, ou seja, não é aplicada a regra de aprendizado para

cada padrão separadamente, existe uma indicação empírica de que isto resultaria

numa convergência mais rápida. No entanto, temos que tomar cuidado com a ordem

em que os padrões são apresentados. Por exemplo, quando usamos a mesma

seqüência durante todas as épocas do treinamento a rede acaba se focando nos

primeiros padrões. Este problema pode ser evitado usando um método de

treinamento com permutação.

Page 32: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

30

3 PROCESSAMENTO DIGITAL DE SINAIS

3.1 Transformada de Fourier

A transformada de Fourier, batizada em homenagem a Jean-Baptist Joseph Fourier, é uma

transformada integral que expressa uma função em termos de funções de base senoidal, ou

seja, como soma ou integral de funções senoidais multiplicadas por coeficientes

(“amplitudes”).

Geralmente, a denominação “Transformada de Fourier” refere-se à esta transformada para

funções contínuas, que representa qualquer função integrável )t(f como a soma de

exponenciais complexas com freqüência angular w e amplitude complexa )w(F :

dtetfwF iwt

∫∞

∞−

−⋅= )()(

Entretanto, para processamento digital de sinais, é preciso ter valores )n(x discretos,

resultantes do processo de amostragem3 do sinal contínuo. Neste caso usa-se a versão da

transformada para funções discretas:

,)(1

)(1

0

2

∑−

=

−⋅=

N

n

Nmni

enxN

mfπ

1,...,0 −= Nm

A transformada discreta de Fourier (DFT4) nos retorna um conjunto de m valores no

domínio da freqüência a partir de n amostras no domínio do tempo:

3 amostragem é o processo de discretização temporal de um sinal contínuo 4 Discrete Fourier Transform

Page 33: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

31

Figura 3.1 Amostragem em função do tempo e seu espectro (Dovicchi 1999)

Algumas observações importantes:

• Considerando o período de amostragem T em segundos, a freqüência de amostragem

será Tf a /1= em Hertz. Os valores |)(| mx resultantes da DFT representam as

freqüências do espectro do sinal, variando entre zero e 2/af , em incrementos de

NfF a /= .

• De acordo com o teorema de Niquist (apud Dovicchi 1999) para se evitar a

sobreposição espectral, a taxa de amostragem af deve ser maior ou igual ao dobro da

maior freqüência presente no sinal, ou seja, se a maior freqüência for mf , o intervalo

de amostragem deve satisfazer: mf

T⋅

<2

1

• Apenas 2/N componentes espectrais complexos são significativos, acima de

2/N temos os componentes espectrais complexos negativos, que em módulo são uma

cópia espelhada dos valores abaixo de 2/N

Page 34: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

32

Um método largamente utilizado para o cálculo computacional da DFT é o algoritmo FFT

(Fast Fourier Transform) cuja complexidade, para N amostras, é da ordem de

))N(logN(O 2⋅ operações contra )N(O 2 operações para o cálculo pela definição. Este

método foi demonstrado por Cooley & Tukey em 1965 (apud Dovicchi 1999 p.14).

A determinação de cada componente espectral da DFT pode ser entendida como uma

convolução entre as amostras no tempo e a função de base senoidal )m(X que completa m

períodos dentro do intervalo NTtp ⋅= . Assim, as partes real e imaginária de cada

componente de freqüência )(mX é:

∑−

=

⋅=1

0

)/2cos()()}(Re{N

n

NmnnxmX π

∑−

=

⋅−=1

0

)/2()()}(Im{N

n

NmnsennxmX π

Esta notação é também conhecida como notação retangular. A amplitude complexa pode

ser obtida por:

22 })(Im{)}(Re{)}({ mXmXmXMag +=

E a fase por:

=

)}(Re{

)}(Im{)}({

mX

mXarctgmXFase

Figura 3.2 Representação polar versus retangular

Page 35: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

33

3.2 Short-Time Fourier Transform (STFT)

A DFT nos fornece uma representação global do sinal em termos de seus componentes de

freqüência. No entanto podemos estar interessados no conteúdo local de freqüências, ou seja,

que características espectrais o sinal possui nas redondezas de um determinado instante de

tempo. Um meio de conseguir com que as informações estejam localizadas em ambos os

domínios, tempo e freqüência, é aplicarmos a STFT, também chamada de Transformada de

Fourier Janelada.

A STFT é definida por (Schniter, 2005):

dteutgtfuF ti

∫∞

∞−

−⋅−⋅= ξξ )()(),(

A STFT pode ser interpretada como a Transformada de Fourier de uma janela deslizante:

para calcular )u,(F ξ , desloque o centro da janela )t(g para o instante u , aplique a janela ao

sinal de entrada e então calcule a FT do resultado.

Figura 3.3 Janelamento do sinal

A idéia é isolar o sinal nas vizinhanças do instante u , então aplicar a Transformada de

Fourier afim de estimar o conteúdo “local” de freqüência no instante u .

Essencialmente, a STFT usa elementos base tiu e)ut(g)t(g ξ

ξ ⋅−= . Estes elementos são o

produto de uma senóide por uma janela simétrica e de energia finita )t(g . A família de

elementos base é obtida pelo deslocamento no tempo e modulação na freqüência do elemento

Page 36: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

34

original )t(guξ . Estes átomos tem freqüência central ξ e são simétricos em relação a u

(Chaplais, 1999), como mostra a figura 3.4:

Figura 3.4 Elementos base da STFT, adaptado de (Chaplais, 1999).

A STFT possui resolução constante no tempo e freqüência. Esta resolução pode ser

alterada redimensionando a janela )t(g . O uso de uma janela larga resulta em boa resolução

na freqüência, porém resolução baixa no tempo ao passo que o uso de uma janela estreita nos

dará uma boa resolução no tempo e baixa resolução na freqüência (Schniter, 2005).

Page 37: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

35

Figura 3.5 Exemplo de elemento base com 10.5 períodos e janela de Hanning

Figura 3.6 Espectro do elemento base com corte abrupto (a) e janelado (b) por função de Hanning

As propriedades da STFT são determinadas pela janela escolhida e a forma como a

energia esta concentrada ao redor do seu centro. Observe as figuras 3.5 e 3.6.

O uso da função de janelamento evita a introdução de alguns fenômenos indesejados,

como o fenômeno de Gibbs (Weisstein, 2006b), causados pelo corte abrupto do sinal (caso de

uma janela uniforme ou retangular). A figura 3.7 mostra algumas das funções de janelamento

mais usadas.

u

t

t

t

f

f

ξ

Page 38: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

36

Figura 3.7 Algumas funções de janelamento e suas transformadas cosseno5 (Weisstein, 2006a)

A transformada discreta STFT é calculada por:

,)()(),(1

0

2

∑−

=

⋅−⋅=N

n

Nmni

eutgnxumfπ

1,...,0 −= Nm

Para um valor fixo de u , a fórmula é a da transformada discreta de Fourier, que pode ser

computada pelo algoritmo FFT aplicado a cada janelamento do sinal original.

5 Parte real da transformada de Fourier

Page 39: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

37

3.3 Transformada Wavelet

A análise de sinais de acordo com escalas variáveis no domínio do tempo e da freqüência

é a idéia básica da utilização da teoria das Wavelets. Wavelets são funções matemáticas que

ampliam intervalos de dados, separando-os em diferentes componentes de freqüência,

permitindo a análise de cada componente em sua escala correspondente (Dovicchi, 1999).

As funções Wavelet podem ser usadas não apenas para analisar sinais estacionários, mas

também para decompor sinais não-estacionários, variantes no tempo ou de características

transientes.

A transformada Wavelet substitui as funções base senoidais da transformada de Fourier

por uma família gerada pela translação6 e dilação7 de uma função )t(ψ chamada wavelet mãe:

,s

ut

s

1)t(u,s

−⋅= ψψ ,0s > ℜ∈u

A função anterior é centralizada ao redor de u , tal como um átomo da STFT. Se a

freqüência central de ψ é η , então a freqüência central da função resultante da dilação de ψ

é s/η . Sua distribuição no tempo é proporcional ao fator de escala s . Sua distribuição na

freqüência é inversamente proporcional a s (figura 3.7).

6 Função que toma um vetor e retorna outro vetor, múltiplo do vetor dado: vv

rrλ→ , onde λ é um escalar

qualquer e vr

um vetor de qualquer espaço vetorial. 7 Função que soma um vetor constante k a um vetor dado: vkv

rrr+→ , onde v

r e k

r são vetores de qualquer

espaço vetorial.

Page 40: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

38

Figura 3.8 Elementos base da transformada Wavelet, adaptado de (Chaplais, 1999).

Assim, a transformada wavelet tem uma resolução no tempo e freqüência que depende do

fator de escala s de cada janela.

As Wavelets devem satisfazer certas propriedades específicas. Uma delas é a propriedade

de integrar a zero, ondulando acima e abaixo do eixo x ; outras são propriedades técnicas que

asseguram o cálculo rápido e fácil da transformada direta e inversa. Assim como senos e

cossenos são bases na análise de Fourier, as Wavelets são usadas como bases na representação

de outras funções (Wickerhauser apud (Dovicchi, 1999)).

Uma vez estabelecida uma base Wavelet )t(ψ , chamada Wavelet mãe, pode-se estabelecer

bases de translação e dilação da Wavelet mãe, tal que:

ℜ×ℜ∈

− +),(, uss

utψ

,

onde os valores de s e u devem ser selecionados convenientemente tal que: j2s −= e

j2ku −⋅= , onde k e j são inteiros. A escolha de k e j proporcionará uma base esparsa e,

Page 41: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

39

além disso, possibilitará a análise com múltiplas resoluções no processamento de sinais

(Dovicchi, 1999). Se a escala e a translação são diádicas8 as bases Wavelet são obtidas por:

( )ktt jjkj −= 22)( 2/, ψψ

O Inteiro k representa a translação da função wavelet e o inteiro j é uma indicação da

freqüência da wavelet ou posicionamento no espectro e geralmente é referido como escala

(Reza, 1999).

Figura 3.9 Wavelet mãe 12Dψ , Wavelet com escala 1j −= e à direita com escala 2j −=

Como fica evidente na figura 3.8, escalas diferentes correspondem a diferentes espectros

de freqüência. A freqüência central de cada espectro é multiplicada ou dividida por 2 a cada

incremento ou decremento de j . Outro aspecto da transformada wavelet é que a localização

temporal (quão compacta no tempo) aumenta junto com a freqüência ou escala. Em outras

palavras, escalas maiores correspondem à localização mais precisa e vice-versa (Reza, 1999).

A análise multiresolução precisa de duas funções básicas estreitamente relacionadas. Além

da função wavelet )t(ψ , precisamos de outra função básica chamada função escalonante,

denotada por )t(ϕ . A translação e dilação de )t(ϕ é similar a de )t(ψ .

A expansão wavelet para o sinal )t(x é dada pela seguinte série de decomposição (Burrus

(apud Reza, 1999 p.3)):

)()()( ,,,

0

0tdtctx kj

k jjkjkj

kk ψϕ ∑∑∑

=

+=

8 js −= 2 é chamada dilação diádica, and jku −⋅= 2 é a translação dyadica

Page 42: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

40

Nesta expansão, os coeficientes kc são chamados de coeficientes de aproximação na

escala 0j . O conjuntos de coeficientes k,jd representam detalhes do sinal em diferentes

escalas. A transformada wavelet discreta (DWT9) consiste de ambos. Para sinais contínuos, o

limite superior para as escalas de detalhes segue para o infinito; entretanto, para sinais

discretos, ele está limitado ao detalhe máximo disponível no sinal.

A relação dos coeficientes wavelet10 com o sinal original é:

dtttxd kjkj )()( ,, ψ=

dtttxc kjk )()( ,0ϕ=

O cálculo dos coeficientes DWT é geralmente formulado em termos de um conjunto de

filtros multirate. Os coeficientes destes filtros, que geralmente são FIR11, são obtidos pelo

conhecimento da wavelet mãe e função escalonante.

A DWT de um sinal x é calculada pela passagem em série deste conjunto de filtros.

Primeiramente, o sinal passa por um filtro passa-baixa g , sendo o resultado a convolução do

sinal com o filtro:

O sinal é decomposto simultaneamente usando um filtro passa-alta h . As saídas são os

coeficientes de detalhes k,jd e coeficientes de aproximação kc (saída do filtro passa-baixa).

Entretanto, como metade das freqüências foi removida, metade dos coeficientes de saída pode

ser descartada, conforme a regra de Nyquist. As saídas dos filtros são então dimidiadas por

um fator de dois:

9 discrete wavelet transform. 10 Para wavelets ortogonais e reais. Wavelets biortogonais precisam de filtros diferentes para análise e síntese. 11 Finite Impulse Response

Page 43: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

41

Esta decomposição diminuiu pela metade a resolução no tempo já que apenas metade dos

coeficientes de saída dos filtros caracteriza o sinal. Em compensação cada saída tem metade

da banda de freqüências da entrada, ou seja, a resolução na freqüência foi dobrada.

A decomposição é reaplicada nos coeficientes de aproximação, que passam pelos filtros

passa-alta e passa-baixa e são então dimidiados por dois (figura 3.10). Isto resultando em mais

um nível de coeficientes de detalhes e aproximação, cada qual representando metade da banda

de freqüência dos coeficientes do nível anterior. Esta operação pode ser repetida até que reste

apenas um único coeficiente de aproximação. Como a cada decomposição as saídas dos filtros

são dimidiadas por dois, o número total de coeficientes se mantém igual.

Figura 3.10 Banco de filtros de 3 níveis

Por exemplo, para um sinal com dezesseis amostras, freqüência variando entre zero e nf ,

e três níveis de decomposição, quatro escalas de saída são produzidas:

Figura 3.11 Representação da DWT no domínio das freqüências

A transformada pode ser revertida, reconstruindo os coeficientes de aproximação de um

nível anterior, a partir dos coeficientes de detalhe e aproximação de mesmo nível.

Page 44: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

42

Kaplan (2002) mostra como calcular um espectro de potência a partir de um vetor de

coeficientes resultantes da DWT de um sinal, no exemplo, de 16 amostras:

Figura 3.12 Estrutura lógica do resultado da DWT (Kaplan, 2002)

Se o vetor consiste de N elementos, onde N é uma potência de dois, então teremos

(N)log2 bandas de coeficientes e 1 valor de aproximação. No exemplo da figura 3.11, o

resultado de uma DWT de 16 elementos tem 4 sub-bandas ( 4 (16)log2 = ). O espectro de

potências wavelet é calculado somando-se os quadrados dos coeficientes de cada sub-banda

(Kaplan, 2002):

∑−

=

=12

0k

2k,j

j

c]j[spectrum

Page 45: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

43

4 METODOLOGIA

O problema de reconhecer palavras se subdivide em três partes: a aquisição do sinal, a

extração de características e a classificação. A aquisição envolve simplesmente a gravação e

digitalização do comando de voz. A extração envolve o processamento digital do sinal a fim

de extrair parâmetros que melhor o representem, ou seja, características necessárias e

suficientes para o seu reconhecimento. A classificação consiste em fazer uso das informações

quantizadas (padrões) na construção de um modelo capaz de reconhecer novas ocorrências de

um conjunto pré-determinado de palavras, ou simplesmente classificar um sinal apresentado

em uma destas classes.

Basicamente, os métodos de extração apresentados a seguir buscam determinar

informações de tempo-freqüência dos sinais. Estas são usadas para treinamento (formam o

conjunto de treinamento) ou reconhecimento por uma rede neural.

4.1 Aquisição dos sinais de áudio

Todas as amostras de áudio utilizadas para fins de avaliação do modelo e cujo resultados

estão contidos neste trabalho foram tomadas usando gravador digital portátil modelo: X-

MICRO Video MP3 400.

Figura 4.1 Gravador digital, a seta vermelha indica o microfone embutido

Page 46: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

44

O aparelho amostra numa taxa de 8KHz com codificação IMA ADPCM12 de quatro bits

por amostrao. Os arquivos decodificados no computador em formato PCM13 apresentam

resolução de oito bits por amostra.

As gravações utilizadas no experimento foram tomadas em conjuntos de dez palavras,

sendo cada uma repetida seis vezes consecutivas. Foram feitas seis tomadas de gravações para

um primeiro conjunto de palavras. Mais tarde foram feitas mais seis tomadas de gravação para

dez novas palavras.

Tabela 2 Esquema de gravação das amostras de teste

Grupo Tomadas Palavra Repetições por tomada Total

amarelo 6 36

verde 6 36

azul 6 36

branco 6 36

vermelho 6 36

um 6 36

dois 6 36

três 6 36

quatro 6 36

1 6

cinco 6 36

seis 6 36

sete 6 36

oito 6 36

nove 6 36

zero 6 36

rosa 6 36

laranja 6 36

preto 6 36

marrom 6 36

2 6

roxo 6 36

TOTAL 12 20 120 720

12 Adaptative Differential Pulse Code Modulation 13 Pulse Code Modulation

Page 47: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

45

4.2 Extração de características

Duas classes de extratores foram implementadas, uma utilizando STFT (cf. seção 3.3.1) e

outra utilizando DWT (cf. seção 3.4). Para cada palavra, o número de amostras lidas foi

fixado em 8192, pouco mais de um segundo para taxa de amostragem de 8000Hz. Fixar o

número de amostras neste valor traz uma vantagem já que as transformadas usadas exigem

que o número de amostras seja uma potência de dois.

O início do comando foi detectado a partir de uma amplitude maior que 5% da amplitude

máxima possível (nível seguramente alcançado pela pronúncia de uma vogal) e um recuo de

100ms foi aplicado (para incluir qualquer som de consoante não detectado). A mesma técnica

pode ser aplicada caso as amostras de som sejam obtidas diretamente do microfone do

computador.

4.2.1 Extração com STFT

Para estimar o conteúdo de freqüências ao longo do período de pronúncia da palavra, a

transformada FFT foi aplicada a vários frames14, cada um contendo um instante diferente de

tempo do sinal original. A janela de Hanning foi aplicada a fim de evitar fenômenos

indesejados causados pelo seccionamento abrupto do sinal. Algum grau de superposição entre

frames foi adotado (normalmente 50%).

0

0.2

0.4

0.6

0.8

1

1.2

-1

-0.9

-0.9

-0.8

-0.7

-0.6

-0.5

-0.4

-0.4

-0.3

-0.2

-0.1 -0

0.0

6

0.1

4

0.2

2

0.3

0.3

9

0.4

7

0.5

5

0.6

3

0.7

2

0.8

0.8

8

0.9

6

Gaussian Hann Hann adjacentes Soma das Hann Blackman

Figura 4.2 Diferentes funções de janelamento

14 Fragmento do sinal original, uma janela no tempo

Page 48: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

46

Desta forma, para cada frame temos o cálculo de um espectro de freqüências.

Figura 4.3 Espectro de freqüência de 7 frames consecutivos, em vermelho o mesmo frame

A figura 4.3 mostra o resultado para frames de 512 amostras. Neste caso, o sinal é

dividido em 32 frames, e cada espectro resultante é composto de 256 pontos no domínio da

freqüência.

Para cada espectro, algum tipo de resumo das informações das freqüências presentes

precisa ser feito. Uma primeira tentativa foi o cálculo do centróide espectral de Sandel (apud

Dovicchi, sem data p.2):

∑∑

=

=⋅

=i

1n n

i

1n nn

pI

IFC

Desta forma, no caso de 32 frames, teremos 32 valores de centróides:

Figura 4.4 Valores das centróides para (a) repetições de uma mesma palavra e (b) palavras diferente

Page 49: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

47

A segunda maneira de resumir o conteúdo local de freqüência foi definindo sub-bandas

no espectro e calculando a soma das intensidades para cada sub-banda. A divisão em 5

regiões mostrou bons resultados.

Figura 4.5 Espectro de um frame dividido em 5 regiões

Para 32 frames, temos 160 divisões por sinal analisado, já que são 5 sub-bandas por frame.

A figura 4.6 exemplifica o processo para frames de 512 amostras:

Figura 4.6 Processo de extração

Page 50: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

48

4.2.2 Extração com DWT

A transformada wavelet discreta oferece uma excelente ferramenta para decomposição do

sinal em seus diferentes componentes de freqüência, com a vantagem de que o resultado da

transformada permanece no domínio do tempo. Os coeficientes usados na transformada foram

os de Daubechies ordem 4 (figura 4.7). Este tipo de wavelet é usada no processamento de

fonemas devido ao seu bom comportamento na modelagem de sinais de alta freqüência e

características ruidosas (Long & Datta, 1996).

Figura 4.7 Função Wavelet e função escalonante Daub4

Uma vez que todos os sinais possuem 8192 amostras, o resultado da DWT de cada um

contem 13 bandas ( 8192213 = ). Um espectro de potência com 13 componentes de freqüência

pode ser calculado (cf. Seção 3.4). Entretanto uma representação global do sinal não traz

informação suficiente para a classificação das palavras – é preciso determinar informações de

tempo-freqüência.

Para tal, cada sub-banda é dividida em segmentos iguais (aqui chamados de sub-frames) e

o espectro de potência é calculado. Desta forma, temos uma indicação de como a energia em

cada banda variou ao longo do tempo de pronuncia da palavra. Testes preliminares mostraram

que as primeiras quatro bandas dos coeficientes de detalhes trazem praticamente toda a

informação relevante acerca do sinal. Estes coeficientes cobrem quase toda faixa do espectro

Page 51: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

49

onde a voz humana está localizada. O primeiro passa-alta possui 4096 coeficientes e contém

teoricamente as freqüências entre 2KHz e 4Khz (maior freqüência possível), o segundo 2048

coeficientes e freqüências entre 1KHz e 2Khz, o terceiro 1024 coeficientes e freqüências entre

500Hz e 1Khz e o quarto 512 coeficientes de detalhes e as freqüências entre 250Hz e 500Hz.

Para um tamanho de frame de 64 coeficientes, a primeira sub-banda é dividida em 64

subframes, a segunda em 32 subframes, a terceira em 16 subframes e a quarta em 8, o que

resulta num total de 120 divisões para cada sinal. Cada subframe representa um bloco no

plano do tempo-freqüência (veja figura 4.10) e a parcela de potência presente nele é calculada

a partir da soma dos quadrados dos coeficientes. Observe a figura 4.8, onde cada barra

representa um subframe, e cada cor simboliza uma sub-banda diferente.

Figura 4.8 Extração: cinco repetições, mesma palavra

Figura 4.9 Extração: cinco palavras diferentes

Page 52: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

50

Figura 4.10 Divisão do plano tempo-frequencia resultante da extração com DWT

Uma segunda maneira de proceder à divisão em frames é adotar um número fixo de

divisões, por exemplo, 32 divisões por sub-banda, o que resulta em 128 divisões por sinal

analisado. Os valores podem ser reagrupados para que fiquem na ordem do tempo e não por

banda. Assim o resultado é parecido com a análise STFT, onde se tem um resumo dos

componentes de freqüência num determinado instante (correspondente a cinco sub-bandas do

espectro de um frame).

Figura 4.11 Processo de ordenação no tempo para número fixo de frames por sub-banda

Page 53: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

51

A primeira forma de divisão (tamanho fixo) é conceitualmente mais adequada, já que a

primeira sub-banda possui a maior resolução no tempo (e a menor resolução na frequência, ou

seja, muitos componentes misturados) e a quarta sub-banda possui a maior resolução na

freqüência dentre as avaliadas (em compensação possui a pior resolução no tempo, ou seja,

tem poucos coeficientes).

4.3 O Classificador

Para a tarefa de classificação uma rede neural foi implementada em linguagem Java.

Tentamos utilizar uma rede Multi-Layer Perceptron, mas a mesma não apresentou bom

desempenho, então partimos para uma solução que se mostrou simples e eficaz. A rede possui

camada única e aplica regra de aprendizado baseada na função de erro de Bernoulli. A função

de ativação de cada unidade é a multi-logística.

O número de saídas depende do tamanho do vocabulário da rede, ou seja, quantas palavras

ela precisa reconhecer. Cada palavra possui uma saída correspondente, e a rede é treinada

para elevar seu valor a um (1,0) quando sua entrada caracterize aquela palavra. As demais

entradas devem estar o mais próximo possível de zero. O número de entradas depende da

técnica de extração escolhida. O número de pesos é o produto das saídas pelas entradas.

Figura 4.12 Topologia do classificador

Page 54: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

52

Os nós de entrada simbolizam simplesmente que cada entrada é conectada a todas as

unidades da rede. A regra de propagação usada foi o somatório ponderado pelos pesos. Cada

unidade de saída possui uma entrada de viés. Assim, a entrada total )t(sk de cada unidade da

rede é dada por:

O estado de ativação de cada unidade depende da função de ativação kF . Como queremos

classificar uma dada ocorrência em uma de N classes (nossa variável objetivo – qual a palavra

– é uma variável categorizada), torna-se útil que as saídas da rede variem entre zero e um, e

que todas somadas resultem em um. Assim, cada valor de saída representa uma probabilidade.

Para tal, existe a função de ativação Softmax (Sarle, 2004) também chamada de função multi-

logistica, que para N unidades de saída é definida por:

∑=

=N

1n

)t(s

)t(s

k

n

k

e

e)t(F ,

ou seja, o valor de saída é calculado dividindo-se o valor da exponencial do total de entrada

na unidade pela soma das exponenciais do total de entrada em cada uma das unidades de

saída. Esta função se reduz à função logística (sigmóide) quando temos apenas duas

categorias (ou saídas).

Como vimos na seção 2.3.4, para função de ativação sigmóide, o cálculo do erro nas

unidades de saída é:

'Fy

EP

P

o ⋅∂

∂−=δ

)yd(y

E pp

P

P

−−=∂

)y1(y)yd( ooooo −−=δ

Isto de acordo com o cálculo de erro do método LMS. Entretanto, para o caso de

problemas de classificação, existe uma função de erro específica – a função de erro de

Bernoulli (Chow & Goode, 1994):

Page 55: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

53

{ }∑ −⋅−+⋅−=j

P

j

P

j

P

j

P

j

P ydydE )1log()1()log(

assim, o termo PP y/E ∂∂ é:

p

p

p

p

P

P

y

d

)y1(

)d1(

y

E−

−=

e o cálculo do erro para função de ativação sigmoide:

)yd()y1(yy

d

)y1(

)d1( ppoop

p

p

p

o −=−⋅−−

−=δ

O uso da função de erro de Bernoulli ao invés do método LMS resulta num aumento

significativo da velocidade do treinamento (Chow & Goode, 1994).

Page 56: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

54

5 Resultados

Um conjunto de treinamento usando seis repetições de cada palavra foi montado,

resultando em 120 padrões de treinamento. As 600 gravações restantes, ou seja, trinta

repetições de cada palavra, compuseram o conjunto do teste. O vocabulário consiste das vinte

palavras dispostas na tabela 2. O treinamento foi fixado em 500 épocas com taxa de

aprendizado de 0,25. Cada teste foi executado três vezes.

5.1 Resultado com cálculo de centróides

Tabela 3 Resultados de classificação baseados no cálculo de centróides

Número de centróides15

Acertos no conj. de

treinamento

Acertos no conj. de teste

média de acertos

taxa de acerto

118 516

120 522 16

120 523

520.3 86.72%

120 527

120 524 31

120 526

525.7 87.61%

120 524

120 524 62

120 523

523.7 87.28%

15 O tamanho do frame foi mantido fixo em 512 amostras. Variou-se a taxa de superposição entre frames

Page 57: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

55

Curvas de aprendizado

0

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

1 101 201 301 401 501

época

erro

méd

io

62 centróides 31 centróides 16 centróides Figura 5.1Curvas de aprendizado baseado na extração de centróides

16 centróides

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados 64 centróides

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

32 centróides

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

32 centróides e 5000 épocas

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados Figura 5.2 Dispersão dos valores de saída da rede no o conj. de teste – extração de centróides

Page 58: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

56

5.2 Resultados com STFT

Tabela 4 3 Resultados de classificação baseados na STFT

Número de divisões16 Acertos no

conj. de teste

Acertos no conj. de

treinamento

média de acertos

taxa de acerto

119 535

119 530 3 frames * 5 sub-bandas

120 536

533.7 88.94%

120 562

120 559 7 frames * 5 sub-bandas

120 561

560.7 93.44%

120 559

120 559 14 frames * 5 sub-bandas

120 559

559.0 93.17%

120 562

120 562 31 frames * 5 sub-bandas

120 564

562.7 93.78%

Curvas de aprendizado

0

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

1 101 201 301 401 501

época

erro

méd

io

155 frames 75 frames 35 frames 15 frames Figura 5.3 Curvas de aprendizado baseado na extração STFT

16 Frames com 50% de superposição e janela de Hanning

Page 59: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

57

15 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados 75 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

35 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

155 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

Figura 5.4 Dispersão dos valores de saída da rede no conj. de teste – extração STFT

Page 60: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

58

5.3 Resultados com DWT

Tabela 5 Resultados de classificação baseados na extração DWT

Número de divisões Acertos no

conj. de treinamento

Acertos no conj. de

teste

média de acertos

taxa de acerto

117 505

113 497 8+4+2+1 subframes

119 513

505.0 84.17%

120 561

120 563 16+8+4+2 subframes

120 565

563.0 93.83%

120 575

120 575 32+16+8+4 subframes

120 575

575.0 95.83%

120 577

120 578 64+32+16+8 subframes

120 580

578.3 96.39%

Curvas de aprendizado

0

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

1 101 201 301 401 501

época

erro

méd

io

120 frames 60 frames 30 frames 15 frames Figura 5.5 Curvas de aprendizado baseado na extração DWT

Page 61: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

59

15 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados 60 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

30 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

120 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados Figura 5.6 Gráfico de dispersão dos valores de saída da rede no conj. de teste – extração DWT

Page 62: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

60

5.4 Resultados com DWT (método B)

Tabela 6 Resultados de classificação baseados na extração DWT (método B)

Número de divisões Acertos no

conj. de treinamento

Acertos no conj. de teste

média de acertos

taxa de acerto

117 522

117 514 4 sub-bandas * 4 subframes

114 494

510.0 85.00%

120 553

120 557 4 sub-bandas * 8 subframes

120 556

555.3 92.56%

120 565

120 565 4 sub-bandas * 16 subframes

120 566

565.3 94.22%

120 572

120 569 4 sub-bandas * 32 subframes

120 572

571.0 95.17%

Curvas de aprendizado

0

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

0.2

1 101 201 301 401 501

época

erro

méd

io

128 frames 64 frames 32 frames 16 frames Figura 5.7Curvas de aprendizado baseado na extração DWT (método B)

Page 63: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

61

16 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados 64 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

32 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

128 frames

0

0.2

0.4

0.6

0.8

1

1.2

0 50 100 150 200 250 300 350 400 450 500 550 600

contagem

valo

r d

e sa

ída

da

red

e

corretamente classificados incorretamente classificados

Figura 5.8 Gráfico de dispersão dos valores de saída da rede no conj. de teste – extração DWT (método B)

Page 64: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

62

5.5 Comparativo entre métodos de extração

Median

25%-75%

Non-Outlier Range

Outliers

Extremes

ST

FT

(co

rre

tos)

ST

FT

(in

co

rre

tos)

Wa

ve

let (c

orr

eto

s)

Wa

ve

let (i

nco

rre

tos)

Wa

ve

let B

(co

rre

tos)

Wa

ve

let B

(in

co

rre

tos)

-0,2

0,0

0,2

0,4

0,6

0,8

1,0

1,2

Figura 5.9 Valores de saída da rede no conjunto de teste – extração com muitas divisões

Tabela 7 Estatísticas dos valores de saída da rede no conjunto de teste – extração com muitas divisões

STFT

155 divisões DWT

120 divisões DWT método B

128 divisões

corretos incorretos corretos incorretos corretos incorretos

média 0.962 0.211 0.951 0.178 0.950 0.202

mediana 0.993 0.174 0.988 0.096 0.990 0.235

N 562 38 578 22 572 28

mínimo 0.480 0.001 0.445 0.000 0.415 0.000

máximo 1.000 0.490 1.000 0.424 1.000 0.455

Percentil 25% 0.968 0.055 0.952 0.027 0.956 0.055

Percentil 75% 0.999 0.388 0.997 0.373 0.998 0.339

Page 65: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

63

Median

25%-75%

Non-Outlier Range

Outliers

Extremes

Ce

ntr

óid

e (

co

rre

tos)

Ce

ntr

óid

e (

inco

rre

tos)

ST

FT

(co

rre

tos)

ST

FT

(in

co

rre

tos)

Wa

ve

let (c

orr

eto

s)

Wa

ve

let (i

nco

rre

tos)

Wa

ve

let2

(co

rre

tos)

Wa

ve

let2

(in

co

rre

tos)

-0,2

0,0

0,2

0,4

0,6

0,8

1,0

1,2

Figura 5.10 Valores de saída da rede no conj. de teste – extração com poucas divisões

Tabela 8 Estatísticas dos valores de saída da rede no conj. de teste – extração com poucas divisões

31 centróides STFT

35 divisões DWT

30 divisões DWT método B

32 divisões

corretos incorretos corretos incorretos corretos incorretos corretos incorretos

média 0.883 0.171 0.947 0.216 0.898 0.195 0.899 0.198

mediana 0.955 0.168 0.987 0.216 0.954 0.191 0.962 0.156

desvio padrão 0.162 0.122 0.101 0.148 0.131 0.145 0.136 0.153

N 527 73 559 41 563 37 556 44

min. 0.251 0.000 0.424 0.003 0.321 0.001 0.316 0.001

max. 1.000 0.447 1.000 0.435 1.000 0.477 1.000 0.484

Percentil 25% 0.848 0.075 0.957 0.070 0.864 0.035 0.854 0.070

Percentil 75% 0.990 0.231 0.997 0.359 0.988 0.276 0.993 0.335

Page 66: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

64

5.6 O Supertreinamento

Curvas de aprendizado

0

0.0001

0.0002

0.0003

0.0004

0.0005

0.0006

0.0007

0.0008

0.0009

0.001

1 2001 4001 6001 8001

época

erro

méd

io

Wavelet STFT Figura 5.11 Curvas de aprendizado para 10000 épocas

Median

25%-75%

Non-Outlier Range

Outliers

Extremes

co

rre

tos (

10

00

0 é

po

ca

s)

inco

rre

tos

co

rre

tos (

50

0 é

po

ca

s)

inco

rre

tos

-0,2

0,0

0,2

0,4

0,6

0,8

1,0

1,2

Figura 5.12 Valores de saída da rede no conj. de teste – diferentes números de épocas

Page 67: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

65

Tabela 9 Estatísticas dos valores de saída da rede no conj. de teste – diferentes números de épocas

10000 épocas 500 épocas

corretos incorretos corretos incorretos

média 0.980 0.133 0.962 0.211

mediana 1.000 0.059 0.993 0.174

N 565 36 562 38

mínimo 0.483 0.000 0.480 0.001

máximo 1.000 0.466 1.000 0.490

Percentil 25% 0.995 0.008 0.968 0.055

Percentil 75% 1.000 0.238 0.999 0.388

Page 68: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

66

5.7 Resultados utilizando software de terceiros

Os dados resultantes da extração também foram exportados para arquivo de texto. Assim,

puderam ser importados no software de estatística SAS 8.2. O SAS Enterprise Miner traz

como ferramenta as redes neurais. O programa permite configurações na topologia da rede,

possibilitando a escolha de uma rede semelhante à implementada (sem camada escondida).

O mesmo tipo de conjunto de treinamento foi usado (amostra estratificada, 6 repetições

por palavra). Um conjunto de validação de mesmo tamanho (120 gravações) foi usado. O erro

no conjunto de validação não entra no ajuste dos pesos, serve apenas para podermos detectar

supertreinamento da rede. O restante das amostras (480 gravações) compôs o conjunto de

teste. A técnica de treinamento selecionada foi “standard backpropagation”, exceto nos casos

da extração das centróides e extração STFT de 35 divisões, onde melhores resultados foram

obtidos com método de treinamento com taxa incremental (“incremental backpropagation”).

A tabela 10 mostra os resultados de classificação usando os métodos de extração descritos

anteriormente. Cada teste foi repetido três vezes com sorteio estratificado randômico do

conjunto de treinamento.

Tabela 10 Resultados utilizando algoritmos de redes neurais do SAS

Método de extração

Erro médio no conj. de

teste

Acertos no conj. de

treinamento

Acertos no conj. de

validação

Acertos no conj. de

teste

média de acertos

taxa de acerto

0.046 120 118 427

0.050 120 120 424 31 centróides 0.050 120 120 408

419.7 87.43%

0.014 120 119 463

0.023 120 114 455 STFT

(35 divisões) 0.023 120 114 459

459.0 95.63%

0.044 119 117 459

0.023 120 116 471 STFT

(155 divisões) 0.027 120 117 469

466.3 97.15%

0.050 119 119 446

0.047 118 118 438 DWT

(120 divisões) 0.048 120 120 445

443.0 92.29%

0.043 120 120 440

0.058 118 118 452 DWT método B (128 divisões)

0.036 120 120 459

450.3 93.82%

Page 69: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

67

Figura 5.13 Curvas de treinamento com extração DWT

Figura 5.14 Curvas de treinamento com extração DWT método B

Figura 5.15 Curvas de treinamento com extração STFT de 155 divisões

Figura 5.16 Curvas de treinamento com extração STFT de 35 divisões

Page 70: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

68

Figura 5.17 Curvas de treinamento com extração de 31 centróides

5.7.1 Multi Layer Perceptron

Tabela 11 Resultados com rede MLP

Método de extração Nós na camada escondida

Total de conexões

Média de acertos

STFT (35 divisões) 3 184 35.00%

STFT (35 divisões) 5 294 78.13%

STFT (35 divisões) 10 569 92.50%

STFT (35 divisões) 25 1394 93.13%

STFT (35 divisões) 70 3869 95.63%

Page 71: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

69

Figura 5.18 Curva de aprendizado do MLP com 3 nós na camada escondida

Figura 5.19 Curva de aprendizado do MLP com 70 nós na camada escondida

Page 72: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

70

6 Conclusões

Duas técnicas para análise do sinal de voz foram abordadas neste trabalho: uma que faz a

decomposição em funções de base senoidais e pressupõe que o sinal de voz é estacionário – o

que não é bem verdade (Long, 1996); outra que faz a decomposição em funções de base com

energia finita no tempo (Wavelets) sendo mais precisa na representação de características

transientes.

Os resultados obtidos não indicam superioridade absoluta de alguma das duas técnicas.

Enquanto o melhor resultado obtido pela rede neural artificial implementada foi usando a

transformada Wavelet durante a extração de características (acerto de 96,39%), o melhor

resultado apresentado pelos algorítmos de redes neurais do SAS foi usando STFT na fase de

extração (acerto de 97,15%).

Quanto à topologia da rede neural, conclui-se que o uso de uma rede multi-camadas não é

interessante para este problema. Os resultados mostram (seção 5.7.1) que são necessários

muitos nós na camada escondida (conseqüentemente muitos pesos e muito processamento

gasto da retropropagação dos erros) para se obter o poder de representação alcançado pelas

redes de camada única.

A função de ativação usada, multi-logística, foi responsável tanto por um aumento na taxa

de classificação correta da rede (já que interfere no processo de ajuste dos pesos) como na

precisão dos valores de saída (erro médio muito menor). Tal nível de precisão permite que se

adote um critério para decidir quando a rede foi ou não capaz de identificar a palavra com um

nível de confiança adequado. Observe na tabela 9 como a intersecção entre os valores de saída

para os casos em que a rede classificou corretamente e incorretamente ou é muito pequena ou

sequer existe.

Page 73: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

71

Outra vantagem da rede conforme implementada é que não ocorre o supertreinamento,

como nas redes MLP. Observe a seção 5.6 onde os resultados são mostrados para um

treinamento de dez mil épocas. Quanto mais épocas, mais a rede reduz seu erro médio para o

conjunto de treinamento, e mais precisa se torna ao aplicarmos o conjunto de teste (novas

ocorrências). Quanto à regra de aprendizado, a função de erro de Bernoulli se mostrou uma

forma mais adequada de corrigir os pesos. Apesar de não abordarmos nos resultados, o

método LMS e função de ativação linear (regra delta) leva muito mais épocas para convergir a

um resultado satisfatório (e sem a mesma precisão), necessitando que se utilize uma taxa de

treinamento dezenas de vezes menor.

Ainda quanto aos métodos de extração, observou-se que a extração STFT com definição

de cinco sub-bandas foi superior ao cálculo da centróide do espectro de cada frame. Com a

transformada Wavelet, dos dois métodos de divisão das sub-bandas de coeficientes de detalhe,

o primeiro (numéro fixo de coeficientes) foi ligeiramente superior em todos os testes

realizados com a rede neural implementada. No teste realizado com o SAS, o segundo método

foi ligeiramente superior (93,82% de acertos), porém não atingiu o mesmo nível da rede

neural implementada.

A utilização de redes neurais no reconhecimento de palavras isoladas se mostrou não só

possível como extremamente eficaz. Um dos temas a se trabalhar futuramente é o teste com

coeficientes Wavelet que possam ser mais adequados para modelagem da voz,

especificamente sons vocálicos, que apresentam algum nível de periodicidade. Outra

possibilidade é o uso da rede neural para o reconhecimento de fonemas de forma

independente de locutor.

Page 74: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

72

REFERÊNCIAS

Barone, D. A. "Projeto Revox". Universidade de Caxias do Sul. Centro de Ciências Exatas e

Tecnologia, 1999. <http://ccet.ucs.br/pesquisa/projetos/revox/> acessado em 8 jul. 2006 Brierley, P. “Back Propagation Weight Update Rule”. Sem data.

<http://www.philbrierley.com/code/bpproof.html>. Acesso em 8 jul. 2006. Chaplais, F. “A WAVELET TOUR OF SIGNAL PROCESSING BY STÉPHANE

MALLAT. Academic Press, 1998. A SHORT PRESENTATION BY F. CHAPLAIS”. February 2, 1999. <http://cas.ensmp.fr/~chaplais/Wavetour_presentation/Wavetour_presentation_US.html>. Acessado em 13 jul. 2006.

Chow, M. & Goode, P. “Bernoulli Error Measure Approach to Train Feedforward

Artificial Neural Networks for Classification Problems”. 0-7803-1901-X/94 IEEE 1994. pp.44-49.

Cook, P.R. Tzanetakis, G. Essl, G. “Audio Analysis using the Discrete Wavelet

Transform”, In Cook, P.R. “Audio Analysis using the Discrete Wavelet Transform”, In Proc. WSES Int. Conf. Acoustics. <www.cs.princeton.edu/~gessl/CV-online.pdf>

Dovicchi, J. C. L. e Alves, J. B. M. “Functional Programming as a Natural Choice for

Spectral Centroid Analysis in Digital Signal Processing (DSP)” Enviado ao Journal of Functional Programming. http://turing.rexlab.ufsc.br/page/papers-jcd/centroide-jfp.ps. Acesso em 8 jul. 2006.

Dovicchi, J. C. L. “Novos Coeficientes Wavelets Baseados em Intervalos Musicais para a

Análise de Timbres de Instrumentos Acústicos”, Tese apresentada para obtenção de título de Doutor em Engenharia Elétrica, Universidade Federal de Uberlândia, Uberlândia, MG, Brasil, 171 pp., 1999. Disponível em: http://turing.rexlab.ufsc.br/page/papers-jcd/douttese.ps. Acesso em 8 jul. 2006.

Dovicchi, J. C. L. Carrijo, G. Lima, L. "Short Time Fourier Transforms And Wavelets: A

Combined Technique For Musical Signal Analysis" In: Conference on Mathematical and Computational Methods in Music, 1999, Viena, Diderot´99. Viena - Austria: , 1999. < http://turing.rexlab.ufsc.br/page/papers-jcd/fft-wav.ps>

Goya, D. H. “Tecnologia do Reconhecimento de Voz”. Revista PCWord. Acessado em set.

2002. http://pcworld.uol.com.br/pcw/testes/index_categoria?categ=tecno_hard Hebb, D. O. 1988. The organization of behavior. In Neurocomputing: Foundations of

Research, J. A. Anderson and E. Rosenfeld, Eds. MIT Press, Cambridge, MA, 43-54.

Page 75: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

73

IBM. “IBM Home Page Reader 3.04”. 2006a. Acessado em jun. 2006. <http://www-3.ibm.com/able/solution_offerings/hpr.html>

IBM. “Embedded ViaVoice, Enterprise Edition”. 2006b. Acessado em jun. 2006.

<http://www-306.ibm.com/software/pervasive/embedded_viavoice_enterprise/about/> Ynoguti, C. A. "Transformada Discreta de Fourier". Instituto Nacional de

Telecomunicações. Santa Rita do Sapucaí - Minas Gerais - Brasil. Set. 2004 <http://www.inatel.br/docentes/ynoguti/e724/DFT.pdf>

Kaplan, I “Spectral Analysis and Filtering with the Wavelet Transform”. August 2002.

http://www.bearcave.com/misl/misl_tech/wavelets/freq/index.html. Acessado em 16 jul. 2006.

Kovács, Z. L. Redes Neurais Artificiais: Fundamentos e Aplicações. Segunda Edição,

Collegium Cognitio, 1996. Kröse, B., & Smagt, P. “An Introduction to Neural Networks”. Oitava edição, Universidade

de Amsterdã, 1996. http://www.gmd.de/ftp/div/documents/neuroprose/neuro-intro.ps.gz Lima, P. C. "Wavelets: uma introdução". Departamento de Matemática - ICEX - UFMG.

Matemática Universitária, Nº33 (2002) , 13-44. <http://www.mat.ufmg.br/%7Elima/artigos/rmu33.pdf>

Long, C.J. & Datta, S. “Wavelet Based Feature Extraction for Phoneme Recognition”.

PROC. ICSLP 1996, pp. 264-267. http://www.asel.udel.edu/icslp/cdrom/vol1/239/a239.pdf

McCulloch, W. S. & Pitts, W. 1988. “A logical calculus of the ideas immanent in nervous

activity”. In Neurocomputing: Foundations of Research, J. A. Anderson and E. Rosenfeld, Eds. MIT Press, Cambridge, MA, 15-27.

Minsky, M. & Papert, S. 1988. “Perceptrons”. In Neurocomputing: Foundations of Research,

J. A. Anderson and E. Rosenfeld, Eds. MIT Press, Cambridge, MA, 157-169. Nascimento, C. L. Artificial Neural Networks in Control and Optimization. Doctor Thesis.

University of Manchester. Manchester, 1994. Parreira, W. D. "Reconhecimento de Locutor pela Voz usando o Classificador Polinomial

e Quantizaçãoo Vetorial". Dissertação de mestrado. Faculdade de Engenharia Elétrica, UFU, 38400-902, Uberlândia, MG, abr. 2005.

Patterson, D. W. “Artificial Neural Networks: Theory and Applications”. Prentice Hall,

1995. Reza, A. M. “Wavelet Characteristics.What Wavelet Should I use?”. Oct. 19, 1999.

WHITE PAPER, Spire Lab, UWM. <http://www.xilinx.com/products/logicore/dsp/wavlet_char.pdf>

Page 76: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

74

Sarle, W. “What is a softmax activation function?”. Jun. 2004 <http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-12.html>

Schniter, P. “Short-time Fourier Transform”. Version 2.13: 2005/10/05 15:21:14.374

GMT-5 Connexions module: m10417. Creative Commons. <http://cnx.rice.edu/content/m10417/latest/>

Schubert, E. Wolfe, J. Tarnopolsky, "A. Spectral centroid and timbre in complex, multiple

instrumental textures". University of New South Wales, Sydney, Australia. Ago. 2004. ISBN 1-876346-50-7 2004 ICMP. <http://www.phys.unsw.edu.au/~jw/reprints/SchWolTarICMPC8.pdf>

Silva, E. L. & Menezes, E. M. "Metodologia da Pesquisa e Elaboração de Dissertação". 3a

edição revisada e atualizada”. Universidade Federal de Santa Catarina. Programa de Pós-Graduação em Engenharia de Produção. Laboratório de Ensino a Distância. Florianópolis. 2001.

Torrence, C. & Compo, G. P. "A Practical Guide to nWavelet Analysis". Program in

Atmospheric and Oceanic Sciences, University of Colorado, Boulder, Colorado. 1998. <http://www.ma.utexas.edu/users/davis/reu/ch1/signals/torrence.pdf>

Traube, C. "Instrumental and vocal timbre perception". May 24, 2006 - Musicology

Department - University of Graz Psychology of Music Performance Seminar. <http://www-gewi.uni-graz.at/staff/parncutt/guests/2006/traube/ Slides_CTraube_timbre.pdf>

Tafner, M. A. Reconhecimento de palavras isoladas usando redes neurais artificiais.

Dissertação de mestrado. Programa de Pós-Graduação em Engenharia da Produção. Universidade Federal de Santa Catarina. Florianópolis, 1996.

Widrow, B. and Hoff, M. E. 1988. “Adaptive switching circuits”. In Neurocomputing:

Foundations of Research, J. A. Anderson and E. Rosenfeld, Eds. MIT Press, Cambridge, MA, 123-134.

Weisstein, E. W. "Apodization Function." From MathWorld--A Wolfram Web Resource.

2006a. <http://mathworld.wolfram.com/ApodizationFunction.html>. Acessado em 13 jul. 2006.

Weisstein, E. W. "Gibbs Phenomenon." From MathWorld--A Wolfram Web Resource.

2006b. <http://mathworld.wolfram.com/GibbsPhenomenon.html>. Acessado em 13 jul. 2006.

Zanchettin, C. & Ludermir, T. B. "Sistemas Neurais Híbridos para Reconhecimento de

padrões em Narizes Artificiais". XXV Congresso da Sociedade Brasileira da Computação. UNISINOS - São Leopoldo/RS. jul. 2005. <http://bibliotecadigital.sbc.org.br/download.php?paper=102>

Page 77: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

75

Outras referências (sem autor): Wikipédia contributors. “Rede Neural”. Wikipédia, The Free Encyclopedia, 2006. Disponível

em: http://pt.wikipedia.org/wiki/Redes_neurais. Acesso em 8 jul. 2006. Wikipedia contributors. “Harmonic Series”, Wikipedia, The Free Encyclopedia, Jul. 2005,

<http://en.wikipedia.org/wiki/Harmonic_series_%28music%29> Acesso em 8 jul. 2006. Wikipedia contributors. “Fundamental Frequency”, Wikipedia, The Free Encyclopedia, Jul.

2005, <http://en.wikipedia.org/wiki/Fundamental_frequency> Acesso em 8 jul. 2006. Wikipedia contributors. “Continuous Fourier transform”, Wikipedia, The Free

Encyclopedia, Jul. 2005, <http://en.wikipedia.org/wiki/Continuous_Fourier_transform> Acesso em 8 jul. 2006.

Wikipedia contributors. “Fourier series”, Wikipedia, The Free Encyclopedia, Jul. 2005,

<http://en.wikipedia.org/wiki/Fourier_series> Acesso em 8 jul. 2006. Wikipedia contributors. “Discrete wavelet transform”, Wikipedia, The Free Encyclopedia,

Jul. 2005, <http://en.wikipedia.org/wiki/Discrete_wavelet_transform> Acesso em 8 jul. 2006.

Wikipedia contributors. “Fast wavelet transform”, Wikipedia, The Free Encyclopedia, Jul.

2005, <http://en.wikipedia.org/wiki/Fast_wavelet_transform> Acesso em 8 jul. 2006. Wikipedia contributors. “Daubechies wavelet”, Wikipedia, The Free Encyclopedia, Jul. 2005,

<http://en.wikipedia.org/wiki/Daubechies_wavelet> Acesso em 8 jul. 2006. Wikipedia contributors. “Derivative”, Wikipedia, The Free Encyclopedia, Jul. 2005, <

http://en.wikipedia.org/wiki/Derivative> Acesso em 8 jul. 2006. Wikipedia contributors. “Chain rule”, Wikipedia, The Free Encyclopedia, Jul. 2005,

<http://en.wikipedia.org/wiki/Chain_rule> Acesso em 8 jul. 2006.

Page 78: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

76

APÊNDICE A – Código fonte da rede neural usada nos experimentos

RedeNeural.java Created with JBuilder package neural;

import java.io.*;

import java.text.*;

import java.util.*;

import DSP.*;

public class RedeNeural{

String[] palavras = {"seis","sete","oito","nove","zero","rosa",

"laranja","preto","marrom","roxo","amarelo",

"verde","azul","branco","vermelho","um","dois",

"tres","quatro","cinco"};

int numEpochs = 500;

int numInputs = 30;

int numOutputs = 20;

int numPatterns = 720;

private boolean softmax=true;

double LR = 0.25;

double Error;

int patNum;

double errThisPat[] = new double[numOutputs];

public double outPred[] = new double[numOutputs];

public double[][] trainInputs = new double[numPatterns][numInputs];

public double[][] trainOutput = new double[numPatterns][numOutputs];

public double[][] weights = new double[numInputs+1][numOutputs]; //+1 bias

Extrator extrator = new ExtratorWavelet();

public RedeNeural() {

PrintStream treinamento = null;

try {

treinamento = new PrintStream(new FileOutputStream("treinamento.txt"));

}

catch (FileNotFoundException ex) {

}

initWeights();

initData();

Random random = new Random();

for(int j = 0;j <= numEpochs;j++){

for(int i = 0;i<numPatterns;i++){

patNum = random.nextInt(numPatterns);

calcNet();

WeightChanges();

Page 79: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

77

}

calcOverallError();

System.out.println("epoch = " + j + " Error = " + Error);

treinamento.println(Error);

}

displayResults();

}

public String Predict(double[] Input){

trainInputs[0] = extrator.PowerSpectrum3(Input);

for (int j=0; j<numInputs; j++){

if (trainInputs[0][j] != 0)

trainInputs[0][j] = (trainInputs[0][j] - extrator.min) /

(extrator.max - extrator.min);

}

patNum = 0;

calcNet();

for (int i =0; i<20; i++)

System.out.println(outPred[i]);

return palavras[toint(outPred)];

}

public void Softmax() { //MLogistic activation

double SumExp = 0;

for(int k = 0;k<numOutputs;k++){

SumExp = SumExp + Math.exp(outPred[k]);

}

for(int k = 0;k<numOutputs;k++){

outPred[k] = Math.exp(outPred[k])/SumExp;

errThisPat[k] = trainOutput[patNum][k] - outPred[k];

}

}

public void calcNet() {

for(int k = 0;k<numOutputs;k++){

outPred[k] = 0.0;

for(int j = 0;j<numInputs;j++){

outPred[k] = outPred[k] + (trainInputs[patNum][j] * weights[j][k]);

}

outPred[k] = outPred[k] + weights[numInputs][k]; //bias

errThisPat[k] = trainOutput[patNum][k] - outPred[k];

}

if (softmax) Softmax();

}

public void WeightChanges(){

for(int k = 0;k<numOutputs;k++){

for (int j = 0; j < numInputs; j++){

double delta = LR * errThisPat[k] * trainInputs[patNum][j];

weights[j][k] = weights[j][k] + delta;

}

weights[numInputs][k] = weights[numInputs][k] + (LR * errThisPat[k]); //bias

}

}

public void initWeights(){

Random random = new Random();

for(int j = 0;j<numOutputs;j++){

Page 80: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

78 for(int i = 0;i<numInputs;i++)

weights[i][j] = 0.1*random.nextGaussian();

weights[numInputs][j] = 0.1*random.nextGaussian();//bias

}

}

public void initData(){

DecimalFormat format = new DecimalFormat();

format.setMinimumIntegerDigits(2);

format.setMaximumFractionDigits(0);

for (int i=0; i<60; i++){ //10 palavras, 6 repetições, 6 sessões

int j = i / 6;

double out[] = new double[numOutputs];

out[j]=1;

String num = format.format(i+1);

trainInputs[i] = extrator.Extrair("waves1/c("+num+").wav");

trainOutput[i] = out; //pattern 0 ao 59

trainInputs[i+360] = extrator.Extrair("waves2/c("+num+").wav");

trainOutput[i+360] = out;

trainInputs[i+120] = extrator.Extrair("waves3/c("+num+").wav");

trainOutput[i+120] = out;

trainInputs[i+180] = extrator.Extrair("waves4/c("+num+").wav");

trainOutput[i+180] = out;

trainInputs[i+240] = extrator.Extrair("waves5/c("+num+").wav");

trainOutput[i+240] = out;

trainInputs[i+300] = extrator.Extrair("waves6/c("+num+").wav");

trainOutput[i+300] = out;

}

for (int i=0; i<60; i++){ //+10 palavras, 6 repetições, 6 sessões

int j = i / 6;

double out[] = new double[numOutputs];

out[j+10]=1;

String num = format.format(i+1);

trainInputs[i+60] = extrator.Extrair("waves7/c("+num+").wav");

trainOutput[i+60] = out; //pattern 60 ao 119

trainInputs[i+60+360] = extrator.Extrair("waves8/c("+num+").wav");

trainOutput[i+60+360] = out;

trainInputs[i+120+360] = extrator.Extrair("waves9/c("+num+").wav");

trainOutput[i+120+360] = out;

trainInputs[i+180+360] = extrator.Extrair("waves10/c("+num+").wav");

trainOutput[i+180+360] = out;

trainInputs[i+240+360] = extrator.Extrair("waves11/c("+num+").wav");

trainOutput[i+240+360] = out;

trainInputs[i+300+360] = extrator.Extrair("waves12/c("+num+").wav");

trainOutput[i+300+360] = out;

}

PrintStream padroes = null;

try {

padroes = new PrintStream(new FileOutputStream("padroes.txt"));

}

catch (FileNotFoundException ex) {

}

padroes.print("Palavra");

for (int ti=0; ti<numInputs; ti++){

Page 81: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

79 padroes.print("\t");

padroes.print("TrainInput"+ti);

}

padroes.println();

for (int i=0; i<numPatterns; i++){

padroes.print(palavras[toint(trainOutput[i])]);

for (int j=0; j<numInputs; j++){

if (trainInputs[i][j] != 0)

trainInputs[i][j] = (trainInputs[i][j] - extrator.min) /

(extrator.max - extrator.min);

padroes.print("\t");

padroes.print(trainInputs[i][j]);

}

padroes.println();

}

System.out.print("maximo = "+extrator.max);

System.out.print("minimo = "+extrator.min);

numPatterns = 120;

}

public void displayResults(){

PrintStream acertos = null, err = null;

try {

acertos = new PrintStream(new FileOutputStream("acertos.txt"));

err = new PrintStream(new FileOutputStream("err.txt"));

}

catch (FileNotFoundException ex) {

}

numPatterns = 720;

int acertostst = 0, acertostrn = 0;

for(int i = 0; i<numPatterns; i++){

patNum = i;

calcNet();

int actual = toint(trainOutput[patNum]);

int model = toint(outPred);

double value = outPred[actual];

double sumerr = sum(outPred) - outPred[model];

if (i < 120){ //conj. trein.

if (actual == model) {

acertostrn++;

}

else {

}

}else{ //conj. teste

if (actual == model){

acertostst++;

acertos.println(value);

}

else{

err.println(value);

}

}

/* System.out.println("pat = " + (patNum+1)

+ " actual = " + palavras[actual]

+ " neural model = " + palavras[model]

+ " >>value "+ value+ " **sumerr "+ sumerr);*/

}

System.out.println("ACERTOS NO TESTE = "+ acertostst);

System.out.println("ACERTOS NO TREINAMENTO = "+ acertostrn);

}

Page 82: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

80

public void calcOverallError(){

Error = 0.0;

double E = 0.0;

for(int i = 0;i<numPatterns;i++){

patNum = i;

calcNet();

double Ep = 0.0;

for (int k = 0; k < numOutputs; k++){

Ep = Ep + (errThisPat[k]*errThisPat[k]/(2*numOutputs));

}

Error = Error + Ep/(numPatterns);

}

Error = Math.sqrt(Error);

}

public int toint(double[] d){

double great = Integer.MIN_VALUE;

int index = -1;

for (int i = 0; i<d.length; i++){

if (d[i] == 1) return i;

if (d[i] > great) {

great = d[i];

index = i;

}

}

return index;

}

public double sum(double[] d){

double s = 0;

for (int i = 0; i<d.length; i++)

s = s+Math.sqrt(d[i]*d[i]);

return s;

}

}

RedeNeural.java Created with JBuilder

Page 83: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

81

APÊNDICE B – Algoritmos de extração usando STFT

Extrator.java Created with JBuilder package DSP;

import java.io.*;

import java.io.IOException;

import javax.sound.sampled.*;

import javax.sound.sampled.AudioInputStream;

public class Extrator {

public double[] data;

static int txamostra = 8000;

static int framelength = 512; //divisível por 2

//framelength*frames > length

static int length = 8192; //numero de amostras lidas

static int frames = 2*length/framelength;//50% de sobreposição

static int nsb = 5; //número de subbandas analisadas

double[] mags;

double[] centroides;

double[] janela = new double[framelength];

public double max=Double.NEGATIVE_INFINITY,

min=Double.POSITIVE_INFINITY;

public Extrator(){

double x = -1;

for (int i=0; i<framelength; i++){

//Gaussian

//janela[i] = Math.exp(-0.5*(Math.pow(2.5*x,2)));

//Hann

janela[i] = (0.5*(1+Math.cos(Math.PI*(x))));

//Blackmann

//janela[i] = (0.42 -0.5*Math.cos(2*Math.PI*((1+x)/2))

// +0.08*Math.cos(4*Math.PI*((1+x)/2)));

x = x + 2.0/framelength;

}

}

public double[] Extrair(String nomearquivo) {

data = this.readwave(nomearquivo);

return PowerSpectrum2(data);

}

public double[] Centroides(double[] data){

mags = new double[(framelength/2)*frames];

centroides = new double[frames];

double[] frame = new double[framelength];

int p = 0, numframe = 0;

while (p+framelength <= length) {

Page 84: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

82 for (int i=0; i<framelength; i++) //Janelamento

frame[i] = data[p+i]*janela[i];

double[] magnitude = new double[framelength];

double[] real = new double[framelength];

double[] imag = new double[framelength];

double[] angle = new double[framelength];

ForwardRealToComplexFFT01.transform(frame,real,imag,angle,magnitude);

double pfreq = txamostra/framelength;

double num = 0, den = 0;

for(int i = 0; i < framelength/2; i++){ //abaixo da freq/2

magnitude[i] = log10(1+magnitude[i]);

num = num + i * pfreq * magnitude[i]; //Frequencia * Intensidade

den = den + magnitude[i];

}

centroides[numframe] = (num/den);

if (centroides[numframe]>max) max = centroides[numframe];

if (centroides[numframe]<min) min = centroides[numframe];

System.arraycopy(magnitude,0,mags,(framelength/2)*numframe,framelength/2);

numframe++;

p = p + length/frames;

}

return centroides;

}

public double[] PowerSpectrum(double[] data){

Centroides(data);

return mags;

}

public double[] PowerSpectrum2(double[] data){

mags = new double[nsb*frames];

double[] frame = new double[framelength];

int p = 0, numframe = 0;

while (p+framelength <= length) {

for (int i=0; i<framelength; i++)

frame[i] = data[p+i]*janela[i]; //Janelamento

double[] magnitude = new double[framelength];

double[] real = new double[framelength];

double[] imag = new double[framelength];

double[] angle = new double[framelength];

ForwardRealToComplexFFT01.transform(frame,real,imag,angle,magnitude);

int pf = framelength/(int)Math.pow(2,nsb),

numband = 1;

for (int i=0; i<pf; i++)//numband = 0

mags[numframe*nsb] = mags[numframe*nsb]+magnitude[i];

mags[numframe*nsb] = log10(1+mags[numframe*nsb]);

while (pf < framelength/2) {

for(int i=pf; i<(pf*2); i++)

mags[numband+numframe*nsb] = mags[numband+numframe*nsb]

+ magnitude[i]*magnitude[i];

mags[numband+numframe*nsb] = log10(1+mags[numband+numframe*nsb]);

numband++;

pf = pf*2;

}

for (int i=0; i<nsb; i++){

Page 85: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

83 if (mags[numframe * nsb + i] > max) max = mags[numframe * nsb + i];

if (mags[numframe * nsb + i] < min) min = mags[numframe * nsb + i];

}

numframe++;

p = p + length/frames;

}

return mags;

}

public double[] readwave(String filename){

byte[] audioBytes = null;

try {

AudioInputStream audioInputStream =

AudioSystem.getAudioInputStream(new File(filename));

audioInputStream = AudioSystem.

getAudioInputStream(getAudioFormat(), audioInputStream);

if (audioInputStream.getFormat().getSampleSizeInBits() != 8)

throw new RuntimeException("File format not supported: " + filename);

int nlengthInFrames = (int) audioInputStream.getFrameLength();

audioBytes = new byte[nlengthInFrames];

audioInputStream.read(audioBytes);

}

catch (Exception ex) {

ex.printStackTrace();

}

int start, end;

for (start = 0; start < audioBytes.length; start++)

if(audioBytes[start] > 128*0.1) break;

//detecta primeiro pico (vogal)

start = start - txamostra/10;

//recua 100ms (incluir eventual consoante)

end = start + length;

double[] data = new double[length];

for (int i=0; i+start < end; i++)

data[i]=audioBytes[i+start];

return data;

}

private AudioFormat getAudioFormat(){

float sampleRate = 8000.0F;

//8000,11025,16000,22050,44100

int sampleSizeInBits = 8;

//8,16

int channels = 1;

//1,2

boolean signed = true;

//true,false

boolean bigEndian = false;

//true,false

return new AudioFormat(

sampleRate,

sampleSizeInBits,

channels,

signed,

bigEndian);

}//end getAudioFormat

Page 86: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

84 // log10: Logarithm base 10

public static double log10(double d) {

return Math.log(d)/Math.log(10.0);

}

public double[] PowerSpectrum3(double[] data){

return null;

}

}

Extrator.java Created with JBuilder

Page 87: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

85

APÊNDICE C – Algoritmos de extração usando DWT

ExtratorWavelet.java Created with JBuilder package DSP;

import java.io.*;

public class ExtratorWavelet extends Extrator {

public ExtratorWavelet() {

}

public double[] PowerSpectrum(double[] data){

int ncoeficientes=8192;

mags = new double[13];

Daub daub = new Daub();

daub.daubTrans(data);

int p = 1, numband = 0;

while (p < ncoeficientes) {

for(int i=p; i<(p*2); i++){

mags[numband] = mags[numband] + data[i]*data[i];

}

mags[numband] = log10(1+mags[numband]);

numband++;

p = p*2;

}

for (int i=0; i<13; i++){

if (mags[i]>max) max = mags[i];

if (mags[i]<min) min = mags[i];

}

return mags;

}

public double[] PowerSpectrum2(double[] data){

Daub daub = new Daub();

daub.daubTrans(data);

int ncoeficientes=8192,

blperband = 8, //qtos frames

numband = 9, //primeira subbanda considerada

p = (int)Math.pow(2,numband),

inicio=blperband*numband;

mags = new double[(13*blperband)-inicio];

while (p < ncoeficientes) {

int tmbl = p / blperband;

int offset = numband*blperband -inicio;

for(int i=p; i<(p*2); i++){

int p2 = i/tmbl - blperband;

mags[offset+p2] = mags[offset+p2] + data[i]*data[i];

}

numband++;

p = p*2;

}

for (int i=0; i<mags.length; i++){

Page 88: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

86 mags[i] = log10(1+mags[i]);

if (mags[i]>max) max = mags[i];

if (mags[i]<min) min = mags[i];

}

int index = 0;

double[] mags2 = new double[(13*blperband)-inicio]; //reordenar

for (int bl=0; bl<blperband; bl++){

for (int ba=0; ba<mags.length/blperband; ba++){

mags2[index] = mags[(ba*blperband)+bl];

index++;

}

}

return mags;

}

public double[] PowerSpectrum3(double[] data){

mags = new double[64+32+16+8];

Daub daub = new Daub();

daub.daubTrans(data);

int ncoeficientes=8192,

tmbl = 64,

p = 512,

p1 = 0;

while ( p < ncoeficientes) {

int blperband = p/tmbl;

for(int i=p; i<(p*2); i++){

int p2 = i/tmbl - blperband;

mags[p1+p2] = mags[p1+p2] + data[i]*data[i];

}

p = p*2;

p1 = p1 + blperband;

}

for (int i=0; i<mags.length; i++){

mags[i] = log10(1+mags[i]);

if (mags[i]>max) max = mags[i];

if (mags[i]<min) min = mags[i];

}

return mags;

}

public double[] Extrair(String nomearquivo) {

return PowerSpectrum3(this.readwave(nomearquivo));

}

}

ExtratorWavelet.java Created with JBuilder

Page 89: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

87

ANEXO A – Código fonte da FFT

ForwardRealToComplexFFT01.java Created with JBuilder package DSP;

/*File ForwardRealToComplexFFT01.java

Copyright 2004, R.G.Baldwin

Rev 5/14/04

*/

public class ForwardRealToComplexFFT01{

public static void transform(

double[] data,

double[] realOut,

double[] imagOut,

double[] angleOut,

double[] magnitude){

double pi = Math.PI;//for convenience

int dataLen = data.length;

//The complexToComplex FFT method does an

// in-place transform causing the output

// complex data to be stored in the arrays

// containing the input complex data.

// Therefore, it is necessary to copy the

// input data to this method into the real

// part of the complex data passed to the

// complexToComplex method.

System.arraycopy(data,0,realOut,0,dataLen);

//Perform the spectral analysis. The results

// are stored in realOut and imagOut. The +1

// causes it to be a forward transform. A -1

// would cause it to be an inverse transform.

complexToComplex(1,dataLen,realOut,imagOut);

//Compute the magnitude and the phase angle

// in degrees.

for(int cnt = 0;cnt < dataLen;cnt++){

magnitude[cnt] =

(Math.sqrt(realOut[cnt]*realOut[cnt]

+ imagOut[cnt]*imagOut[cnt]))/(dataLen);

if(imagOut[cnt] == 0.0

&& realOut[cnt] == 0.0){

angleOut[cnt] = 0.0;

}//end if

else{

angleOut[cnt] = Math.atan(

imagOut[cnt]/realOut[cnt])*180.0/pi;

}//end else

if(realOut[cnt] < 0.0

&& imagOut[cnt] == 0.0){

angleOut[cnt] = 180.0;

}else if(realOut[cnt] < 0.0

&& imagOut[cnt] == -0.0){

angleOut[cnt] = -180.0;

}else if(realOut[cnt] < 0.0

&& imagOut[cnt] > 0.0){

Page 90: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

88 angleOut[cnt] += 180.0;

}else if(realOut[cnt] < 0.0

&& imagOut[cnt] < 0.0){

angleOut[cnt] += -180.0;

}//end else

}//end for loop

}//end transform method

//-------------------------------------------//

//This method computes a complex-to-complex

// FFT. The value of sign must be 1 for a

// forward FFT.

public static void complexToComplex(

int sign,

int len,

double real[],

double imag[]){

double scale = 1.0;

//Reorder the input data into reverse binary

// order.

int i,j;

for (i=j=0; i < len; ++i) {

if (j>=i) {

double tempr = real[j]*scale;

double tempi = imag[j]*scale;

real[j] = real[i]*scale;

imag[j] = imag[i]*scale;

real[i] = tempr;

imag[i] = tempi;

}//end if

int m = len/2;

while (m>=1 && j>=m) {

j -= m;

m /= 2;

}//end while loop

j += m;

}//end for loop

//Input data has been reordered.

int stage = 0;

int maxSpectraForStage,stepSize;

//Loop once for each stage in the spectral

// recombination process.

for(maxSpectraForStage = 1,

stepSize = 2*maxSpectraForStage;

maxSpectraForStage < len;

maxSpectraForStage = stepSize,

stepSize = 2*maxSpectraForStage){

double deltaAngle =

sign*Math.PI/maxSpectraForStage;

//Loop once for each individual spectra

for (int spectraCnt = 0;

spectraCnt < maxSpectraForStage;

++spectraCnt){

double angle = spectraCnt*deltaAngle;

double realCorrection = Math.cos(angle);

double imagCorrection = Math.sin(angle);

int right = 0;

for (int left = spectraCnt;

left < len;left += stepSize){

right = left + maxSpectraForStage;

double tempReal =

Page 91: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

89 realCorrection*real[right]

- imagCorrection*imag[right];

double tempImag =

realCorrection*imag[right]

+ imagCorrection*real[right];

real[right] = real[left]-tempReal;

imag[right] = imag[left]-tempImag;

real[left] += tempReal;

imag[left] += tempImag;

}//end for loop

}//end for loop for individual spectra

maxSpectraForStage = stepSize;

}//end for loop for stages

}//end complexToComplex method

}//end class ForwardRealToComplexFFT01

ForwardRealToComplexFFT01.java Created with JBuilder

Page 92: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

90

ANEXO B – Código fonte da transformada wavelet Daubechies 4

Daub.java Created with JBuilder package DSP;

/*

http://www.bearcave.com/software/java/wavelets/daubechies.html

Ian Kaplan, July 2001

Revised: November 2001

*/

import java.lang.Math.*;

class Daub {

protected final double sqrt_3 = Math.sqrt( 3 );

protected final double denom = 4 * Math.sqrt( 2 );

//

// forward transform scaling (smoothing) coefficients

//

protected final double h0 = (1 + sqrt_3)/denom;

protected final double h1 = (3 + sqrt_3)/denom;

protected final double h2 = (3 - sqrt_3)/denom;

protected final double h3 = (1 - sqrt_3)/denom;

//

// forward transform wavelet coefficients

//

protected final double g0 = h3;

protected final double g1 = -h2;

protected final double g2 = h1;

protected final double g3 = -h0;

//

// Inverse transform coefficients for smoothed values

//

protected final double Ih0 = h2;

protected final double Ih1 = g2; // h1

protected final double Ih2 = h0;

protected final double Ih3 = g0; // h3

//

// Inverse transform for wavelet values

//

protected final double Ig0 = h3;

protected final double Ig1 = g3; // -h0

protected final double Ig2 = h1;

protected final double Ig3 = g1; // -h2

/**

Forward wavelet transform.

Note that at the end of the computation the

calculation wraps around to the beginning of

the signal.

*/

protected void transform( double a[], int n )

{

if (n >= 4) {

int i, j;

int half = n >> 1;

double tmp[] = new double[n];

Page 93: Reconhecimento de Palavras Usando Redes Neurais · década de 1950 instituições de pesquisa já estudavam meios de fazer com que a voz fosse processada pelo computador ... para

91 i = 0;

for (j = 0; j < n-3; j = j + 2) {

tmp[i] = a[j]*h0 + a[j+1]*h1 + a[j+2]*h2 + a[j+3]*h3;

tmp[i+half] = a[j]*g0 + a[j+1]*g1 + a[j+2]*g2 + a[j+3]*g3;

i++;

}

tmp[i] = a[n-2]*h0 + a[n-1]*h1 + a[0]*h2 + a[1]*h3;

tmp[i+half] = a[n-2]*g0 + a[n-1]*g1 + a[0]*g2 + a[1]*g3;

for (i = 0; i < n; i++) {

a[i] = tmp[i];

}

}

} // transform

protected void invTransform( double a[], int n )

{

if (n >= 4) {

int i, j;

int half = n >> 1;

int halfPls1 = half + 1;

double tmp[] = new double[n];

// last smooth val last coef. first smooth first coef

tmp[0] = a[half-1]*Ih0 + a[n-1]*Ih1 + a[0]*Ih2 + a[half]*Ih3;

tmp[1] = a[half-1]*Ig0 + a[n-1]*Ig1 + a[0]*Ig2 + a[half]*Ig3;

j = 2;

for (i = 0; i < half-1; i++) {

// smooth val coef. val smooth val coef. val

tmp[j++] = a[i]*Ih0 + a[i+half]*Ih1 + a[i+1]*Ih2 + a[i+halfPls1]*Ih3;

tmp[j++] = a[i]*Ig0 + a[i+half]*Ig1 + a[i+1]*Ig2 + a[i+halfPls1]*Ig3;

}

for (i = 0; i < n; i++) {

a[i] = tmp[i];

}

}

}

/**

Forward Daubechies D4 transform

*/

public void daubTrans( double s[] )

{

final int N = s.length;

int n;

for (n = N; n >= 4; n >>= 1) {

transform( s, n );

}

}

/**

Inverse Daubechies D4 transform

*/

public void invDaubTrans( double coef[])

{

final int N = coef.length;

int n;

for (n = 4; n <= N; n <<= 1) {

invTransform( coef, n );

}

}

} // daub

Daub.java Created with JBuilder