on-off de dispositivos eletroeletrônicos através do reconhecimento de … · técnicas de...
TRANSCRIPT
UNICENP – CENTRO UNIVERSITÁRIO POSITIVO
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
CURSO DE ENGENHARIA DA COMPUTAÇÃO
PROJETO FINAL
Controle On-Off de Dispositivos Eletroeletrônicos através do
Reconhecimento de Voz
Curitiba, 2002.
Formatado
ii
UNICENP – CENTRO UNIVERSITÁRIO POSITIVO
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
CURSO DE ENGENHARIA DA COMPUTAÇÃO
PROJETO FINAL
Controle On-Off de Dispositivos Eletroeletrônicos através do
Reconhecimento de Voz
Autor: Lílian Franco Brito de Luca.
Prof. Orientador: Valfredo Pilla Jr.
Curitiba, 2002.
Formatado
iii
SUMÁRIO
Resumo iv
Abstract v
Lista de Figuras vi
Lista de Tabelas vii
1. Introdução 05
1.1 Motivação 08
2. Especificação 10
2.1 Descrição 10
2.2 Estudo Teórico 13
2.3 Especificação do Hardware 18
2.4 Especificação do Software 18
2.5 Especificação da Validação do Projeto 22
3. O Projeto 23
3.1 Aquisição do Sinal 23
3.1.1 Protocolo para Captura dos Sons 23
3.1.2 Captura dos Sinais da Placa de Som 24
3.2 Processamento do Sinal 25
3.2.1 Transformada Rápida de Fourier 25
3.2.2 Algoritmo da FFT 25
3.3 Classificador 28
3.3.1 Descrição dos Procedimentos para Determinação das Componentes de
Freqüência para Entrada do Classificador 28
3.4 Interface de Potência 36
3.4.1 Parâmetros e Cálculos do Circuito 36
3.4.2 Funcionamento da Interface de Potência 37
4. Resultados 38
5. Conclusão 42
6. Referências 43
Anexo1 – Comparação das Componentes de Freqüência encontradas nas vogais A e I 44
Anexo2 – Relação das Componentes de Freqüência em cada uma das vogais 45
iv
RESUMO
O Controle On-Off de Dispositivos Eletroeletrônicos através de Reconhecimento de
Voz é um sistema baseado em um microcomputador PC, que utiliza uma das principais
técnicas de processamento digital de sinais, a Transformada de Fourier, e uma das mais
utilizadas técnicas de reconhecimento de padrões, as Redes Neurais.
O projeto a ser desenvolvido é classificado, pela área de reconhecimento de voz,
como sistema independente do locutor, ou seja, onde são consideradas as pronúncias
independentes de um determinado locutor, importando somente o que foi dito e não quem
disse.
O sistema foi dividido em 4 módulos: aquisição do sinal de voz, processamento do
sinal, classificação do padrão e interface de potência. Este trabalho apresenta
detalhadamente a descrição do projeto, o embasamento teórico e os procedimentos para
implementação de cada módulo.
O resultado desejado é controlar o acionamento de uma lâmpada, no intuito de
proporcionar uma melhor qualidade de vida a pessoas portadoras de deficiência física,
tetraplégica, pois permitirá a realização desta tarefa sem ajuda de terceiros.
PALAVRAS-CHAVES
Reconhecimento de Padrões, Redes Neurais, Processamento Digital de Sinais,
Acionamento de Dispositivos.
v
ABSTRACT
The On-Off Control of Electronic Devices with Voice Recognition is based on a PC
microcomputer. This development applies a major digital processing technique the Fourier
Transform. Feed-forward backpropagation neural networks are applied as voice pattern
recognition classifier.
In the domain of voice recognition this project is classified as a speaker independent
system, its means that speaker dependent variabilities pronouce characteristics are ignored.
The system is dismembered into four modules: voice signal acquisition, signal
processing, pattern classification and power interface. This work presents meticulously the
development its development theorical basis and the implementation procedures of each
module.
The project aim is the on-off control of a device like a lamp, intending to supply a
better life quality to physically challenged enhancing its abilities on environment
interfacing.
PALAVRAS-CHAVES
Pattern Recognition, Neural Networks, Signal Processing.
vi
LISTA DE FIGURAS
Figura 1 – Diagrama Funcional do Sistema 10
Figura 2 – Diagrama em Blocos 11
Figura 3 – Gravador de Som Windows 11
Figura 4 – (a) Sinal sonoro gerado pela pronúncia da vogal A. (b) Sinal sonoro gerado
pela pronúncia da vogal I 13
Figura 5 – Grafo Arquitetural de um Perceptron de Múltiplas Camadas totalmente
conectado com uma camada oculta 16
Figura 6 – Exemplo de esquemático de uma Interface de Potência 17
Figura 7 – Diagrama de blocos descrevendo a decomposição de uma DFT de 8 pontos em
termos de duas DFT de 4 pontos 19
Figura 8 – Fluxograma do Algoritmo de Treinamento Back-propagation 20
Figura 9 – Fluxograma do Software Integrador 21
Figura 10 – Decomposição da FFT 25
Figura 11 – Diagrama de Butterfly 26
Figura 12 – Fluxograma da FFT, baseado em três estágios: Decomposição do sinal,
componentes de freqüência e combinação das componentes em um único espectro 27
Figura 13 – Esquemático do circuito para acionamento da lâmpada 36
Figura 14 – Programa desenvolvido em C para acionamento da interface de potência 38
Figura 15 – Programa desenvolvido em Matlab para aquisição, processamento e
classificação do sinal de voz 39
Figura 16 – Implementação da interface de potência 41
vii
LISTA DE TABELAS
Tabela 1 – Mapeamento de entrada e saída do algoritmo integrador 21
Tabela 2 – Relação de todas as componentes de freqüências e suas amplitudes encontradas
em cada uma das amostras, da vogal A, coletas do sétimo voluntário 29
Tabela 3 – Relação de todas as componentes de freqüências e suas amplitudes encontradas
sem cada uma das amostras, da vogal I, coletas do sétimo voluntário 29
Tabela 4 – Desempenho obtido do treinamento do Classificador com amostras das vogais
A e I 40
Tabela 5 – Comparação das componentes de freqüências encontradas na pronúncia da
vogal A com as componentes encontradas na pronúncia da vogal I Anexo1
Tabela 6 – Relação de todas as componentes de freqüência e suas amplitudes encontradas
em cada uma das amostras, da vogal A, coletadas de todos os voluntários Anexo2
Tabela 7 – Relação de todas as componentes de freqüência e suas amplitudes encontradas
em cada uma das amostras, da vogal I, coletadas de todos os voluntários Anexo2
5
1. INTRODUÇÃO
A constante busca para aperfeiçoar e estreitar o relacionamento entre homens e
máquinas, tornando-o mais natural, não é nenhuma novidade. Um antigo desejo do homem
foi sempre poder controlar suas máquinas por meio da fala.
Os crescentes avanços tecnológicos fazem com que o reconhecimento de fala seja um
campo de estudos fascinante e ao mesmo tempo desafiador, uma vez que é bastante grande
a gama de aplicações, onde o uso da voz tem o papel de agilizar e facilitar a realização de
tarefas cotidianas.
O controle de dispositivos eletroeletrônicos do tipo liga-desliga (on-off) será ativado
pelo reconhecimento da voz humana. O sistema é baseado em um microcomputador PC. O
dispositivo eletroeletrônico será ativado através de uma interface de potência acoplada à
porta paralela do computador.
O projeto é restrito ao reconhecimento de duas vogais, uma associada ao comando
“ligar” e outra ao comando “desligar”. Serão consideradas as pronúncias independentes de
um determinado locutor, importando somente o que foi dito e não quem o disse.
1.1 Motivação
O crescimento nas pesquisas relacionadas ao reconhecimento de voz, juntamente
com a variedade de aplicações em que essa nova tecnologia possa vir a ser empregada,
tanto na manipulação de sistemas pessoais como para controle de equipamentos e
utensílios eletrônicos, favorece e estimula a pesquisa neste campo interessante e ao mesmo
tempo desafiador. Motiva ainda a oportunidade de explorar métodos para processamento
de sinais e de reconhecimento de padrões, complementando o conhecimento teórico
desenvolvido ao longo do curso de engenharia da computação.
6
Ainda, o controle de dispositivos eletroeletrônicos através do reconhecimento da voz
humana pode ajudar as pessoas portadoras de deficiências físicas a realizar tarefas
cotidianas sem ajuda de terceiros, melhorando sua qualidade de vida.
10
2. ESPECIFICAÇÃO
Esta etapa inicial do projeto tem por objetivo definir e delimitar o escopo do sistema
a ser desenvolvido, bem como apresentar todo embasamento teórico para a segunda fase, o
planejamento do projeto.
Serão apresentados também especificações de hardware e software do sistema e os
procedimentos para validação e testes do projeto.
2.1. DESCRIÇÃO
O sistema a ser desenvolvido é de fácil utilização. Para que o dispositivo de saída, a
lâmpada, seja acionada, deve-se pronunciar, de uma forma clara e contínua, por 5 segundos
a vogal A, da mesma forma deverá ser feito com a vogal I, para o desligamento da
lâmpada. A figura1 apresenta o diagrama funcional do sistema.
Figura 1 – Diagrama Funcional do Sistema.
O projeto proposto é composto dos seguintes módulos: aquisição do sinal sonoro,ou
seja, aquisição de amostras de voz; processamento do sinal; classificação do sinal; ativação
Sound
Blaster Porta
Paralela
11
da interface de potência para acionamento do dispositivo e acionamento do dispositivo
propriamente dito, conforme mostrado na figura 2 – Diagrama em Blocos.
Figura 2 – Diagrama em Blocos.
A seguir é detalhado cada módulo.
Módulo 1 – Aquisição do Sinal Sonoro.
A fase inicial do projeto envolveu a análise das características dos sinais a serem
reconhecidos. Para tanto, o módulo de aquisição de sinal sonoro, que é constituído pela
placa sound blaster do microcomputador PC, é aplicado na captura da pronúncia continua
da vogal A, ou seja, aaaaaa, e da pronúncia continua da vogal I, ou seja, iiiiiiiiii. São
tomadas amostras com duração média de 5 segundos, provenientes de pelo menos 5
locutores diferentes.
O sinal de entrada deste módulo, ou seja, a voz humana, é captada por um microfone
acoplado em um PC com placa de processamento de sons. A placa de som captura o sinal
da a voz como sinal analógico e o converte para digital.
Utilizaremos como interface o software gravador de som do Windows, veja figura -
3. O formato de áudio para a gravação das amostras é: 8 Bits, monofônico com freqüência
de 22050Hz.
Figura 3 – Gravador de Som Windows.
Figura 3 – Gravador de Som Windows
Aquisição
do sinal
sonoro
Processa-
mento do
Sinal Tratamento do
sinal
Ativação
driveClassi
fica-ção do
Sinal
Acionamen
to da
Lâmpada.I
nterface de
Potência
Formatado
Formatado
12
Módulo 2 – Processamento do Sinal.
Uma forma de processamento de sinais largamente aplicada, devido também ao seu
poder computacional, é a Transformada Rápida de Fourier – FFT. O uso da FFT nos
permite identificar e distinguir as componentes cossenóides das diferentes freqüências,
fases e suas respectivas amplitudes que são combinadas para formar a onda sonora [3].
Com a utilização da FFT pode-se ajustar falhas ocorridas na aquisição dos sinais,
bem como diminuir a quantidade de sinais existentes. Dessa forma, é possível aplicar uma
técnica mais precisa que ao mesmo tempo possibilita essa diminuição no número de
elementos de processamento e também pode corrigir possíveis distorções.
Na fase inicial do trabalho, o sinal digital, obtido da saída da placa de som e
armazenado na forma de arquivos, é processado com o auxílio do software Matlab e
expresso, através da FFT, como superposição de componentes cossenóides, possibilitando
a caracterização do sinal, a definição da estrutura do som de cada vogal e determinação dos
requisitos da amostra, como: a quantidade de raias de frequencia e a taxa de amostragem.
Será feita a avaliação da eficácia do método utilizado, bem como, suas vantagens e
desvantagens. Posteriormente, uma implementação na linguagem C será usada na operação
em tempo real.
Módulo 3 – Classificação do Sinal.
O reconhecimento do som da vogal A, que permitirá a ativação do drive para
acionamento do dispositivo – a lâmpada, bem como o reconhecimento do som da vogal I,
que permitirá a desativação do drive, será feito através de um classificador baseado em
uma rede Multi-Layer Perceptron, com treinamento Backpropagation [2].
O treinamento desta rede será realizado off-line com o auxílio do software Matlab. A
operação em tempo real será implementada em programa de linguagem C.
13
Módulo 4 – Interface de Potência
A partir da classificação de um sinal de voz, um programa em C fará a captura,
processamento e a classificação dos sinais adquiridos da placa de som, enviando um
comando para a porta paralela que ira ativar ou desativar uma interface de potência que
permitirá o acionamento de uma lâmpada.
2.2. ESTUDO TEÓRICO
Módulo 1 – Aquisição do Sinal Sonoro.
Este módulo realiza a captação do som da fala e sua transformação em sinal digital
para manipulação por um computador digital.
Na sua forma natural os sons são analógicos. Eles aumentam e diminuem, alterando a
freqüência e amplitude em suaves progressões. O computador não pode armazenar o som
como ele é, para isto, o formato da informação precisa ser alterado, em outras palavras, a
informação precisa ser digitalizada.
Figura 4 – (a) Sinal sonoro gerado pela pronúncia da vogal A. (b) Sinal sonoro gerado
pela pronúncia da vogal I.
O som é captado através de um microfone, o qual está acoplado a uma placa
digitalizadora. Placas de som, tais como a Sound Blaster, realizam operações de
digitalização de sinais sonoros.
14
Para a fase de análise que antecede a implementação serão gerados arquivos de
áudio. O formato de arquivo de áudio em forma de onda (.WAV) é organizado na estrutura
Resource Interchange File Format – RIFF, estrutura criada especificamente para arquivos
com recurso multimídia [4].
O bloco básico de montagem de um arquivo RIFF, chamado de chunk, é formatado
da seguinte maneira:
<rID> <rTam> <rDado(rTam)>
onde:
<rID> identifica a representação da seqüência de dado (4 bytes).
<rTam> é o tamanho dos dados na seqüência seguinte.
<rDado(rTam)> é a seqüência de dado RIFF, com tamanho especificado em <rTam>.
Dentro do bloco de dados são suportadas várias formas de RIFF, o formato WAV é
definido da seguinte forma:
<rDado> = <wID> <seqüência de Formato> <Seqüência de Dados>
onde:
<wID> “WAVE” identifica o dado como dado de áudio de formato WAV (4 bytes).
Como citado anteriormente o formato de áudio para a captura do sinal é: 8 Bits,
Mono com freqüência de 22050Hz.
Módulo 2 – Processamento do Sinal.
A Transformada Discreta de Fourier (DFT) [3] tem um papel fundamental na análise
e na implementação de algoritmos e sistemas de processamentos digitais de sinais. Uma
das razões pelas quais a análise de Fourier é tão importante em processamento de sinais é a
existência de algoritmos eficientes para computar a Transformada Discreta de Fourier.
Os algoritmos para cálculo rápido da DFT são designados como Transformada
Rápida de Fourier - FFT (Fast Fourier Transform).
15
Funcionamento da Transformada Rápida de Fourier.
Uma função no domínio do tempo é traduzida pela FFT em uma função no domínio
da freqüência, possibilitando a análise da função pelas componentes de freqüências que
nela são encontradas.
A essência da FFT de uma onda é a decomposição da onda em uma soma de
cossenóides de freqüências diferentes. A representação gráfica da FFT é um diagrama que
mostra a amplitude e a freqüência de cada uma das diferentes cossenóides.
Mesmo que o número de freqüências diferentes existentes no som resulte em uma
grande quantidade de dados que precisam ser processados, é válido utilizar-se desse
processo matemático para otimizar os sinais obtidos porque existe uma diminuição
considerável na quantidade de sinais existentes sem que haja perda das características
principais da onda.
No uso da FFT, devem ser tomados certos cuidados. O vetor de dados utilizado como
entrada para a função deve ser composta por n elementos, onde n deve ser inteiro e maior
que 2. Como resultado a FFT retorna uma outra matriz contendo também n amostras,
porém apenas n / 2 destas amostras de fato apresentam informação relevante, nas demais é
apresentado um espectro espelhado. Por exemplo, quando se utiliza como entrada um vetor
de 256 elementos, obtém-se um outro vetor com 128 elementos.
Módulo 3 – Classificação do Sinal.
A meta final do reconhecimento de padrão é o classificador de padrões. O
classificador atua de modo a avaliar as características dos sinais de entrada de acordo com
as características relevantes identificadas para a medição.
A aplicação mais importante das redes neurais é solucionar problemas de
classificação de padrões, sua arquitetura é composta por uma camada de entrada, uma
camada de saída e algumas redes possuem camadas ocultas. As redes neurais são
caracterizadas pelos valores dos pesos sinápticos e pela função de ativação. Para obtermos
uma classificação correta dos padrões, as redes neurais são treinadas e seus pesos
ajustados.
Por ser muito usada na área de reconhecimento de padrões, tendo eficiência
conhecida, e devido à habilidade de aprender da experiência através de treinamento e do
16
alto poder computacional de sua arquitetura, a rede neural utilizada será uma Multi-Layer
Perceptron [2], ou seja, uma rede de múltiplas camadas alimentada adiante, sendo uma
camada de entrada, uma camada oculta de nodos computacionais e uma camada de saída.
A seguir é apresentado um grafo arquitetural da rede.
Figura 5 – Grafo Arquitetural de um Perceptron de Múltiplas Camadas totalmente
conectada com uma camada oculta.
As vantagens obtidas desta arquitetura são devidas as características, apresentadas a
seguir, desta rede.
Não linearidade suave: O modelo dos neurônios inclui uma função de ativação
suavemente não-linear;
Capacidade de aprender tarefas mais complexas: As camadas ocultas permitem
a extração progressiva de características mais significantes dos padrões, fazendo
com que a rede aprenda tarefas mais complexas.
Alto grau de conectividade: Esta conectividade é determinada pelas sinapses,
qualquer alteração nas conexões exige uma reorganização na população de
conexões sinápticas.
Figura 6 – Grafo Arquitetural de um Perceptron de Múltiplas Camadas totalmente
conectada com uma camada oculta.
Camada
de
Entrada
Primeira
Camada
Oculta
Resposta
(sinal de saída)
Estímulos
Camada
de
Saída
17
O treinamento desta rede será realizado de forma supervisionada, utilizando o
método back-propagation, ou seja, retropropagação de erro, que consiste em duas etapas:
Na primeira etapa é aplicado aos nodos de entrada um conjunto de dados, um padrão
obtido da fase anterior, que se propagarão, camada por camada, pela rede. Na segunda
etapa é calculado o erro cometido pela rede e retroprogapado, ou seja, propagado para trás,
o valor de ajuste dos pesos sinápticos, isto fará com as que as respostas produzidas pela
rede se aproxime cada vez mais da resposta ideal, ou desejada.
Cada neurônio da rede seja ele oculto ou de saída é projetado para o cálculo do sinal
funcional, entradas, e para o cálculo de estimativa do gradiente da superfície de erro.
Os padrões aplicados à rede corresponderão às raias, da FFT do sinal de voz de
entrada previamente, selecionadas na fase de análise. A saída do classificador identificará
três situações:
Presença da vogal A, ação ligar;
Presença da vogal I, ação de desligar e
Não presença de nenhuma destas vogais, não atuar.
Módulo 4 – Interface de Potência
Um programa em C fará a captura, processamento e a classificação dos sinais
adquiridos da placa de som, enviando um comando para a porta paralela que ira ativar ou
desativar uma interface de potência que permitirá o acionamento de uma lâmpada. A seguir
é apresentado o funcionamento da interface a ser desenvolvida.
Figura 6 – Exemplo de esquemático de uma Interface de Potência.
Rede
5V
DS1LAMP
1 2
K1
RELAY SPDT
35
412
P1
Porta Paralela
13251224112310229218207196185174163152141
RESISTOR
RESISTOR
DIODE
Q2
2N 22223
21
Rc
Rb
D
18
2.3. ESPECIFICAÇÃO DO HARDWARE
O hardware a ser desenvolvido tem o intuito de fornecer um meio para acionamento
de dispositivos externos, a lâmpada, através de uma interface de potência acoplada a porta
paralela do computador.
2.4. ESPECIFICAÇÃO DO SOFTWARE
Os algoritmos aqui descritos serão desenvolvidos para ambiente Windows e
implementados no Borland C++ Builder 5.
Algoritmo de processamento do sinal.
O papel da FFT como ferramenta computacional é ampliado com a disponibilidade
de algoritmos de avaliação altamente eficientes. O algoritmo utilizado é chamado
coletivamente de Transformadas Rápidas de Fourier. A seguir é apresentado um diagrama
de blocos descrevendo a decomposição da Transformada Discreta de Fourier – DFT.
19
Figura 7 – Diagrama de blocos d escrevendo a decomposição de uma DFT de 8
pontos em termos de duas DFT de 4 pontos .
Algoritmo de Treinamento da Rede Neural.
Em uma rede neural a habilidade de aprender a partir de seu ambiente e de melhorar
o seu desempenho através da aprendizagem é de fundamental importância. A melhoria do
desempenho ocorre com o tempo de acordo com alguma medida pré-estabelecida [5]. A
rede neural aprende sobre seu ambiente através de um processo interativo de ajustes
aplicados a seus pesos sinápticos.
A seguir é apresentado o fluxograma do algoritmo que utilizaremos no processo de
treinamento da rede.
20
Figura 8 – Fluxograma do Algoritmo de Treinamento Back-propagation.
Algoritmo do Software Integrador.
Será desenvolvido um software integrador, cujo objetivo é a integração de todos os
módulos do projeto. Abaixo é apresentado o fluxograma do software integrador e na
seqüência, é mostrado uma tabela com o mapeamento das entradas e saídas de cada etapa
doaalgoritmo.
Iníicio
Estímulos
(sinais
funcionais)
Cálculo do
Campo local
induzido
Cálculo da
saidasaída do
neurônio Função Ativação
Sinal de
Saída
Fim
Cálculo do sinal
de Erro
Ajuste nos
pesos sinápticos
Figura x – Fluxograma do algoritmo de treinamento Back-propagation
21
Figura 9 – Fluxograma do Software Integrador.
Mapeamento de Entrada e Saída do Software
Algoritmo Entradas Saídas
Aquisição do sinal de voz. Amostras temporais do sinal de
voz
Processamento dos Sinais. Amostras temporais do
sinal de voz
Componentes de freqüência do
Sinal.
Classificador. Componentes de
Freqüência do Sinal.
Classe a que pertence o Padrão.
Acionamento da interface. Classe a que pertence o
Padrão.
Ativação da Porta Paralela
Tabela 1 – Mapeamento de Entrada e Saída do Algoritmo Integrador.
Fim
Iniício
Aquisição
do Sinal de
voz
Cálculo das
componentes de
frequência.
Classificação do
sinal
Ativação
da porta
paralela.
22
2.5. ESPECIFICAÇÃO DA VALIDAÇÃO DO PROJETO
Para a validação do projeto a ser desenvolvido serão elaborados diversos testes cujo
intuito é a verificação da eficiência dos módulos que o compõe, são eles:
Teste do algoritmo de aquisição de sinais.
Teste do algoritmo de processamento de sinais.
Teste do algoritmo de classificação.
Teste do circuito e programa de interface.
Teste de validação de sistema, ou seja, teste integrado.
A cada algoritmo será submetido um conjunto de amostras onde a resposta obtida
será avaliada e comparada com a resposta desejada, ou ideal.
Para garantir o correto funcionamento do circuito será testado individualmente cada
componente do drive de ativação e simulado a ativação da porta paralela para novamente
avaliar e comparar a resposta obtida do circuito com a resposta esperada.
O teste final permitirá a integração de todos os módulos, será a utilização
propriamente dita do sistema em busca de ajustes finais.
23
3. O PROJETO
Esta é a etapa mais importante de todo projeto, ela é fundamental para se obter
sucesso na fase de implementação. Um projeto bem planejado e detalhado facilita a
execução e diminui o risco de retrabalho.
A seguir é apresentado o planejamento da execução de cada módulo do sistema de
Controle On-Off de Dispositivos Eletroeletrônicos através do Reconhecimento de Voz.
3.1 AQUISIÇÃO DO SINAL
3.1.1 Protocolo para a captura dos sons
Durante todo o processo de análise dos sons coletados, para descarte dos sons
deformados, notou-se um alto índice de sinais saturados e com ruídos. Mediante a este fato
surgiu à necessidade de se criar um protocolo de captura dos sons, que consiste num
conjunto de regras, bastante simples que melhoram a qualidade do sinal capturado. São
elas:
O microfone deve permanecer a uma distância entre 3 e 6 cm do locutor;
A posição do microfone deve estar na Horizontal;
O microfone deve estar envolto por uma espuma protetora.
24
3.1.1 Captura dos sinais da placa de som
Para a aquisição dos sinais sonoros da placa de som será utilizado um dos
componentes do DirectX API, o DirectSound, que permite a captura de sons de uma forma
relativamente simples [6].
O DirectSund usa o hardware, ele simula suas características em software quando
estas não estão presentes no hardware e ainda notifica eventos de captura.
O algoritmo para captura dos sons consiste em:
1. Inicialização do buffer, para armazenar o som capturado, através do método
IdirectSoundCaptureBuffer::Start
2. Determinar o tamanho da captura, através do método
IDirectSoundNotify::SetNotificationPositions
3. Encerrar a captura dos dados através do método
IdirectSoundCaptureBuffer::Lock.
4. Disponibilizar os dados do buffer, usando o endereço e o tamanho, parâmetros
retornados pelo método Lock.
5. Iniciar nova captura através do método IdirectSoundCaptureBuffer::Unlock.
6. Voltar ao passo 2.
Os métodos utilizados pertencem à biblioteca Dsound.h
25
3.2. PROCESSAMENTO DO SINAL
3.2.1 Transformada Rápida de Fourier
A Transformada de Fourier de uma função pode ser aproximada quando alguns
pontos do sinal são conhecidos. Ela pode ser obtida por:
Hn = k=0 N-1 e 2 i k n / N
3.2.2 Algoritmo da FFT
O algoritmo da FFT consiste em três etapas principais, são elas:
1. Decomposição dos N pontos do sinal no domínio do tempo em N sinais, com
apenas um ponto cada, também no domínio do tempo. A figura a seguir mostra a
decomposição da FFT de um sinal de 16 pontos.
Figura 10 – Decomposição da FFT.
26
Este processo de decomposição do sinal não é apenas uma reordenação do sinal, ele
causa também uma mudança inversa na ordem os bits que representam cada ponto, o que
chamamos de bit reversal sorting, ou ordenação inversa dos bits.
2. Cálculo das componentes de freqüência correspondentes a cada ponto do sinal
no domínio do tempo. Devido ao processo anterior, não precisamos nos preocupar
com esta etapa, pois a componente de freqüência de cada ponto é igual a ele
mesmo.
3. Combinação das componentes de freqüência em um único espectro de
freqüência. Esta combinação pode ser realizada através do diagrama de butterfly.
A figura a seguir mostra o diagrama para dois pontos de entrada, um ímpar e um
par, respectivamente.
Figura 11 – Diagrama de Butterfly.
O fluxograma da FFT é apresentado a seguir.
27
Figura 12 – Fluxograma da FFT, baseado em três estágios: Decomposição do sinal,
componentes de freqüência e combinação das componentes em um único espectro.
Encontrada a FFT do sinal é necessário filtrar as componentes, ou raias, de interesse
para a passagem ao módulo seguinte, o Classificador.
As raias de interesse, neste trabalho, são aquelas que caracterizam apenas a vogal
pronunciada e não o locutor. O processo de obtenção destas componentes é descrito no
módulo do classificador. A seguir é apresentado o procedimento de seleção e preparação
das entradas, vetor x[i], onde 1 i 26 para o classificador.
Calcular a amplitude média das componentes de freqüência pertencentes ao intervalo
i e armazenar em x[ i ].
28
3.3 CLASSIFICADOR
3.3.1 Descrição dos procedimentos para escolha das componentes de
freqüência para entrada do Classificador
A transformada rápida de Fourier foi escolhida para extração das componentes
espectrais a serem utilizadas como preditores do classificador neural. O objetivo do
classificador neural é verificar a presença da pronúncia da vogal A, da vogal I ou de ruído
de fundo, ruído do sistema de aquisição.
Inicialmente, foram coletas amostras de som de voz tomados de 7 voluntários que,
durante intervalos de 5s, pronunciaram ininterruptamente uma das vogais. Foram assim
tomadas 45 amostras de 5s de duração de cada vogal para cada voluntário, totalizando 90
amostras.
Este conjunto de dados foi analisado com o auxílio da ferramenta Matlab. Os
gráficos temporais de todos os sinais de voz foram inspecionados para que segmentos que
apresentassem saturação ou alguma outra falha fossem descartados.
Os sinais selecionados tiveram seu espectro calculado (toda a janela útil dentro do
intervalo de 5s). Destes espectros, foram construídas tabelas, duas para cada voluntário,
sendo uma para a vogal A e outra para a vogal I, que relacionam todas as componentes,
encontradas em cada amostra, com a sua respectiva amplitude, como mostrado nas tabelas
apresentadas a seguir.
29
Voluntário 7
Primeira pronuncia
da vogal A.
Segunda pronuncia
da vogal A.
Terceira pronuncia
da vogal A.
Quarta pronuncia
da vogal A.
Quinta pronuncia
da vogal A.
C. F.* Amplitude C. F. Amplitude C. F. Amplitude C. F. Amplitude C. F. Amplitude
0 2400 0 2400 0 2100 0 2100 0 2100
100 3000 100-120 8000 120 2000 120 3100 160 1100
200 2600 200-220 4500 230 1500 240 3000 225 900
300 500-1100 300-325 2500 340-350 1000 320 1000 330-350 100-300
390-420 500-1100 410-440 1000-5100 440-480 500-1500 435-470 500-1500 390-440 100-300
480-520 700-3000 500-550 500-3000 550-590 1000-3500 540-580 500-2600 550-600 200-500
580-620 500-2100 600-650 500-1000 670-700 500-1200 590-690 1000-4000 660-700 500-1010
680-720 200-600 710-760 200-800 780-820 500-1500 760-820 300-600 780-820 200-400
780-820 200-1000 810-870 500-2000 890-940 500-2000 880-920 500-1010 890-940 200-350
880-930 200-1000 920-980 200-1000 1000-1040 100-500 980-1050 500-1000 1000-1050 200-700
970-1020 100-550 1020-1060 100-400 1120-1150 50-250 1100-1150 200-500 1110-1170 200-400
2200-2350 50-150 1120-1200 100-300 1230-1285 30-100 1200-1270 200-500 1225-1300 50-200
* Componente de Frequencia
Tabela 2 – Relação de todas as componentes de freqüências e sua amplitude encontrada
em cada uma das amostras, da vogal A, coletas do sétimo voluntário.
Voluntário 7
Primeira pronuncia
da vogal I.
Segunda pronuncia
da vogal I.
Terceira pronuncia
da vogal I.
Quarta pronuncia
da vogal I.
Quibta pronuncia
da vogal I.
C. F.* Amplitude C. F. Amplitude C. F. Amplitude C. F. Amplitude C. F. Amplitude
0 2100 0 2100 0 2100 0 2100 0 2100
260-300 5000 260-280 4600 250-280 8000 230-260 5000 250-275 7500
410-430 100-300 390-420 200-400 350-410 500-1300 350-380 1000 380-420 1100
540-600 100-300 520-560 200-400 500-550 200-450 480-500 200-400 520-560 400-800
690-730 100-200 660-700 50-1500 630-680 100-250 600-630 100-200 645-685 200-400
830-880 100-150 780-840 50-150 750-800 100-350 720-760 50-100 780-830 200-400
980-1020 100-220 910-1000 50-180 880-940 100-200 830-880 50-80 900-950 200-410
1100-1200 50-150 1050-1130 50-150 1010-1060 100-420 950-1010 50-130 1030-1070 100-200
1250-1310 50-100 1180-1260 20-60 1150-1200 100-150 1030-1130 50-175 1180-1230 50-200
1380-1450 60-80 1310-1400 20-60 1280-1330 50-100 1200-1250 50-150 1300-1350 50-100
1530-1600 20-60 1450-1550 20-60 1400-1450 50-100 1300-1380 50-70 1400-1500 100-150
1680-1730 50-100 1590-1680 20-60 1530-1600 50-150 1420-1510 50-110 1540-1630 50-230
1800-1910 200 1710-1840 20-60 1650-1750 50-210 1550-1650 50-100 1650-1750 200
1920-2040 200-600 1850-2100 100-400 1800-1850 200-300 1680-1780 100-200 1800-1900 200-450
1930-2000 100-410 1790-1890 100-500 1950-2100 200-800
2020-2130 100-610 1900-2100 50-500
Tabela 3 – Relação de todas as componentes de freqüências e sua amplitude encontrada
em cada uma das amostras, da vogal I, coletas do sétimo voluntário.
30
Feito isto criou-se uma outra tabela que relaciona todas as componentes de
freqüência, presentes nas amostras da pronúncia da vogal A de cada um dos voluntários,
cujo objetivo é descartar as componentes não comuns a todos, ou quase todos, os
voluntários, permanecendo apenas as componentes característica da vogal A, isto porque,
como comentamos na descrição deste projeto, o sistema é independente do locutor. O
mesmo procedimento foi realizado para a vogal I. As tabelas obtidas são mostradas no
anexo 1.
De posse das componentes comuns na maioria das amostras da vogal A e das
componentes comuns na maioria das amostras da vogal I é preciso compará-las e eliminar
as componentes presentes nas duas tabelas, permanecendo apenas as componentes que
diferenciem um som do outro, obtendo assim as entradas do classificador. Esta tabela é
mostrada no anexo 2.
No final deste processo obtivemos 13 componentes exclusivas, presentes apenas, da
vogal A e 13 componentes exclusivas da vogal I, permitindo-nos definir a configuração da
rede neural utilizada no classificador.
Configuração da rede neural:
Através dos procedimentos, comentados anteriormente, para a escolha das raias que
caracterizam a pronuncia de cada vogal, pudemos obter o número de entrada do
classificador. O número de nodos da camada de entrada será 26.
O número de classes que os padrões de entrada poderão ser classificados, classe A e
classe I, nos permite definir o número de neurônios na camada de saída da rede neural.
Teremos então dois neurônios na camada de saída da rede. O classificador será treinado
para nos fornecer as seguintes saídas:
[1,-1] quando identificada a pronuncia da vogal A;
[-1,1] quando identificada a pronuncia da vogal I;
[1,1] quando nenhuma das duas vogais forem identificadas;
[-1,-1] quando nenhuma das duas vogais forem identificadas.
Para tanto utilizaremos como função de ativação a função sigmóide binária,
equacionada a seguir.
(x) = 1
1 + exp ( - x)
31
Já o número de neurônios na camada oculta depende do resultado do treinamento e
avaliação da rede. O processo para identificar este número consiste em:
1. Inserir um neurônio na camada oculta;
2. Treinar a rede;
3. Submeter à rede um conjunto de amostras e determinar a taxa de acerto da rede;
4. Aumentar o número de neurônios na camada oculta e voltar ao passo 2.
Este procedimento deverá se repetir até o número ideal de neurônios seja
encontrado, notar-se-á que ao aumentarmos a quantidade de neurônio o desempenho da
rede também será melhor, isto até um determinado valor, depois o desempenho começa a
cair.
Treinamento do Classificador:
O algoritmo de treinamento do classificador, bem como suas entradas e saídas, é
apresentado a seguir:
Algoritmo de treinamento da rede neural: Backpropagation [5]
O treinamento da rede usando o método Backpropagation consiste em três
estágios: Feedforward, Backpropagation e Atualização dos pesos, a seguir uma breve
descrição de cada um deles.
Feedforward
Os padrões de treinamento são propagados da entrada para a saída da rede neurônio
a neurônio. Cada unidade de entrada recebe um sinal do vetor de entrada e os propaga
através das conexões sinápticas e pesos para todos os neurônios ocultos, responsáveis pelo
processo computacional dos sinais, estes por sua vez transferem o sinal ás unidades de
saída, responsáveis pela resposta produzida pela rede.
32
Backpropagation
Retropropagação do erro, ou seja, propagar da saída para a entrada da rede, os
sinais de erro camada a camada. Em cada fase do treinamento a resposta produzida pela
rede é comparada com a resposta desejada para o padrão de entrada submetido à rede,
evidenciando o erro produzido pela rede. Uma correção Δ é retropropagada e aplicada nos
pesos antecedente.
Atualizar os pesos da rede.
Determinado o fator de correção é necessário ajustar simultaneamente todos os
pesos da rede.
Entradas:
Unidades de entrada e bias: { xi } , onde i=1 até n;
Neurônios e bias da camada oculta: { zj } , onde j=1 até l;
Neurônios de saída: { zk } , onde k=1 até m;
Pesos associados com as conexões entre a camada de entrada e a camada oculta: { vij } ,
onde 0 i n, 1 j l;
Pesos associados com as conexões entre a camada de oculta e a camada de saída: { wjk
} , onde 0 j l, 1 k m;
Número de padrões de entrada do treinamento: M, então (x1 p..... xn
p) T, onde 1 p
M;
Cada padrão de entrada da rede possui uma saída alvo correspondente t p , ou seja, para
cada (x1 p..... xn
p) T, onde 1 p M, existe um (t1 p ..... xm p ) T, onde 1 p M.
A Tolerância de erro da rede é dada por , e deve ser maior que 0.
A taxa de aprendizado é dada por .
O número de iterações máxima permitida é dada por N.
Saídas:
As saídas obtidas do treinamento serão os valores corrigidos dos pesos, tanto dos
pesos das conexões entre a camada de entrada e a camada oculta, como os pesos das
conexões entre a camada oculta e a camada de saída.
33
Passo 1:
Inicializar os pesos:
vi j = vi j(0) ; 0 i n, 1 j l
wjk = wi k(0) ; 0 j l, 1 k m
Inicializar a variável que representa o número da iteração corrente:
It = 0
Passo 2:
Para 1 p M faça passos 3 e 4 (feedforward) e passos 5-7(backpropagation do
erro).
Passo 3:
Para cada neurônio oculto Zj, 1 j l calcular o peso de entrada total vindo da
camada de entrada:
z(p)_inj = v0 j + i=1 n vi j xi (p) , 1 j l
Usar a função de ativação, (x), para adquirir os sinais de saída obtidos em cada
neurônio oculto:
zj(p) = (z(p)_inj), 1 j l
Passo 4:
Para cada unidade de saída Yk, 1 k m calcular o peso total de entrada da camada
oculta:
z(p)_ink = v0 k + j=1 l w j k zi (p) , 1 k m
Usar a função de ativação, (x), para obter os sinais de saída:
yk(p) = (y(p)_ink), 1 k m
Passo 5:
Calcular as condições de erro:
k(p) = ( tk (p) - yk
(p)) ’(y(p)_ink), 1 k m
Calcular as condições de correção de peso:
wj k = k (p)
zj, 1 j l, 1 k m
34
Calcular as condições de correção do bias:
wo k = k (p),1 k m
Passo 6:
Para cada unidade oculta somar seu delta de entrada da camada de saída:
(p)_inj = k=1 m wj k k (p) , 1 j l
Retropropague a condição de erro:
´ j (p) = (p) _inj ’(z_inj ), 1 j l
Obtenha a condição de correção dos pesos:
vj i = ´j (p)
xi , 1 i n , 1 j l
E a condição de correção do bias
vo j = ´j (p)
, 1 j l
Passo 7:
Atualizar os pesos da rede:
vi j ← vi j + vj i , 0 i n , 1 j l
wi k ← wi k + wj k , 0 j l , 1 k m
Passo 8:
Incremente o número de iterações:
it ← it + 1
e = p=1 M k=1
m (tk (p) - yk
(p))2
Se o número de iterações for menor ou igual ao número de iteração máxima
permitida, it N, e se o erro for maior que a tolerância, e > , execute novamente o passo
2, caso contrário, se it N e e > , retorne vij, wj k, it e termine o treinamento, senão se it
N retorne a seguinte mensagem: “Não Converge .”, e encerra o treinamento.
35
Algoritmo de operação do classificador:
A utilização do classificador será realizada seguindo os passos descritos a seguir:
1. Submeter as entradas no classificador.
2. Verificar a saída da rede:
se vetor de saída igual a [1, 0] setar todos os bits pa porta paralela em 1,
se vetor de saída igual a [0, 1] setar todos os bits pa porta paralela em 0,
caso contrário emitir a mesagem: ‘Padrão não reconhecido’.
36
3.4. INTERFACE DE POTÊNCIA
A interface de potência foi projetada para a acionar uma lâmpada de 110V, sob as
condições de utilização do sistema como um todo.
Devido à baixa tensão, 5v, na porta paralela é necessário que um transistor como
chave atue sobre um relé, pois esta tensão não é suficiente para acionamento da lâmpada.
O esquemático do circuito é apresentado a seguir.
Rede
5V
DS1LAMP
1 2
K1
RELAY SPDT
35
412
P1
Porta Paralela
13251224112310229218207196185174163152141
RESISTOR
RESISTOR
DIODE
Q2
2N 22223
21
Rc
Rb
D
Figura 13 – Esquemático do circuito para acionamento da lâmpada.
Neste circuito, em série com o resistor Rc, cujo valor é de 15, está a bobina do relé.
Esta bobina, normalmente, apresenta uma resistência DC da ordem de algumas dezenas de
. Por ser tão baixa o resistor Rc tem a função de limitar a corrente no relé, para não lesá-
lo. O diodo em paralelo com a bobina evita que o transistor não se danifique devido à
corrente reversa gerada por ele no chaveamento do relé.
3.4.1. Parâmetros e Cálculos do circuito:
Relé :
RR: 80
IR: 50mA
37
Transistor NPN 2N2222:
VBE Sat: 0,7v
VCE Sat: 0,7v
Sat: 10
IC max: 500mA
V CE max: 100v
Cálculo de Rc:
Valor adotado: 15
Potência de Rc:
Cálculo de Rb:
A saída de nível alto do sistema é de 5v, então:
Valor adotado: 820
Potência de Rc:
3.4.2. Funcionamento da interface de Potência:
Quando a porta paralela é ativada o transistor é acionado conduzindo corrente entre o
coletor e o emissor, este por sua vez criar um campo eletromagnético na bobina
transmutando a posição de contato do relé fechando o circuito da lâmpada.
Rc = VCC – Rr * Ir - V CE Sat = 5 – 80 * 50 * 10-3 – 0,3 = 14
Ir 50 * 10-3
PRc = Rc * I 2C Sat = 15 – (50 * 10-3 ) 2
= 37,5mW (1/8 W)
Ib Sat = Ib Sat = 50 * 10-3 = 5mA
10
Rb = Ve - V Be Sat = 5 – 0,7 = 860
Ib Sat 5 * 10-3
PRb = Rb * I 2
b Sat = 820 – (5 * 10-3 ) 2 = 20,5mW (1/8 W)
38
4. RESULTADOS
Nas etapas de implementação e testes, do sistema de Controle On-Off de Dispositivos
Eletroeletrônicos através do Reconhecimento de Voz, nos deparamos com algumas
dificuldades que ocasionaram mudanças no planejamento de execução do projeto. Estas
dificuldades e os resultados da implementação são descritos a seguir.
Os módulos de aquisição, processamento e classificador de sinal, foram inicialmente
implementados utilizando a linguangem C com compilador da Borland – Builder 5, porém
alguns pontos ocasionaram a mudança da linguagem de implementação destes módulos,
para o GUI (Graphics User Interface) do MATLAB, são eles:
Alto consumo e invasão da área de memória,
Precisão dos cálculos não permitiram o desempenho almejado e
Problemas na execução mediante qualquer alteração de layoutdo software.
Por não termos licença do Matlab para utilização de funções de acesso a dispositivos
de hardware, o software de acionamento da porta paralela permaneceu implementado na
linguagem C, em Builder 5 e a interação com entre o programa de captura, processamento
e classificação do sinal com o programa de acionamento da porta paralela é realizada com
a utilização de um arquivo .txt, SaidaClas.txt, que é atualizado pelo primeiro programa e
lido pelo segundo em tempo real, sem problemas de concorrência. As figuras 13 e 14
mostram a tela dos softwares desenvolvidos.
Figura 13 – Programa desenvolvido em C para acionamento da interface de potência.
39
Figura 14 – Programa desenvolvido em Matlab para aquisição, processamento e
classificação do sinal de voz.
Foram realizados vários treinamentos, a fim de identificarmos o número de unidades,
ou neurônios, pertencente à camada oculta do classificador, com as amostras das vogais A
e I, amostras estas coletadas na fase de especificação, utilizadas para identificar o número
de entradas do classificador. O desempenho do classificador é mostrado na tabela 7, vale
ressaltar que utilizamos número máximo de épocas igual a 10000000.
40
Desempenho Rede
Acertos (%) Numero de Épocas Nº Neurônios A I
1 92,1500 100,0000 19
1 100,0000 100,0000 22
1 100,0000 94,1100 49
5 96,0784 98,0392 20
5 96,0780 90,1900 22
5 98,0392 100,0000 31
5 96,0784 94,1176 33
5 96,0784 94,1176 33
5 88,2353 94,1176 35
7 100,0000 96,0784 20
10 94,1176 94,1176 22
10 96,0784 98,0392 49
10 100,0000 96,0784 53
10 86,2745 88,2353 101
20 98,0392 94,1176 35
30 92,1569 86,2745 22
50 92,1569 94,1176 38
60 94,1176 96,0784 27
Tabela 4 – Desempenho obtido do treinamento do Classificador com amostras das vogais
A e I
Porem, ao realizarmos testes em real time com o classificador treinado, percebeu-se
que todos os sons eram classificados como pertencentes às classes A ou I, até mesmo som
ambiente, (“silêncio”), então vimos à necessidade de utilizarmos no treinamento amostras
destes sons .
Foram coletadas 12 amostras de som ambiente com 5 segundos de duração cada,
destas amostras foram gerados 51 padrões, que juntamente com as amostras de A e I,
treinaram novamente, com os mesmos parâmetros, o classificador. Os resultados foram:
1 neurônio na camada oculta: Treinamento cancelado próximo de 500 mil
épocas realizadas em aproximadamente 10 horas. Desempenho de
classificação não obtido;
60 neurônios na camada oculta: Treinamento abortado após a primeira
época por falta de memória. Desempenho de classificação não obtido;
30 neurônios na camada oculta: Aproximadamente 80 épocas em alguns
minutos, com um desempenho médio de 85% de acerto dos padrões das
amostras de teste.
41
Ao testarmos módulo de interface com o hardware, a interface de potência, notamos
que a tensão de saída nos pinos de dado da porta paralela, próximo de 3V, não era o
suficiente para acionar o transistor, então foi incluído um componente discreto TTL, o
7404, que identifica este sinal de 3V. Com isto o programa implementado na linguagem C
que enviava 255 para a porta paralela, quando o classificador identifica a vogal A, passou a
enviar 0 e 255 quando o I é reconhecido. A figura 15 mostra a implementação da interface
de potência, ou seja, placa de acionamento do dispositivo eletroeletrônico.
Figura 15 – Implementação da Interface de Potência.
42
5. CONCLUSÃO
O desenvolvimento deste projeto evidenciou e nos aproximou ainda mais de
realizarmos o tão sonhado desejo de “dar ordens” a qualquer equipamento eletroeletrônico
que encontramos comumente na nossa própria casa, escola ou trabalho. É claro que possui
limitações, ou restrições, mas que ao longo do tempo poderão ser tratadas.
O sistema em tempo real possui um desempenho de aproximadamente 70% de acerto
na classificação do sinal. Porém ao capturar pronúncias de sinais de voz semelhantes às
pronúncias das vogais analisadas, estes sinais são classificados e tratados como se fossem
as próprias vogais A ou I, isto porque as harmônicas que compõem os sinais estudados são
também harmônicas presentes em vários outros sons. Uma solução para melhorar o
desempenho do classificador seria aumentar o número de componentes de freqüência
participantes no processo de classificação, o que implicaria no aumento no número de
entradas do classificador.
Para que este sistema se torne mais userfrendly incentiva-se a implementação do
programa de aquisição, processamento e classificação do sinal, na linguangem C, ou
qualquer outra linguagem que seja viável tecnicamente. O principal motivo pelo qual
tornou-se inviável o desenvolvimento integral do programa em C, foi o tempo hábil para a
solução dos problemas gerados na implementação.
O mais interessante e motivador deste sistema é a gama de aplicações e de
incrementos que este projeto poderá passar com implementações futuras, como:
Desenvolver um sistema embarcado, acionar mais de um dispositivo simultaneamente, ou
criar mais classes de padrão para acionamento de diversos dispositivos separadamente, ou
ainda acionar um dispositivo através da voz à distância.
41
6. REFERÊNCIAS BIBLIOGRÁFICAS
[1] Friedman, M., Kandel, A., Introduction to Pattern Recognition:
statistical, structural, neural and fuzzy logic approaches. 2nd edition.
Singapore: World Scientific, 1999.
[2] Haykin, S.. Redes Neurais Princípios e Prática. 2º edição Porto Alegre:
Bookman, 2001.
[3] Haykin, S., Van Veenm, B. Sinais e Sistemas. Porto Alegre: Bookman,
2001.
[4] Ridge, Peter M. et al. Sound Blaster O Livro Oficial. São Paulo: Makron
Books, 1994.
[5] Fausett, Laurene, Fundamentals of Neural. Florida Institute of
Tecnology: Prentince Hall, 1994.
[6] www.msdn.microsoft.com