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