Arquitetura Específica de Pré-processamento com Extração de

Transcrição

Arquitetura Específica de Pré-processamento com Extração de
Arquitetura Específica de Pré-processamento com Extração de
Parâmetros Mel-cepstrais para um Sistema de Reconhecimento
Automático de Voz
José Gómez-Cipriano, Roger Pizzato Nunes, Sergio Bampi, Dante Barone
Instituto de Informática – Universidade Federal do Rio Grande do Sul
Av. Bento Gonçalves, 9500 – Bairro Agronomia
Campus do Vale – Bloco IV
Caixa Postal 15064 - Porto Alegre – Brazil
Fone: 55-51-3167036
Fax: 55-51-3191576
E-mail: [email protected]
Resumo
Certas aplicações, tais como a verificação de locutor, o reconhecimento de diálogo ou a transcrição de voz para
texto podem exigir processamento em tempo real e uma boa precisão. Outras aplicações tais como brinquedos,
veículos móveis ou máquinas portáveis ainda podem agregar o requisito de portabilidade, e de baixo consumo,
além de um sistema fisicamente compacto. Tais requisitos podem exigem uma solução em hardware para o
problema de reconhecimento automático de voz.
O presente trabalho propõe uma arquitetura utilizando hardware baseado em FPGAs, otimizando os algoritmos
de pré-processamento e extração de parâmetros para o reconhecimento automático de voz.
Abstract
Some applications of speech recognition, like speaker verification, dialog recognition or the speech to text
transcription could require real time processing and a good precision. Other applications such as toys,
automotive vehicles or portable machines still could aggregate the portability and low-power requirements, in
addition to physical compactness. These requirements could require a hardware solution for the speech
recognition problem.
The current work propose an architecture using hardware based in FPGAs, optimizing the pre-processing and
parameter extraction for speech recognition.
1 Introdução
A maioria dos sistemas de reconhecimento automático de voz (RAV) existentes
atualmente consiste em um software projetado para ser utilizado em computadores pessoais.
O programa agregado opera continuamente dentro de um sistema operacional (windows,
OS/2, etc.) e requer que o computador esteja equipado com uma placa de som compatível. A
principal desvantagem de tais sistemas é a necessidade da presença de um computador
pessoal. Muitos dos sistemas existentes são bastante sofisticados, no entanto, não é
economicamente viável utilizar um sistema completamente computadorizado para controlar,
por exemplo, uma máquina de lavar ou um aparelho de TV. Por outro lado, em vista de que os
programas de RAV requerem tempo de processamento de CPU do computador, a operação e o
funcionamento do computador fica geralmente afetada quando se habilita o RAV para
executar certas tarefas a partir do computador.
1
Um sistema de RAV implementado com circuitos integrados de aplicação específica pode
executar operações muito mais rapidamente do que se fosse implementado com processadores
de propósito geral, quando a parte operativa é especificada segundo os algoritmos de RAV
[BRO 84] [LAP 97] [MAD 95]. A descrição numa linguagem de descrição de hardware, abre
a possibilidade de sintetizar tais descrições em diversas plataformas, gerando circuitos
integrados específicos. Um circuito assim pode ser utilizado na experimentação com diversos
aspectos da tecnologia de RAV. A implementação de um sistema de RAV em hardware reduz o
espaço físico ocupado pelo sistema de RAV em software.
O trabalho desenvolvido visa obter um sistema portátil, de baixo peso e consumo, para o
pré-processamento e a extração de parâmetros da voz humana, aplicado ao RAV.
2 Sistema de Pré-processamento e Extração de Parâmetros
Este sistema é o encarregado de processar a voz de entrada, fazer a pré-ênfase, separação
em quadros, janelamento e extração dos parâmetros do sinal digital de voz. A entrada deste
sub-sistema são os valores do sinal de voz que foram passados por um filtro anti-aliasing e
discretizados através dum conversor A/D externos ao sistema. O sinal de voz foi gravado
anteriormente no formato RAW, 16 bits, a uma taxa de amostragem de 11025kHz. A saída
deste sub-sistema são os parâmetros extraídos.
N
S(n)
Pré-ênfase
~
S(n)
M
Separação
Janelamento
em quadros
Extração de
parâmetros
mel-cepstrais
Cm(t)
FIGURA 1: Sistema de pré-processamento e extração de parâmetros.
Estudos comparativos mostram que, na maioria dos modos de operação dos sistemas de
RAV, os parâmetros que produzem a melhor taxa de reconhecimento são os parâmetros melcepstrais ou a derivada destes [DAV 80] [VER 99]. Isto é observado quando se trabalha quer
em modo dependente, quer em modo independente do locutor, ou com palavras isoladas ou
com linguagem contínua, para reconhecer/verificar locutor ou para reconhecer comandos.
Portanto, o sistema de pré-processamento proposto está baseado em parâmetros mel-cepstrais.
A figura 1 mostra o sub-sistema de pré-processamento proposto. Este sub-sistema possui
um bloco funcional que realiza a pré-ênfase, o segundo bloco funcional realiza a divisão em
quadros, o terceiro bloco funcional faz o janelamento e o último realiza a extração dos
parâmetros mel-cepstrais. Na continuação descreveremos cada uma das partes do sistema.
3 Função de Pré-ênfase
O sinal de voz digitalizado S(n) é filtrado utilizando-se um filtro de pré-ênfase com
-1.
função de transferência: Hpre(z)=1-apre.z . Este filtro é utilizado para equalizar o espectro do
sinal de voz e melhorar o desempenho da análise espectral que constitui a etapa posterior
[GOM 99a]. A saída do filtro de pré-ênfase está relacionada com a entrada, S(n), através da
seguinte equação diferença:
2
~
S (n ) = S ( n) − apre.S ( n − 1)
(1.1)
Um intervalo típico de valores para o coeficiente de pré-ênfase, apre, é: 0,8 ≤ apre ≤ 1.
Ao implementar o filtro de pré-ênfase no sinal, são propostas algumas modificações à
definição fornecida pela equação 1.1, para facilitar a implementação em ponto-fixo. O
coeficiente de pré-ênfase, apre, é aproximado pelo valor de 15/16 em função da simplificação
que significa realizar uma divisão por um número do tipo 2n, sendo n inteiro. A saída será
então:
15
S( n − 1 )
~
S ( n ) = S( n ) −
.S ( n − 1 ) = S( n ) − S ( n − 1 ) +
16
16
(1.2)
A figura 2 mostra a arquitetura proposta para a parte operativa do filtro de pré-ênfase. Tal
arquitetura consiste de um circuito de divisão, um somador/subtrator, um acumulador, três
multiplexadores e dois registradores de deslocamento.
FIGURA 2: Parte operativa da função de pré-ênfase.
3.1 Divisão
A divisão por 16 é obtida fazendo um deslocamento de quatro bits para a direita,
introduzindo quatro zeros nos bits mais significativos, à esquerda (ver fig. 3). Tal solução
simples permite realizar a divisão em um único pulso de relógio.
FIGURA 3: Deslocamento à direita para realizar a divisão por 16.
3.2 Somador/Subtrator
3
Utiliza-se um único somador/subtrator de 16 bits para as operações do filtro de préênfase, em conjunto com 2 multiplexadores mux1 e mux2. Num primeiro instante é
selecionada a operação de subtração entre S(n) e S(n-1). Estes dados aparecem na entrada do
somador/subtrator depois de ter sido selecionados pelos multiplexadores mux1 e mux2. No
passo seguinte, realiza-se a soma do valor no acumulador e do resultado de S(n-1)/16, que são
colocados na entrada do somador/subtrator, pelos multiplexadores mux1 e mux2.
FIGURA 4: Controle da função de pré-ênfase.
FIGURA 5: Simulação da pré-ênfase.
A figura 4 mostra o fluxograma do controle da função de pré-ênfase. Na etapa de
inicialização, a primeira amostra do sinal de voz digitalizado S(1) é carregada no registrador
Sn e o registrador Sn1 é inicializado com o valor 0. Na etapa seguinte, os multiplexadores
selecionam a saída do registrador Sn e a saída do registrador Sn1, para realizar a subtração e
carregá-la no acumulador. A divisão por 16 é realizada em paralelo com a subtração. Na etapa
seguinte, é feito um deslocamento entre os conteúdos dos registradores Sn e Sn1 e é lido um
4
novo valor de S(n) o qual é armazenado em Sn. Esta leitura de um novo dado de voz é
acompanhada pela soma do valor no acumulador com o valor do circuito de divisão. Este
resultado é armazenado no acumulador sendo enviado um sinal de dado válido (Sinal_accept)
à saída, que indica o valor no acumulador como sendo o resultado final S~( n ) . Este
procedimento é repetido até o total das amostras de voz ser processado.
A figura 5 mostra a simulação da função de pré-ênfase. A entrada da função de préênfase é o sinal Sinal_Entrada e a saída é o sinal Saída do acumulador Acc.
4 Função de Separação em Quadros
FIGURA 6 : Superposição entre quadros.
Após a pré-ênfase, o sinal deve ser separado em quadros. Cada quadro é gerado a partir
de 333 amostras. Devido ao tamanho do quadro e à existência de superposição entre quadros,
cada amostra corresponde ao primeiro terço do atual quadro de análise, ou ao segundo terço
do quadro anterior ou ao terço final do penúltimo quadro. Depois de cada 111 amostras,
quando um dos três quadros é completado, a relação entre os quadros de análise é mudada
ciclicamente. A figura 6 mostra a superposição existente entre os quadros gerados a partir do
sinal de voz.
Foi desenvolvido um algoritmo para a separação em quadros que permita a sua
implementação otimizada em hardware. Cada quadro separado deve ser multiplicado pelos
valores correspondentes da janela de Hamming, processo conhecido como janelamento.
Porém, dentro do algoritmo que será descrito na continuação, o janelamento é realizado
enquanto a separação em quadros está sendo realizada.
Para formar os quadros, as amostras depois da pré-ênfase são primeiro segmentadas em
blocos Bi, i=1...T, onde T indica o número de blocos que podem ser formados a partir do sinal
de voz. A figura 6 mostra a segmentação do sinal de voz em blocos. Cada bloco Bi tem 111
amostras, não existindo superposição entre os blocos. Um quadro é composto por 3 blocos
sucessivos. Cada quadro é multiplicado pelos valores correspondentes da janela de Hamming,
w(n), n=0...332. São utilizadas 3 memórias RAM externas Mi, i=0...2, para que cada uma
delas armazene temporariamente 111 amostras. Outro grupo de 3 memórias RAM Ri, i=0...2, é
utilizado para armazenar o conteúdo do quadro final multiplicado pela janela de Hamming.
5
FIGURA 7: Separação de quadros utilizando blocos do sinal de voz.
A figura 7 descreve como é feita a separação em quadros. Cada novo bloco de 111
amostras do sinal de voz começa a ser armazenado na Mi na qual estão armazenadas as
amostras do antepenúltimo bloco. Em cada período de tempo serão armazenadas apenas 37
amostras do novo bloco, que constituem uma terceira parte das 111 amostras do bloco.
Paralelamente, é lido o conteúdo armazenado na memória na qual estão armazenadas as
amostras do bloco anterior. No seguinte instante de tempo, é armazenado o segundo terço do
novo bloco (37 amostras) e também é lido o conteúdo da memória que armazena o penúltimo
bloco. No próximo instante de tempo, são armazenadas as últimas 37 amostras do novo bloco
e também é lido o conteúdo da memória que armazena o bloco anterior.
A figura 8 mostra o diagrama de fluxo do algoritmo proposto para a separação em
quadros. Inicialmente o primeiro bloco B0 de 111 amostras é multiplicado pelos primeiros 111
valores da janela de Hamming e o resultado é armazenado, ocupando a primeira memória
externa R0, com o objetivo de utilizar este resultado na extração de parâmetros. O mesmo
procedimento é seguido pelo segundo e terceiro blocos B1 e B2. Além disso, as amostras do
segundo e o terceiro bloco são armazenadas em duas memórias externas temporárias M1 e M2
e os resultados de multiplicar as amostras dos blocos pelos 222 valores restantes da janela de
Hamming são armazenados nas memórias R1 e R2. Os valores armazenados em R0, R1 e R2
contêm o resultado do primeiro quadro do sinal de voz, multiplicado pela janela de Hamming.
A partir do terceiro bloco, B(3), cada bloco é processado em 3 etapas. Desta maneira o
bloco B(3) é processado em três etapas, sendo que, inicialmente o primeiro terço deste bloco,
formado por 37 amostras, é armazenado no primeiro terço da memória M(0). Na etapa
seguinte, é lida a memória M(1), que contêm os valores do bloco B(1), sendo multiplicada
pela janela de Hamming e o resultado é armazenado na memória R(0). Além disso, o segundo
terço de 37 amostras do bloco B(3) é armazenado ocupando o segundo terço da memória
M(0). Na etapa seguinte, é lida a memória M(2), que contêm os valores do bloco B(2), sendo
multiplicada pela janela de Hamming e o resultado é armazenado na memória R(1). Nesta
6
mesma etapa, o último terço de 37 amostras do bloco B(3) é armazenada ocupando o último
terço da memória M(0). Na próxima etapa, é lida a memória M(0) que agora contêm os
valores do bloco B(3), sendo multiplicada pela janela de Hamming e o resultado é
armazenado na memória R(2). Os valores armazenados em R(0), R(1) e R(2) contêm o
resultado do segundo quadro do sinal de voz, multiplicado pela janela de Hamming. Além
disso, nesta etapa, o primeiro terço de 37 amostras do bloco B(4) é armazenado no primeiro
terço da memória M(1). O processo é repetido com os blocos seguintes e as memórias M(0),
M(1) e M(2) são preenchidas da maneira indicada na figura 7.
FIGURA 8: Separação em quadros do sinal de voz.
5 Função de Janelamento
Para minimizar as descontinuidades no início e no final de cada quadro, aplica-se uma
janela de Hamming em cada quadro. A janela de Hamming, tem equação
 2π ⋅ n 
, onde Ns é o número de amostras de cada janela e n é a
w( n ) = 0 ,54 − 0 ,46 ⋅ cos 
 ,0 ≤ n ≤ Ns − 1
 Ns − 1 
amostra que está sendo avaliada.
7
O tamanho de cada janela utilizada foi de 333 amostras, aproximadamente 45ms do sinal.
O deslocamento da janela é de 111 amostras. O tamanho de 333 amostras foi escolhido para
facilitar a implementação em ponto fixo da janela de Hamming.
FIGURA 9: Comparação entre a janela de Hamming esperada e a janela de Hamming teórica.
A implementação da janela de Hamming faz uso de una memória com os valores da
janela w(n) para os primeiros 84 valores (n=0...83), ou melhor dito o primeiro quadrante da
função coseno. Os valores da janela para os restantes pontos (n= 84...332) são calculados
utilizando os valores obtidos para o primeiro quadrante e a propriedade de periodicidade da
função coseno. A figura 9 mostra uma comparação entre a janela de Hamming teórica e a
janela de Hamming esperada. A figura 10 mostra a simulação da janela de Hamming.
FIGURA 10: Simulação da janela de Hamming.
5.1 Gerador de Endereços
8
O registrador de endereçamento da memória é implementado com um contador binário de
módulo 84, que opera nos modos crescente/decrescente. O controle da leitura da memória é
mostrado na figura 11.
FIGURA 11: Controle do cálculo da janela de Hamming.
Depois da aplicação da janela de Hamming, é realizado o cálculo dos parâmetros melcepstrais de cada quadro. A figura 12 mostra a maneira de obter os parâmetros mel-cepstrais.
Inicialmente é calculado o espectro de energia da saída de cada janela de Hamming. depois
disso é calculada a energia em cada canal de um conjunto de filtros triangulares. Finalmente,
do logaritmo da energia calcula-se a transformada coseno que fornecerá os parâmetros melcepstrais. Esta etapa ainda está em fase de implementação.
Cm(t)
|FFT|2
Logaritmo
DCT
Filtros Triangulares
FIGURA 12: Extração dos parâmetros cepstrais.
6 Conclusão
As características de velocidade de um circuito dedicado, o espaço físico ocupado, a
flexibilidade da descrição em VHDL e o potencial dos sistemas em FPGA tornam esta
9
proposta útil para o desenvolvimento de novas aplicações. O sistema proposto será utilizado
em problemas que exigem um pequeno vocabulário e número de locutores limitado.
As funções aqui apresentadas foram implementadas e testadas utilizando a ferramenta
Maxplus II, com o objetivo de utilizá-las com FPGAs. Foram realizadas diversas otimizações
visando seu menor consumo de tempo e de recursos de memória.
O objetivo final é utilizar o sistema apresentado dentro de um sistema de reconhecimento
automático de voz baseado em modelos ocultos de Markov (HMMs) [HUA 90], cuja
implementação realizada em FPGAs é descrita em [GOM 99b]. O teste será feito com um
vocabulário formado por palavras isoladas para o controle industrial.
7 Bibliografia
[BRO 84] BROWN, M. K. et. al. The DTWP: An LPC-Based Dynamic Time-Warping
Processor for Isolated Word Recognition. AT&T Bell Laboratories Technical
Journal, USA, v.63 n.3, p.441-457, March 1984.
[DAV 80] DAVIS, S. B.; MERMELSTEIN, P. Comparison of Parametric Representations for
Monosyllabic Word Recognition in Continuously Spoken Sentences. IEEE
Transactions on Acoustics, Speech, and Signal Processing, New York, v.28, n.4,
p. 357-366, Aug. 1980.
[GOM 99a] GÓMEZ-CIPRIANO, J. .; BARONE, D. Introdução ao Reconhecimento de Voz.
In: ESCOLA REGIONAL DE INFORMÁTICA, Salvador, Bahia, Cursos...
Salvador, novembro, 1999.
[GOM 99b] GÓMEZ CIPRIANO, J. L. et. al. Design of a Reconfigurable State Decoding
System for Hidden Markov Models. In: INTERNATIONAL CONFERENCE ON
ELECTRICAL AND ELECTRONICS ENGINEERING-ELECO´99, 1999, BursaTurquia, Proceedings... Bursa, dezembro, 1999.
[HUA 90] HUANG, X. D.; ARIKI, Y.; JACK, M. A. Hidden Markov Models for Speech
Recognition. Edinburgh: Edinburgh University Press, 1990. 276p.
[LAP 97] LAPSLEY, P. et. al. DSP Processor Fundamentals: architectures and features.
New Jersey: IEEE Press, 1997. 210p.
[MAD 95] MADISETTI, V. K. VLSI Digital Signal Processors: An Introduction to Rapid
Prototyping and Design Synthesis, New York, 1995.
[VER 99] VERGIN, R.; O'SHAUGHNESSY, D. Generalized Mel Frequency Cepstral
Coefficients for Large-Vocabulary Speaker-Independent Continuous-Speech
Recognition. IEEE Transactions on Speech, and Audio Processing, v.7, n.5, p.
525-532, Sept. 1999.
10

Documentos relacionados