• Nenhum resultado encontrado

Gerador da Janela Seno

No documento 2010.2Relatorio TCC Versao DEFESA V1 (páginas 55-67)

3 METODOLOGIA DE DESENVOLVIMENTO DO PROJETO

4.2 Implementação do Módulo RTL Windowing Block/Switching

4.2.2 Gerador da Janela Seno

O sub-módulo Gerador da Janela Seno é dividido em 3 partes: FSM, Interpolação e

Auxiliar. Tal módulo é responsável por gerar 256/2048 amostras, correspondentes à janela

seno. Para gerar os 256 coeficientes de uma janela seno a ser aplicada sobre uma janela de amostras curta, é necessário ter 35 coeficientes pré-armazenados, pois a obtenção da janela de 256 coeficientes será realizada a partir da interpolação linear entre os coeficientes armazenados.

Para gerar os 2048 coeficientes da janela seno a ser aplicada sobre uma janela de amostras longa, é necessário ter 90 coeficientes pré-armazenados, pois a obtenção da janela de 2048 coeficientes será realizada a partir da interpolação linear entre os coeficientes armazenados.

4.2.2.1 Bloco FSM

O bloco FSM é uma máquina de estados responsável por coordenar todos os processos internos ao sub-módulo Gerador da Janela Seno. Quando é solicitada a geração de uma janela Seno, os seguintes parâmetros são necessários:

 O tamanho da janela, que pode ser 256 ou 2048;

 A parte da janela a ser gerada, que pode ser de 1 à 128 ou 129 à 256 (para o caso do tamanho da janela ser de 256), bem como de 1 à 1024 ou 1025 à 2048 (para o caso do tamanho da janela ser de 2048);

 O sinal que indica quando o processo de geração da janela seno deve ser iniciado; e

 Um sinal indicando que deve ser gerado um novo coeficiente.

O bloco FSM ainda tem a função de informar ao controlador principal quando um coeficiente da janela está pronto, bem como informar quando todas as amostras foram geradas.

Por questão de organização, a máquina de estados do bloco FSM será apresentada na Figura 21 na forma de um fluxograma, indicando os passos para a geração da janela seno. No fluxograma pode-se perceber que existem 4 possibilidades para geração de coeficientes. As possibilidades de geração dependem do sinal chamado de janela_256_2048, que define se o tamanho da janela seno gerada é 256 ou 2048 e depende do sinal chamado de borda.

Para o processamento do sinal borda existem 2 situações. A primeira situação refere- se à geração de 256 coeficientes, enquanto que a segunda situação refere-se à geração de 2048 coeficientes.

Na primeira situação, caso o sinal borda esteja no nível lógico 0, serão gerados os primeiros 128 coeficientes, mas caso o sinal borda esteja no nível lógico 1, serão gerados os 128 coeficientes que correspondem à segunda metade da janela seno, ou seja, a partir do coeficiente 129 até o coeficiente 256.

Na segunda situação, caso o sinal borda esteja no nível lógico igual à 0 serão gerados os primeiros 1024 coeficientes, mas caso o sinal borda esteja no nível lógico 1, serão gerados os 1024 coeficientes que correspondem à segunda metade da janela seno, ou seja, a partir do coeficiente 1025 até o coeficiente 2048.

No fluxograma da Figura 21, é possível perceber também que toda vez que uma amostra é gerada, um sinal coeficiente_pronto é ativado para o nível lógico 1.

4.2.2.2 Bloco Interpolação

O bloco Interpolação é constituído de uma máquina de estados que representa a interpolação linear. Nesta máquina de estados acontecem os cálculos referentes a interpolação linear dentre os coeficientes pré-armazenados. Para que a interpolação seja realizada alguns parâmetros são necessários:

 Um sinal indicando que se deu início à interpolação;

 Um sinal indicando que pode ser gerado um novo coeficiente;

O resultado do cálculo da interpolação advindo da Unidade Aritmética de

Ponto Flutuante;

 Qual parte da janela deve ser gerada, que pode ser de 1 à 128 ou 129 à 256 (para o caso do tamanho da janela ser de 256), bem como de 1 à 1024 ou 1025 à 2048 (para o caso do tamanho da janela ser de 2048); e

O bloco Interpolação tem comunicação direta com a Unidade Aritmética de Ponto

Flutuante, pois para a realização dos cálculos de interpolação, os dados necessários para

interpolação e um sinal indicando que deve ser realizada a soma/subtração são enviados para a unidade de ponto flutuante.

Na Figura 22 é apresentado um fluxograma que representa a máquina de estados do bloco Interpolação. Para compreender melhor o fluxograma algumas variáveis devem ser explicadas.

A variável P corresponde ao índice do coeficiente que está sendo gerado. A depender dos sinais borda e janela_256_2048, a variável P pode iniciar do:

 Índice 2 e variar até 128;  Índice 130 e variar até 256;  Índice 2 e variar até 1024; ou  Índice 1026 e variar até 2048.

A variável g é necessária para indicar o número de repetições que o cálculo de interpolação deve ser realizado com um determinado coeficiente pré-armazenado. A depender do sinal janela_256_2048, o número de repetições pode ser 8 para uma janela de 256 coeficientes ou 32 repetições para uma janela de 2048 coeficientes.

A variável y é necessária para indicar quando um coeficiente pré-armazenado (que está sendo utilizado para os cálculos de interpolação) deve ser substituído por um novo coeficiente pré-armazenado.

A variável k corresponde ao índice do coeficiente pré-armazenado que está sendo utilizado. A depender dos sinais borda e janela_256_2048 a variável k pode iniciar do:

 Índice 1 e variar até 32  Índice 1 e variar até 64

4.2.2.3 Bloco Auxiliar

O bloco Auxiliar é uma máquina de estados criada para solucionar problemas referentes à geração dos coeficientes da janela seno. Um problema acontece porque alguns coeficientes são gerados e seus valores têm um erro de mais de 1% quando comparados com os valores originais dos coeficientes das janelas. Outro problema acontece devido a não possibilidade de representar um número muito pequeno com 16 bits, este problema foi explicado no tópico 4.1.2.

Para que a máquina de estados do bloco Auxiliar realize suas tarefas alguns parâmetros são necessários:

Um sinal que ativa a máquina de estados do bloco Auxiliar;

O resultado da interpolação, calculado na Unidade Aritmética de Ponto

Flutuante; e

O índice do coeficiente que está sendo gerado, indicado pela variável P.

O bloco Auxiliar está ligado diretamente com a Unidade de Armazenamento, que conterá todos os coeficientes da janela seno gerados.

O funcionamento do bloco Auxiliar é apresentado através do fluxograma presente na Figura 23. Em resumo, a máquina de estados é constituída de condições que determinam quais dados devem ser colocados no barramento de saída do bloco Auxiliar.

Figura 23: Máquina de estados do bloco Auxiliar (Próprio autor)

4.2.3 Unidade Aritmética de Ponto Flutuante

A Unidade Aritmética de Ponto Flutuante é um sub-módulo do Windowing/Block

Switching, sendo divida em duas partes: Somador/Subtrator e Multiplicador. O

Somador/Subtrator é utilizado em duas etapas durante a realização das tarefas do módulo

Windowing/Block Switching. A primeira etapa está diretamente ligada ao bloco

Interpolação do sub-módulo Gerador da Janela Seno, durante a geração dos coeficientes da

janela seno são realizados os cálculos de interpolação que incluem soma/subtração de 2 números reais representados em ponto flutuante de 16 bits. A segunda etapa refere-se à multiplicação dos coeficientes gerados a partir da IMDCT, pelos coeficientes da janela seno gerados. Ainda na segunda etapa, após a multiplicação, ocorre o processo de sobreposição (Overlapping), que necessita da soma dos resultados gerados a partir da multiplicação.

4.2.3.1 Conversor de Números Reais para Ponto Flutuante 16 bits

Sabe-se que as amostras do sinal de áudio são originalmente representadas por números reais. Mas, tais amostras devem ser representadas no computador para serem efetuados os devidos processamentos no decodificador de áudio. Portanto, como foi explicado no tópico 2.5 foi possível especificar de forma geral um algoritmo para a conversão de um número real para binário, representado com 16 bits como apresentado na Figura 24. Esta conversão é necessária para a realização dos cálculos com os coeficientes na Unidade

Aritmética de Ponto Flutuante.

Figura 24: Representação de número em ponto flutuante 16 bits (Próprio autor)

Utilizando os softwares ModelSim e Netbeans, com as linguagens SystemVerilog e

Java, respectivamente, pôde-se especificar e implementar um algoritmo para converter as

amostras. Esta metodologia foi utilizada para especificar o modo como as amostras serão representadas para posteriormente serem utilizadas no módulo Windowing/Block Switching.

Apesar de o conversor ser fundamental para a realização dos cálculos com os coeficientes representados em ponto flutuante, o mesmo é um componente a parte do módulo

Windowing/Block Switching, ou seja, não faz parte da Unidade Aritmética de Ponto

Flutuante.

Na Figura 25 é apresentado o algoritmo de conversão de números reais para ponto flutuante de 16 bits.

4.2.3.2 Somador/Subtrator

Na Figura 26 é apresentado o funcionamento do Somador/Subtrator.

O Somador/Subtrator é um bloco que recebe dois números reais representados em ponto flutuante de 16 bits e realiza a soma/subtração. Ao final da operação fornece como saída um número de 16 bits.

4.2.3.3 Multiplicador

Na Figura 27 é apresentado um fluxograma com o funcionamento do Multiplicador.

O Multiplicador é um bloco que recebe dois números reais representados em ponto flutuante de 16 bits e realiza a multiplicação. Ao final da operação, como saída do bloco

Multiplicador, tem-se um número real representado em ponto flutuante de 16 bits.

No documento 2010.2Relatorio TCC Versao DEFESA V1 (páginas 55-67)

Documentos relacionados