• Nenhum resultado encontrado

2010.2Relatorio TCC Versao DEFESA V1

N/A
N/A
Protected

Academic year: 2021

Share "2010.2Relatorio TCC Versao DEFESA V1"

Copied!
91
0
0

Texto

(1)

UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA – UEFS

Lauê Rami Souza Costa de Jesus

Desenvolvimento e Implementação em Lógica Digital da Função de

Janelamento Seno do Módulo Windowing/Block Switching de um

Decodificador de Áudio MPEG-2 AAC-LC

FEIRA DE SANTANA 2010

(2)

LAUÊ RAMI SOUZA COSTA DE JESUS

Desenvolvimento e Implementação em Lógica Digital da Função de

Janelamento Seno do Módulo Windowing/Block Switching de um

Decodificador de Áudio MPEG-2 AAC-LC

Trabalho de Conclusão de Curso apresentado ao curso de Engenharia de Computação da Universidade Estadual de Feira de Santana para a obtenção do título de Bacharel em Engenharia de Computação.

Orientador: Prof. Wagner Luiz Alves de Oliveira

FEIRA DE SANTANA 2010

(3)

RESUMO

Este trabalho apresenta o desenvolvimento e implementação em lógica digital da função de janelamento seno do módulo Windowing/Block Switching do decodificador de áudio MPEG-2 AAC-LC.

Nesta monografia são detalhados os estudos sobre codificação e decodificação de áudio, o funcionamento e especificação do decodificador MPEG-2 AAC-LC, as normas da ISO/IEC 13818-7, teoria de sinais, métodos numéricos focados em técnicas de interpolação e a representação de números em ponto flutuante.

A metodologia de desenvolvimento deste trabalho mostra como o embasamento teórico é aplicado na elaboração do módulo Windowing/Block Switching. Serão abordadas as ferramentas utilizadas no desenvolvimento, as modelagens e as demais especificações de análise e projeto.

Como resultados, serão apresentados os módulos em nível RTL (Register Transfer

Level), bem como todo o processo de desenvolvimento, envolvendo representações,

codificação, planos de verificação e testes realizados.

Palavras-chave: Windowing/Block Switching, MPEG-2 AAC-LC, interpolação, codificação, decodificação, ISO/IEC 13818-7.

(4)

ABSTRACT

This work presents the development and implementation of digital logic function sine of Windowing/Block Switching of the audio decoder MPEG-2 AAC-LC.

This report detailed the studies of encoding and decoding áudio, operation and specification of MPEG-2 AAC-LC, the standards of ISO/IEC 13818-7, studies on the theory of signals, studies of numerical methods with a focus on interpolation techniques and the representation of floating point numbers.

The development methodology of this work shows how the theoretical is applied in the preparing of the module Windowing/Block Switching. Explore the tools used in development, modeling and other analysis and design specifications.

As a result, modules will be presented at Register Transfer Level (RTL), as well as the entire development process, including representations, coding, verification plans and tests.

Keywords: Windowing/Block Switching, MPEG-2 AAC-LC, interpolation, encoding, decoding, ISO/IEC 13818-7.

(5)

AGRADECIMENTOS

Agradeço a Deus, que proporcionou tudo na minha vida, ilumina todos os meus caminhos e sempre está do meu lado.

Agradeço aos meus pais, Nagilson e Zenaide, que são minhas inspirações, pessoas que eu admiro mais que tudo.

Agradeço a todos os meus familiares, ao meu irmão, Lee Udson e a minha irmã Ariana, sempre me apóiam meus maninhos.

Aos meus amigos e colegas da UEFS, são muitos que me acolheram durante essa etapa da minha vida.

A Fernanda Castelo, Igo Amauri, Raphael Marques, Anderson Marques, Lígia Silva, João Marcelo e os petianos. Vocês sempre estarão no meu coração por tudo que fizeram, tenho certeza que minha formação profissional e pessoal tem uma grande contribuição de vocês.

Agradeço ao meu orientador, Wagner Luiz Alves de Oliveira, que acreditou em mim, incentivando e apoiando no desenvolvimento de um grande projeto.

(6)
(7)

LISTA DE FIGURAS

Figura 01 Decodificador... p. 17 Figura 02 Esquema de um Filtro Digital ... p. 18 Figura 03 hd(n), resposta impulsiva ... p. 19

Figura 04 w(n), janela retangular ... p. 19 Figura 05 h(n), sinal janelado ... p. 20 Figura 06 Comparação das Janelas no domínio da Freqüência ... p. 21 Figura 07 Tipos de Window Sequences ... p. 23 Figura 08 h(n), sinal janelado ... p. 27 Figura 09 Representação do número em ponto flutuante com 32 bits ... p. 32 Figura 10 Módulo Banco de Filtros/Block Switching... p. 35 Figura 11 Módulo Banco de Filtros... p. 36 Figura 12 Plano de Testes ... p. 38 Figura 13 Geração dos 256 coeficientes da Janela s/ o Dígito de Guarda ... p. 40 Figura 14 Geração dos 256 coeficientes da Janela c/ o Dígito de Guarda ... p. 42 Figura 15 Comparativo analisando a complexidade dos algoritmos de interpolação... p. 45 Figura 16 Máquinas de Estados do módulo Windowing/Block Switching ... p. 47 Figura 17 Geração da Long Window pelo Controlador Geral ... p. 49 Figura 18 Geração da Long Start Window pelo Controlador Geral ... p. 51 Figura 19 Geração da Eight Short Window pelo Controlador Geral ... p. 53 Figura 20 Geração da Long Stop Window pelo Controlador Geral ... p. 55 Figura 21 Máquina de estados do bloco FSM ... p. 57 Figura 22 Máquina de estados do bloco Interpolação ... p. 60 Figura 23 Máquina de estados do bloco Auxiliar ... p. 62 Figura 24 Representação de número em ponto flutuante 16 bits ... p. 63 Figura 25 Fluxograma do Algoritmo de conversão de real para binário 16 bits ... p. 64 Figura 26 Máquina de estados do Somador/Subtrador ... p. 65 Figura 27 Máquina de estados do Multiplicador ... p. 66 Figura 28 Verificação Funcional do Somador/Subtrator ... p. 68 Figura 29 Verificação Funcional do Gerador de Coeficientes da Janela Seno ... p. 69

(8)

Figura 30 Resultados da Geração da Janela Seno, 256 coeficientes, no MATLAB ... p. 72 Figura 31 Margem de erro coeficientes ideais da Janela Seno e coeficientes interpolados p. 73 Figura 32 Resultados da Geração da Janela Seno do Módulo RTL e Coeficientes Ideais . p. 74 Figura 33 Margem de erro coeficientes ideais e coeficientes interpolados Módulo RTL .. p. 74 Figura 34 Resultados da Geração da Janela Seno, 2048 coeficientes, no MATLAB ... p. 76 Figura 35 Margem de erro coeficientes ideais da Janela Seno e coeficientes interpolados p. 76 Figura 36 Resultados da Geração da Janela Seno do Módulo RTL e Coeficientes Ideais . p. 77 Figura 37 Margem de erro coeficientes ideais e coeficientes interpolados Módulo RTL .. p. 78 Figura 38 Coeficientes gerados randomicamente ... p. 79 Figura 39 Resultado do Janelamento aplicado aos coeficientes gerados randomicamente p. 80 Figura 40 Comparação entre o Janelamento aplicado no MATLAB e no Módulo RTL ... p. 81 Figura 41 Análise de Erros, Janelamento no MATLAB e o janelamento do Módulo RTL p. 81 Figura 42 2048 Coeficientes gerados randomicamente ... p. 83 Figura 43 Resultado do Janelamento dos 2048 coeficientes gerados randomicamente ... p. 83 Figura 44 Função Sinc com 256 coeficientes gerados no MATLAB... p. 84 Figura 45 Função Sinc janelada pelo módulo Windowing Block/Switching ... p. 85 Figura 46 Margens de Erros obtidas na Verificação funcional do Somador/Subtrator ... p. 86 Figura 47 Margens de Erros obtidas na Verificação funcional do Multiplicador ... p. 87

(9)

SUMÁRIO

1 INTRODUÇÃO ... p. 12 2 FUNDAMENTAÇÃO TEÓRICA ... p. 14 2.1 Codificação e Decodificação de Áudio MPEG-2 ... p. 14 2.1.1 ISO/IEC 13818-7 ... p. 15 2.1.2 MPEG-2 AAC-LC ... p. 16 2.2 Janelamento de Sinais ... p. 18 2.3 Banco de Filtros ... p. 22 2.3.1 Windowing/Block Switching ... p. 22 2.3.2 Janelas Seno e KBD ... p. 26 2.4 Utilização de Métodos Numéricos ... p. 27 2.4.1 Interpolação ... p. 28 2.4.1.1 Interpolação Linear... p. 29 2.4.1.2 Interpolação Quadrática ... p. 29 2.4.1.3 Interpolação De Lagrange ... p. 30 2.4.1.4 Interpolação usando Splines ... p. 30 2.5 Representação de Números em Ponto Flutuante ... p. 31 2.5.1 Erros obtidos na representação de um número em ponto flutuante ... p. 32 2.5.2 Aritmética de Ponto Flutuante ... p. 32 2.5.3 O Dígito de Guarda ... p. 34 3 METODOLOGIA DE DESENVOLVIMENTO DO PROJETO ... p. 35 3.1 Codificação e Decodificação ... p. 35 3.2 Windowing/Block Switching... p. 35 3.3 Representação de Número em Ponto Flutuante ... p. 36 3.4 Métodos Numéricos ... p. 36 3.5 Teoria de Sinais... p. 37 3.6 IP-Process ... p. 37 3.7 Plano de Verificação ... p. 37 4 DESENVOLVIMENTO ... p. 39

(10)

4.1 Premissas do Desenvolvimento do Projeto ... p. 39 4.1.1 Utilização do Dígito de Guarda no Somador/Subtrator da Unidade Aritmética de Ponto Flutuante ... p. 39 4.1.2 Estratégia de Inserção de Erros e Coeficientes Previamente Conhecidos ... p. 42 4.1.3 Utilização do Algoritmo de Interpolação Linear no Projeto ... p. 44 4.2 Implementação do Módulo RTL Windowing Block/Switching ... p. 45 4.2.1 Controlador Geral... p. 47 4.2.1.1 Geração da Long_Window e Aplicação do Janelamento ... p. 48 4.2.1.2 Geração da Long_Start_Window e Aplicação do Janelamento ... p. 50 4.2.1.3 Geração da EIGHT_SHORT_Window e Aplicação do Janelamento ... p. 52 4.2.1.4 Geração da Long_Stop_Window e Aplicação do Janelamento ... p. 53 4.2.2 Gerador da Janela Seno ... p. 55 4.2.2.1 Bloco FSM ... p. 56 4.2.2.2 Bloco Interpolação ... p. 58 4.2.2.3 Bloco Auxiliar ... p. 61 4.2.3 Unidade Aritmética de Ponto Flutuante ... p. 62 4.2.3.1 Conversor de Números Reais para Ponto Flutuante 16 bits ... p. 63 4.2.3.2 Somador/Subtrator... p. 65 4.2.3.3 Multiplicador ... p. 66 4.3 Verificação Funcional ... p. 67 4.3.1 Verificação Funcional do Somador/Subtrator ... p. 67 4.3.2 Verificação Funcional do Multiplicador ... p. 68 4.3.3 Verificação Funcional do Gerador de Coeficientes da Janela Seno ... p. 69 5 RESULTADOS ... p. 71 5.1 Módulo Windowing/Block Switching ... p. 71 5.1.1 Gerador de Coeficientes da Janela Seno (256 coeficientes) ... p. 71 5.1.1.1 Resultados da Geração da Janela Seno (256 coeficientes) no MATLAB ... p. 72 5.1.1.2 Resultados da Geração da Janela Seno (256 coeficientes) no Módulo RTL ... p. 73 5.1.2 Gerador de Coeficientes da Janela Seno (2048 coeficientes) ... p. 75 5.1.2.1 Resultados da Geração da Janela Seno (2048 coeficientes) no MATLAB ... p. 75 5.1.2.2 Resultados da Geração da Janela Seno (2048 coeficientes) no Módulo RTL ... p. 77 5.1.3 Resultados do Janelamento utilizando a Short Window ... p. 78 5.1.3.1 Resultados do Janelamento ... p. 79 5.1.3.2 Análise de Erros a partir do Janelamento ... p. 80

(11)

5.1.4 Resultados do Janelamento utilizando a Long Window ... p. 82 5.1.4.1 Resultados do Janelamento ... p. 82 5.1.5 Resultados do Janelamento numa Função Sinc ... p. 84 5.2 Resultados da Verificação Funcional ... p. 85 5.2.1 Resultados da Verificação Funcional do Somador/Subtrator ... p. 85 5.2.2 Resultados da Verificação Funcional do Multiplicador ... p. 86 6 CONSIDERAÇÕES FINAIS ... p. 88 6.1 Dificuldades Encontradas ... p. 88 6.2 Trabalhos Efetuados ... p. 88 6.3 Trabalhos Futuros ... p. 89 REFERÊNCIAS ... p. 90

(12)

1 INTRODUÇÃO

O cenário atual referente ao projeto de circuitos integrados (CIs), no Brasil, apresenta carência na formação de projetistas de tais dispositivos. Tal setor industrial apresenta-se melhor desenvolvido em apenas alguns estados brasileiros, principalmente nas regiões Sul e Sudeste. Entretanto, a utilização de CIs, em todos os setores da atividade econômica mundial, tem aumentado consideravelmente a sua demanda, tornando este setor um segmento importante da atividade econômica no Brasil. Em 2006, os componentes eletrônicos responderam por 63% dos US$ 18 bilhões do total de produtos importados no setor (OLIVEIRA, 2007), segundo a Associação Brasileira da Indústria Elétrica e Eletrônica. Desse total, US$ 3,4 bilhões são especificamente semicondutores (OLIVEIRA, 2007).

Nesse contexto, o governo brasileiro busca incentivar o crescimento no setor da Microeletrônica, o que, segundo Guido Araújo (NETTO, 2005) é o início da recuperação de uma área que está muito debilitada no Brasil. O governo almeja a obtenção do crescimento no setor através de programas como o CI Brasil, voltado para egressos do ensino superior, e o Brazil-IP, voltado para alunos de graduação, o qual opera como um consórcio de universidades brasileiras, em que cada uma desenvolve módulos Intellectual Property (IP) que podem ser utilizados no projeto de CIs em sistemas eletrônicos (BRAZIL-IP, 2002). Uma destas propostas refere-se ao desenvolvimento de um decodificador de áudio Moving Pictures

Experts Group – 2 (MPEG-2) Advanced Audio Coding – Low Complexity (AAC-LC), cuja

importância é percebida devido ao crescente mercado da TV digital no Brasil.

O padrão MPEG é o formato de compressão de sinais de vídeo e som utilizado pela televisão digital de alta definição High Definition Television (HDTV) (NALON; IANO, 2000).

O decodificador MPEG-2 AAC-LC é composto por 13 módulos responsáveis por reconstruir um sinal de áudio previamente codificado. Este projeto visa o desenvolvimento de um destes módulos do decodificador, denominado Windowing/Block Switching, o qual, através do espectro do sinal de áudio inversamente quantizado e das informações de controle do Banco de Filtros, obtém o sinal de áudio reconstruído no domínio do tempo.

A partir do cenário apresentado, este trabalho propõe o desenvolvimento e a implementação em lógica digital da função de janelamento Seno do módulo

(13)

Os estudos teóricos, o processo de desenvolvimento e as técnicas de implementação empregados baseiam-se na aplicação de uma metodologia de projeto de circuito integrados. Conceitos referentes à teoria de sinais, métodos numéricos e aritmética de ponto flutuante também serão aplicados ao projeto.

O desenvolvimento e a implementação do Windowing/Block Switching atenderá às especificações da norma ISO/IEC 13818-7 (ISO/IEC 13818-7, 2006), e serão executados através da metodologia de projeto de circuitos integrados denominada ipProcess (LIMA, 2005). Esta metodologia fornece um fluxo de projeto de sistemas digitais, através de uma série de disciplinas (áreas de concentração do projeto), referentes à concepção, desenvolvimento da arquitetura, desenvolvimento de projeto RTL (Register Transfer Level), verificação funcional e prototipação do sistema.

Um dos objetivos pretendidos pelo trabalho é a capacitação na utilização da metodologia de projeto de FPGA/circuitos integrados, bem como a utilização do módulo

Windowing/Block Switching no Decodificador de Áudio MPEG-2 AAC-LC, o qual está

sendo desenvolvido na UEFS para fins acadêmicos, podendo ser utilizado futuramente para fins comerciais, como em TVs digitais, por exemplo.

O trabalho está organizado em embasamento teórico, metodologia de desenvolvimento (apresenta como os estudos teóricos são aplicados ao projeto), desenvolvimento do projeto (especificação e implementação dos módulos) e resultados (documentação e testes realizados).

(14)

2 FUNDAMENTAÇÃO TEÓRICA

Neste tópico serão detalhados os estudos teóricos realizados com o objetivo de fornecer proficiência nos assuntos fundamentais ao projeto.

2.1 Codificação e Decodificação de Áudio MPEG-2

Este trabalho apresenta a construção de um módulo que compõe um decodificador MPEG-2 AAC-LC. Para entender o contexto da decodificação de áudio, faz-se necessário ter um conhecimento prévio sobre o processo de codificação de áudio.

Um codificador de áudio utiliza técnicas de compressão (MATTOS, 2007) para reduzir a quantidade de dados a serem transmitidos. O MPEG é um codificador de áudio que aproveita as limitações do sistema auditivo humano, através da remoção de partes não perceptíveis do sinal de áudio, obtendo, assim, altas taxas de compressão com alta qualidade do som (NALON; IANO, 2000).

O MPEG-2 foi desenvolvido com base no MPEG-1: além dos canais mono e estéreo que o MPEG-1 suporta, foi adicionado suporte para múltiplos canais. Em sua terceira camada, conhecida popularmente de MP3, o MPEG-2 tem a possibilidade de suportar até cinco canais de som (canais esquerdo, direito e central, mais dois canais de surround) mais um canal de graves, ou, em extensão, sete canais mais um canal de graves (TOKARSKI, 2007). Isso possibilita ter em casa o som com o mesmo desempenho de algumas salas de cinema. A camada 7 do MPEG-2, conhecida como AAC (Advanced Audio Coding), representa um grande avanço sobre o MP3, ao permitir o uso de até 48 canais de áudio, com taxas de amostragem variando de 8 a 96 kHz.

O processo de codificação MPEG-2 AAC tem como entrada um sinal de áudio que é inicialmente tratado por um banco de filtros, configurado por um modelo psicoacústico, conforme as características do sinal. Em seguida, o sinal de áudio sofrerá os processos de escalamento, quantização e codificação por Huffman, respectivamente. Por último, tem-se o empacotamento do fluxo binário (o chamado bitstream).

O processo de decodificação é basicamente o inverso da codificação, tendo como entrada o bitstream codificado, o qual segue para o Deformatador de Bitstream (onde ocorre

(15)

o desempacotamento do bitstream) e, em seguida, sofre os processos de decodificação, dequantização e reescalamento. Finalmente, ocorre a atuação do Banco de Filtros de Síntese, o qual reconstrói o sinal no domínio de tempo.

O processo de decodificação é baseado na consulta a tabelas de Huffman, que mapeiam palavras-código a pares ou quádruplas ordenadas de coeficientes espectrais, a partir de informação auxiliar recuperada do bitstream, a qual especifica a tabela a ser usada no quadro corrente. O processo de dequantização/reescalamento reconstrói os coeficientes em freqüência originais (ou seja, em sua escala original), a partir dos coeficientes escalados e dos fatores de escala recuperados pelo decodificador de Huffman.

Os sub-módulos que compõem o Banco de Filtros de Síntese são três: IMDCT;

Windowing/Block Switching; e Overlapping/Adding. A IMDCT (Inversa da Transformada

Discreta Cosseno Modificada) é responsável por transferir os dados espectrais para o domínio do tempo. O módulo W/BS (Windowing/Block Switching) é responsável pela seleção e aplicação da função de janelamento do sinal de áudio. Por fim, há a sobreposição das janelas obtidas, meio a meio, no módulo O/A (Overlapping/Adding), de forma a reconstruir o sinal original.

2.1.1 ISO/IEC 13818-7

A International Organization for Standardization (ISO) é um órgão de federação mundial das normas. O trabalho de preparação das normas internacionais normalmente é elaborado por comitês técnicos da ISO (ISO/IEC 13818-7, 2006). A ISO tem como colaboradora a International Electrotechnical Commission (IEC) para as questões de normalização eletrotécnica.

A ISO define as normas para o chamado MPEG-2 Advanced Audio Coding (AAC), que está documentado na ISO/IEC 13818-7. O MPEG-2 AAC requer uma compatibilidade com o MPEG-1, apesar de apresentar uma qualidade superior ao MPEG-1 por suportar múltiplos canais. A norma MPEG-2 AAC permite qualidade ITU-R (ITU-R DOCUMENT TG10-2/3- E ONLY, 1991), com taxa de dados de 320 kbit/s para cinco canais de sinal de áudio. A norma ISO/IEC 13818-7 define para o processo de decodificação o uso de alguns módulos requeridos e outros opcionais, conforme explicado a seguir.

(16)

2.1.2 MPEG-2 AAC-LC

O MPEG-2 AAC-LC é composto por 13 módulos que podem ser visualizados na Figura 1. A norma ISO/IEC 13818-7 define alguns módulos como sendo necessários e outros como opcionais, os quais não serão abordados.

Em linhas gerais, o decodificador de áudio MPEG-2 AAC-LC recebe um bitstream (fluxo de bits) proveniente de um arquivo de áudio digital no formato AAC, que tenha sido codificado de forma compatível com o perfil Low Complexity da norma ISO/IEC 13818-7, decodifica tal bitstream e emite saída de áudio digital no formato PCM (Pulse Code

Modulation). Ao longo deste processo, o bitstream sofre uma série de transformações, as

quais são aplicadas pelos módulos do decodificador de áudio.

O primeiro destes módulos é o Demultiplexador de Bitstream, que recebe como entrada o bitstream codificado. Este módulo identifica os campos que compõem o bitstream, separando e encaminhando os dados para os demais módulos.

A partir da análise da informação, o Demultiplexador de Bitstream envia para o módulo Decodificador de Huffman a parte do fluxo de dados que deverá sofrer o processo de decodificação. O Decodificador de Huffman decodifica os coeficientes espectrais (os quais permanecem quantizados e escalados) e os fatores de escala. Os coeficientes espectrais são encaminhados para o módulo Dequantizador que realiza o processo de dequantização, ou seja, a saída deste módulo é o espectro inversamente quantizado. Os fatores de escala são encaminhados para o módulo Reescalador que os aplica sobre grupos de coeficientes espectrais (decodificados por Huffman), de acordo com bandas de fatores de escala.

O módulo Banco de Filtros de Síntese é a base para o desenvolvimento deste projeto. A representação tempo-frequência de um sinal é mapeado para o domínio do tempo, através deste módulo, o qual é composto dos sub-módulos IMDCT, Windowing/Block Switching (W/BS) e Overlapping/Adding (O/A).

O módulo IMDCT transforma os coeficientes espectrais, já reescalados, no domínio da freqüência, em sinais discretizados no domínio de tempo. Especificamente, este módulo aplica a Inversa da Transformada Discreta de Cosseno Modificada sobre os coeficientes espectrais de uma dada janela temporal.

O módulo W/BS aplica a função de janelamento para uma dada seqüência de janelas, de acordo com o formato atribuído à seqüência durante a codificação, podendo ser tal função

(17)

a Seno ou a KBD (Kaiser Bessel Derived), com o intuito de adaptar a resolução tempo/freqüência do Banco de Filtros às características do sinal de entrada.

Por fim, tem-se o módulo O/A, o qual faz a junção de seqüências adjacentes de janelas, obtidas no W/BS.

Na Figura 1 podem ser visualizados todos os módulos do decodificador de áudio MPEG-2 AAC.

(18)

2.2 Janelamento de Sinais

Para entender o janelamento de sinais, será necessário um embasamento sobre filtros digitais.

O processo de filtragem de sinais pode ser realizado digitalmente, na forma esquematizada pelo diagrama apresentado na Figura 2:

Figura 02: Esquema de um Filtro Digital (BOTELHO, 2001)

No esquema representado na Figura 2, o bloco conversor A/D converte o sinal de tempo contínuo x(t) em uma sequência x[n]. O filtro digital processa a sequência x[n], resultando em outra sequência y[n], que representa o sinal filtrado na forma digital. Este sinal

y[n] é então convertido para um sinal de tempo contínuo, através de um conversor D/A, e

reconstruído através de um filtro passa-baixas, cuja saída é o sinal y(t), que representará a versão filtrada do sinal x(t).

Filtros Digitais cuja resposta ao impulso apresenta duração finita são chamados de

Finite Impulse Response (FIR). Um método usado no projeto de filtros FIR é o método do

janelamento. Este parte da especificação da seleção ideal em freqüência desejada para o filtro, com o intuito de limitar em comprimento e forma a resposta impulsiva do filtro hd(n),

realizável e com comprimento finito (DEEC, 2000). Essa técnica pode ser realizada aplicando o hd(n) a uma janela w(n) de comprimento N, ou seja, h(n) = hd(n) × w[n], onde h(n) é o sinal

resultante após a aplicação da janela. Esta operação tem por implicação no domínio da frequência a convolução periódica entre Hd(ejw) e W(ejw), que correspondem no domínio do

tempo a hd(n) e w(n), respectivamente (DEEC, 2000).

No caso de w(n) ser uma janela retangular de comprimento N (o que na prática significa que o seu efeito será simplesmente o de truncar a resposta impulsiva de hd(n) a N

(19)

( ) = 1, 0 ≤ ≤ − 1

0, (1)

A Figura 3 representa hd(n) para o caso de uma função sinc, enquanto a Figura 4

representa w(n) para o caso de uma janela retangular.

Figura 03: hd(n), resposta impulsiva (DEEC, 2000)

Figura 04: w(n), janela retangular (DEEC, 2000)

A Figura 5 ilustra a multiplicação em n da resposta impulsiva de um filtro ideal do tipo passa-baixa representado pela função sinc discreta no tempo ilustrada na Figura 3 por uma janela retangular tal como ilustrado na Figura 4.

(20)

Figura 05: h(n), sinal janelado (DEEC, 2000)

Além da janela retangular, há outras janelas freqüentemente usadas e referidas na literatura, a maioria das quais com a particularidade de serem simétricas (naturalmente para facilitar o projeto de filtros FIR com fase linear). Algumas destas janelas são (DEEC, 2000):

 Janela triangular ou de Bartlett

( ) = , 0 ≤ ≤ 2 − , < ≤ − 1 0, (2)  Janela de Hamming: ( ) = 0.54 − 0.46 cos ( ) , 0 ≤ ≤ − 1 0, (3)  Janela de Hanning: ( ) = 0.5 − 0.5 cos , 0 ≤ ≤ − 1 0, (4)

(21)

 Janela de Blackman:

( ) = 0.42 − 0.5 cos + 0.08 cos , 0 ≤ ≤ − 1

0, (5)

A depender da aplicação, uma janela pode ser mais adequada do que outra. Na Figura 6 é apresentada uma comparação no domínio da freqüência entre as janelas seno, hanning e retangular.

Figura 06: Comparação das Janelas no domínio da Freqüência (BOSI, 2003)

A partir da análise da Figura 6, é possível concluir que a largura do lóbulo principal da janela Retangular é a menor das três janelas, no entanto, a energia dos lóbulos laterais é maior. Por outro lado, a janela Seno apresenta a largura do lóbulo principal maior do que a Retangular, e a energia dos lóbulos laterais é menor do que a Retangular. A janela Hanning apresenta a maior largura do lóbulo principal, ao passo que a energia dos lóbulos laterais é menor, quando comparada com as janelas Seno e Retangular.

Segundo Bosi (2003), a baixa energia nos lóbulos laterais da janela está ligada à importância das componentes de freqüências indesejadas, enquanto a largura do lóbulo principal está ligada à resolução de freqüência da janela.

(22)

2.3 Banco de Filtros

O Banco de Filtros de Análise é um componente fundamental do codificador MPEG-2 AAC-LC, ao realizar a conversão dos sinais de entrada do codificador no domínio do tempo, para a representação no domínio da freqüência. Por outro lado, o Banco de Filtros de Síntese realiza o processo inverso no decodificador (BOSI; GOLDBERG, 2003). Esta conversão é feita pela aplicação de uma Transformada Discreta Cosseno Modificada (MDCT) variante no tempo para o Banco de Filtros de Análise e Inversa da Transformada Discreta Cosseno Modificada (IMDCT) para o Banco de Filtros de Síntese. A transformação de um bloco de comprimento N pode ser definida como 2.048 ou 256 amostras de tempo. A função de janelamento tem um efeito significativo sobre o banco de filtros: o banco de filtros do MPEG-2 AAC-LC foi projetado para permitir uma mudança na janela a ser aplicada, de forma a melhor adaptar-se às condições do sinal de entrada. O formato da janela é determinado no codificador, sendo essa informação é transmitida para o decodificador.

O uso de 2.048 amostras no domínio do tempo permite a codificação de alta eficiência para sinais com espectro complexo, mas pode criar problemas na transição de sinais. Os erros de quantização, estendendo mais do que alguns milissegundos antes de um evento transitório, provocam a não eficácia do mascaramento. Isto leva a um fenômeno chamado “pré-eco”, em que um erro de quantização pode torna-se audível (BOSI; GOLDBERG, 2003).

O MPEG-2 AAC-LC aborda este problema, permitindo que o comprimento do bloco possa variar em função das condições do sinal. Sinais com características de menor número de transitórios são melhor acomodados pela transformada longa, enquanto sinais com característica de possuírem maior número de transitórios, geralmente, são reproduzidos com mais precisão por uma transformada curta (BOSI; GOLDBERG, 2003).

2.3.1 Windowing/Block Switching

Uma escolha natural que satisfaz os requisitos para a reconstrução perfeita da MDCT é a janela seno (BOSI, 2003). Tal janela provê boa resolução para os componentes espectrais de um sinal, melhorando a eficiência de codificação dos sinais caracterizados com um conteúdo harmônico denso. A depender do tipo de aplicação (como será apresentado no tópico 2.3.2),

(23)

no entanto, a KBD pode melhorar a eficiência de codificação. Portanto, o Windowing/Block

Switching é o módulo responsável por alterar dinamicamente a janela Seno pela KBD e

vice-versa, a depender das condições do sinal de entrada, para realizar o janelamento do sinal como foi explicado na seção 2.2.

A depender do sinal de controle window_shape, define-se a função de janelamento a ser utilizada. Além disso, as possíveis combinações do sinal de controle window_sequence, determinam o sequenciamento de janelas a ser adotado (ISO/IEC 13818-7, 2006), dentre os descritos a seguir:

Figura 7: Tipos de Window Sequences (ISO/IEC 13818-7, 2006)

Na Figura 7 são apresentados os tipos de sequências de janela que podem ser geradas pelo Módulo Windowing/Block Switching

As possíveis combinações para o window_shape são:

 window_shape = 0, para janela Seno  window_shape = 1, para janela KBD

Utilizando window_shape = 1 e window_sequence = ONLY_LONG_SEQUENCE tem-se que:

( ) = , ( ), 0 ≤ < 1024

, ( ), 1024 ≤ < 2048

(6)

Nas equações em (6) percebe-se que na primeira metade (esquerda) da

(24)

técnica que utiliza a metade esquerda do janelamento realizado anteriormente. Para a segunda metade (direita) aplica-se a janela KBD.

Utilizando window_shape = 0 e window_sequence = ONLY_LONG_SEQUENCE tem-se que:

( ) = , ( ), 0 ≤ < 1024

, ( ), 1024 ≤ < 2048

(7)

Nas equações em (7) aplica-se da mesma maneira quando window_shape = 1, a mudança somente ocorre pela utilização da janela Seno.

Utilizando window_shape = 1 e window_sequence = LONG_START_SEQUENCE tem-se que: ( ) = ⎩ ⎨ ⎧ , ( ), 0 ≤ < 1024 1.0, 1024 ≤ < 1472 , ( + 128 − 1472), 1472 ≤ < 1600 0.0, 1600 ≤ < 2048 (8)

Nas equações em (8) percebe-se que na primeira metade (esquerda) da

LONG_START_SEQUENCE não é necessária a aplicação do janelamento KBD, aplica-se

uma técnica que utiliza a metade esquerda do janelamento realizado anteriormente.

Utilizando window_shape = 0 e window_sequence = LONG_START_SEQUENCE tem-se que: ( ) = ⎩ ⎨ ⎧ , ( ), 0 ≤ < 1024 1.0, 1024 ≤ < 1472 , ( + 128 − 1472), 1472 ≤ < 1600 0.0, 1600 ≤ < 2048 (9)

Nas equações em (9) aplica-se da mesma maneira quando window_shape = 1, a mudança somente ocorre pela utilização da janela Seno.

Utilizando window_shape = 1 e window_sequence = EIGHT_SHORT tem-se que:

( ) = , ( ), 0 ≤ < 128

, ( ), 128 ≤ < 256

(25)

Neste caso tem-se 8 blocos de 256 amostras, portanto para o primeiro bloco de 256 amostras W0(n) tem-se as equações em (10) , aplica-se na primeira metade (esquerda) a

técnica que utiliza a metade esquerda do janelamento realizado anteriormente. Para a segunda metade (direita) aplica-se a janela KBD.

Para os 7 blocos de 256 amostras restantes, tem-se que:

( ) = , ( ), 0 ≤ < 128

, ( ), 128 ≤ < 256

(11)

Nas equações em (11) aplicam-se aos 7 blocos de 256 amostras o janelamento

KBD_LEFT na primeira metade (esquerda) e o janelamento KBD_RIGHT na segunda metade

(direita). Utilizando window_shape = 0 e window_sequence = EIGHT_SHORT tem-se que:

( ) = , ( ), 0 ≤ < 128

, ( ), 128 ≤ < 256

(12)

Para o primeiro bloco de 256 amostras representado nas equações em (12) aplicam-se da mesma maneira quando window_shape = 1, a mudança somente ocorre pela utilização da janela Seno.

( ) = , ( ), 0 ≤ < 128

, ( ), 128 ≤ < 256

(13)

Para os 7 blocos de 256 amostras restantes representados nas equações em (13) aplicam-se da mesma maneira quando window_shape = 1, a mudança somente ocorre pela utilização da janela Seno.

Utilizando window_shape = 1 e window_sequence = LONG_STOP_SEQUENCE tem-se que: ( ) = ⎩ ⎨ ⎧ 0.0, 0 ≤ < 448 , ( − 448), 448 ≤ < 576 1.0, 576 ≤ < 1024 , ( ), 1024 ≤ < 2048 (14)

(26)

Aplicam-se às amostras nos determinados intervalos especificados nas equações em (14) o janelamento KBD.

Utilizando window_shape = 0 e window_sequence = LONG_STOP_SEQUENCE tem-se que: ( ) = ⎩ ⎨ ⎧ 0.0, 0 ≤ < 448 , ( − 448), 448 ≤ < 576 1.0, 576 ≤ < 1024 , ( ), 1024 ≤ < 2048 (15)

Aplicam-se às amostras nos determinados intervalos especificados nas equações em (15) o janelamento Seno.

2.3.2 Janelas Seno e KBD

A KBD é uma janela flexível cuja forma pode ser modificada pelo ajuste de um parâmetro α. Desse modo, dependendo da aplicação, pode-se modificar a forma da janela para controlar a perda espectral. Esta janela é boa para detecção de dois sinais com a mesma freqüência com amplitudes significativamente diferentes (ANDRADE; SOARES, 2002).

Considerando um número de amostras igual a N a KBD pode ser representada pelas equações em (16) e (17), (ISO/IEC 13818-7, 2006): ( , ) =⎝ ⎜ ⎛ ⎣ ⎢ ⎢ ⎢ ⎡ ⎝ ⎜ ⎛ . ⎠ ⎟ ⎞ ⎦ ⎥ ⎥ ⎥ ⎤ ⎠ ⎟ ⎞ [ ] (16)

Na equação em (16) tem-se a janela KBD, para 0 ≤ n ≤ N/2.

[ ] = ∑

(27)

A ISO/IEC 13818-7 define que na equação em (17) tem-se a aplicação (coeficiente) da janela KBD para N/2 amostras, amostras que estão no intervalo de N/2 à N-1. O I0 referente a

equação (16) pode ser encontrado a partir da equação (17). A ISO/IEC 13818-7 também define que o α em (16) pode ser 4 para N = 2048 ou pode ser 6 para N = 256.

Considerando um número de amostras igual a N, a janela Seno pode ser representada pela equação (18):

( ) = sin + (18)

onde n = 0, 1, 2, 3,..., N-1. Na Figura 8 é mostrada a janela Seno.

Figura 08: Janela Seno (BOSI, 2003)

2.4 Utilização de Métodos Numéricos

A diminuição nos custos do projeto é muito importante para os muitos Circuitos Integrados de Aplicação Específica (ASICs), tanto por questões de tempo de fabricação quanto por questões econômicas. Um problema na produção de CIs é o alto custo de produção para pequenas quantidades: por exemplo, 10mm2 pode custar 20.000 euros (BOSI, 2003).

A partir das informações sobre o alto custo de produção de um CI, tanto em termos de memória quanto em termos de área, pretende-se utilizar os métodos numéricos de interpolação para armazenar uma quantidade reduzida dos coeficientes da janela seno. Como

(28)

foi visto nas seções 2.3 e 2.3.1, o módulo Windowing/Block Switching terá uma quantidade de coeficientes pré-armazenados que correspondem aos coeficientes que serão utilizados para reconstruir a janela seno. Tal janela, por sua vez, será aplicada aos coeficientes do sinal de áudio advindos do módulo IMDCT. O número de coeficientes de uma janela é relativamente alto, podendo ser 256 ou 2.048 coeficientes.

Este fato acarreta em mais espaço para armazenamento, conseqüentemente, mais área será necessária para células de armazenamento no CI e, portanto, maior será o custo do projeto e da produção. Outro fator importante a considerar é o aumento da probabilidade de falhas, devido ao aumento da área do CI. Neste ponto, tal aumento também provoca o aumento do custo de produção unitário dos CIs.

A interpolação é uma técnica que se utiliza de um conjunto de pontos conhecidos de um intervalo, para determinar outros pontos pertencentes a esse intervalo. Na seção 2.4.1, a interpolação será explicada com mais detalhes.

A partir da implementação da interpolação, poderá ser obtida uma redução no custo de produção do CI. Com a realização da interpolação será possível reduzir o número de coeficientes pré-armazenados da janela seno e, conseqüentemente, reduzir o espaço da memória embarcada na área do CI, diminuindo, assim, seu custo de produção.

2.4.1 Interpolação

A interpolação consiste em determinar uma função, que assume valores conhecidos em certos pontos (nós de interpolação). A classe de funções escolhida para a interpolação é a priori arbitrária, e deve ser adequada às características que pretendidas para essa função (LOBÃO, 2000).

A necessidade de se efetuar esta substituição surge em diversas situações, como, por exemplo, quando são conhecidos somente os valores numéricos da função por um conjunto de pontos (não dispondo de sua forma analítica), e se faz necessário calcular o valor da função em um ponto não tabelado.

Um problema clássico de interpolação pode ser dado pelo seguinte enunciado:

“Seja a função y = f(x), de tal forma que deseja-se determinar f(x), com as seguintes

(29)

x ∈ (x0, x3) e x ≠ xi, i = 0, 1, 2, 3 (19)

Para resolver (19), tem-se que fazer uma interpolação. Como conseqüência, determina-se o polinômio interpolador, que é uma aproximação da função tabelada. Na seqüência, será visto como resolver problemas deste tipo.

2.4.1.1 Interpolação Linear

Dados dois pontos distintos de uma função y = f(x): (x0, y0) e (x1, y1), deseja-se

calcular o valor de para um determinado valor de entre x0 e x1, usando a interpolação

polinomial.

O polinômio interpolador é uma unidade menor que o número de pontos conhecidos (LOBÃO, 2000). Assim sendo, o polinômio interpolador nesse caso terá grau 1, isto é:

P1(x) = a1x + a0 (20)

Para determiná-lo, os coeficientes a0 e a1 devem ser calculados. O polinômio

interpolador P1(x) = a1x + a0 tem como imagem geométrica uma reta, portanto é a

aproximação da função f(x) por uma reta que passa pelos dois pontos conhecidos (x0, y0) e

(x1,y1).

2.4.1.2 Interpolação Quadrática

Se conhecermos três pontos distintos de uma função, então o polinômio interpolador será (LOBÃO, 2000):

(30)

O polinômio P2(x) é conhecido como função quadrática cuja imagem geométrica é

uma parábola, portanto, é a aproximação da função f(x) por uma parábola que passa pelos três pontos conhecidos (x0, y0), (x1, y1) e (x2, y2).

2.4.1.3 Interpolação De Lagrange

Sejam (xi, yi), i = 0, 1, 2, ..., n, n + 1 pontos distintos, isto é, xi ≠ xj para i ≠ j. Existe um

único polinômio P(x) de grau menor ou igual a n, tal que P(xi) = yi, para todo i (LOBÃO,

2000).

O polinômio P(x) pode ser escrito na forma:

Pn(x) = a0 + a1x + a2x2 + ... + anxn (22)

O polinômio P(x) é, no máximo, de grau n, se an ≠ 0 e, para determiná-lo, deve-se

conhecer os valores de a0, a1,..., an. Como Pn(x) contém os pontos (xi, yi), i = 0, 1, ..., n,

pode-se escrever que Pn(xi) = yi.

2.4.1.4 Interpolação usando Splines

Sejam x1, x2, ..., xn pontos distintos com a = x1 < x2 < ... < xn = b e sejam f1, f2, ..., fn os

valores da função f nestes pontos. O spline cúbico que interpola estes dados é a função s definida em [a, b] que tem as seguintes propriedades (CLÁUDIO, 1994):

s(xi) = fi,i = 1(1)n ou fi = yi. (23)

s(x), s’(x) e s”(x) são contínuas em [a, b]. (24)

Em cada subintervalo [xi, xi+1], i = 1(1)n – 1, s(x) é um polinômio cúbico (25)

(31)

∫ "( ) ≤ ∫ "( ) (26)

E a última propriedade diz que:

s”(a) = s”(b) = 0. (27)

2.5 Representação de Números em Ponto Flutuante

A representação de números inteiros como 0, 1, 35, 313 e 25.987 pode ser feita facilmente, utilizando um conjunto de bits organizados em bytes (CAVALHEIRO, 2003). Números ditos reais, ou seja, números que possuem uma parte inteira e uma parte fracionária, ambas separadas por vírgulas como em 1,25 e 38,313, requerem uma forma alternativa de representação. Esta forma alternativa de representação considera diferentes componentes do número. Para os números reais citados anteriormente, é possível criar uma representação genérica na forma:

+/- número * base +/- expoente (28)

A questão é como criar uma representação deste valor numérico interna ao computador (utilizando, portanto, uma seqüência de bits/bytes). Uma forma comum é utilizar um conjunto de N bits (tipicamente N = 32 ou N = 64), para representar um número em ponto flutuante com precisão simples ou dupla, para armazenar um valor em ponto flutuante em uma forma normalizada. A forma normalizada é a seguinte (CAVALHEIRO, 2003):

+/- 0,mantissa * base +/- expoente (29)

Onde o número é sempre representado com “0,”, ou seja, a mantissa representa os dígitos significantes do número e o expoente regula a precisão da representação. A Figura 12 mostra a representação do número em ponto flutuante com 32 bits.

(32)

Figura 09: Representação do número em ponto flutuante com 32 bits (Próprio autor)

2.5.1 Erros obtidos na representação de um número em ponto flutuante

Como o erro de arredondamento é inerente à computação de números em ponto flutuante, é importante ter uma forma de medir esse erro. Se o resultado da computação de um número em ponto flutuante é 3,12 * 10-2, e a resposta, quando computado com precisão infinita é 0,0314, tem-se um erro por duas unidades na última casa decimal. Da mesma forma, se um número real 0,0314159 é representado como 3,14 * 10-2, tem-se um erro de 0,159 na última casa decimal. Uma forma de medir a diferença entre um número de ponto flutuante e um número real, é aproximando o erro relativo, que é simplesmente a diferença entre os dois números, dividido pelo número real. Por exemplo, o erro relativo cometido quando se aproxima o número 3,14159 para 3,14 é 0,00159/3,14159 = 0,0005 (GOLDBERG, 1994).

Os erros inerentes aparecem na criação ou simplificação de um modelo matemático de determinado sistema, ou ainda, nas medidas, em geral. Os valores de medidas como tempo, temperatura e distância, por exemplo, são obtidos de instrumentos que têm precisão limitada. Sobre tais erros, o analista numérico não tem meios de evitá-los ou mesmo minimizar seus efeitos. Os erros de discretização, aproximação ou truncamento, são erros cometidos quando se substitui qualquer processo infinito por um processo finito ou discreto. Os erros de arredondamento surgem quando se trabalha com máquinas digitais para representar os números reais (CLÁUDIO, 1994).

2.5.2 Aritmética de Ponto Flutuante

Na aritmética de ponto flutuante, a adição e a subtração são operações mais complexas que a multiplicação e a divisão (STALLINGS, 2002). Isso se deve à necessidade de alinhar os operandos, de modo a tornar iguais os seus expoentes. O algoritmo de adição e subtração tem 4 fases básicas:

(33)

 Verificar se algum operando é zero  Alinhar as mantissas

 Adicionar ou subtrair as mantissas; e  Normalizar o resultado

O processo começa pela mudança de sinal do subtraendo, caso a operação seja uma subtração. A seguir se o operando for zero, o resultado será o valor do outro operando. O alinhamento das mantissas pode resultar em perda de dígitos – assim, o deslocamento é efetuado no número de menor expoente, uma vez que qualquer dígito perdido neste terá um valor relativamente menor. O alinhamento é feito deslocando-se os dígitos da mantissa para a direita e incrementando o expoente, repetidamente, até que os expoentes dos dois operandos sejam iguais.

Em seguida, as duas mantissas são somadas, levando em conta seus sinais. Quando os sinais são diferentes, o resultado pode ser zero. A fase seguinte consiste em normalizar o resultado: a normalização consiste em deslocar os dígitos da mantissa para a esquerda, até que o digito mais significativo seja diferente de zero. A cada deslocamento, o expoente é decrementado (STALLINGS, 2002).

A multiplicação e a divisão de ponto flutuante são operações muito mais simples do que a adição e subtração. Primeiramente considerando a multiplicação, se qualquer um dos operandos for zero, o resultado será zero. Em seguida somam-se os expoentes. Se o expoente do produto estiver dentro da faixa de números representáveis, o passo seguinte será multiplicar as mantissas, levando em conta seus sinais. O produto terá o dobro do comprimento do multiplicando e do multiplicador. Bits extras são perdidos com o arredondamento. Depois de calcular o produto, o resultado é então normalizado e arredondado (STALLINGS, 2002).

Na divisão o primeiro passo é testar se algum dos operandos é zero. Caso o divisor seja 0, é reportado um erro ou o resultado é a representação de infinito, dependendo da implementação. Caso o dividendo seja 0, o resultado será 0. Se não ocorrer nenhum desses passos, o expoente do divisor será subtraído do expoente do dividendo. O passo seguinte é

(34)

dividir as mantissas, Esse passo é seguido pela normalização e pelo arredondamento do resultado (STALLINGS, 2002).

2.5.3 O Dígito de Guarda

A partir de dois números X e Y, onde X é igual a 10,1 e Y é igual a 9,93,será realizada uma subtração entre ambos os números (GOLDBERG, 1994):

X = 1,01*101 (30)

Y = 0,99*101 (31)

X – Y = 0,02*101 (32)

O resultado correto seria 0,17. Ao invés de usar todos os dígitos do número, o

hardware em ponto flutuante opera com um número fixo de dígitos. Suponha que o número

de dígitos fixados seja igual a 3. Quando o menor operando é deslocado para a direita com o objetivo de igualar os expoentes, alguns dígitos são simplesmente descartados, pois o número de dígitos fixados permitido pelo hardware é somente 3. Portanto, não é possível armazenar todos os dígitos.

Adicionando um dígito extra, chamado de Dígito de Guarda (GOLDBERG, 1994), pode diminuir a ocorrência desse tipo de situação. Assim, com a utilização do Dígito de Guarda, o exemplo anterior permaneceria da seguinte forma:

X = 1,010*101 (33)

Y = 0,993*101 (34)

(35)

3 METODOLOGIA DE DESENVOLVIMENTO DO PROJETO

Neste tópico serão descritos os passos utilizados para a construção do projeto, desde os estudos teóricos, especificações e análises, implementação, resultados e testes.

3.1 Codificação e Decodificação

Primeiramente foi realizado um estudo de como ocorre o processo de codificação e decodificação se fez necessário, com o intuito de compreender a importância do módulo

Windowing/Block Switching para o Decodificador de Áudio MPEG-2 AAC-LC, bem como

identificar suas entradas, saídas e localização. Em seguida um estudo sobre as normas da ISO/IEC 13818-7 foi fundamental para a compreensão das várias especificações.

Na Figura 10 podem ser visualizadas as entradas e saídas do módulo Banco de Filtros/Block Switching.

Figura 10: Módulo Banco de Filtros/Block Switching (Próprio autor)

3.2 Windowing/Block Switching

Como metodologia de desenvolvimento, um estudo sobre o módulo Windowing/Block

Switching e seus componentes internos e externos foi realizado, visando compreender o

(36)

principais: na primeira parte, tem-se a realização da IMDCT; na segunda parte, tem-se o

Windowing/Block Switching; e na terceira parte, tem-se o Overlapping/Adding.

Como ilustrado na Figura 11, a partir de estudos mais aprofundados dos módulos que compõem o Banco de Filtros, foi possível especificar de forma geral o sistema que representa a reconstrução do sinal de áudio no domínio do tempo.

Figura 11: Módulo Banco de Filtros (Próprio autor)

3.3 Representação de Números em Ponto Flutuante

Neste projeto, freqüentemente, números reais foram utilizados. As amostras de um sinal de áudio são números reais, os valores dos coeficientes da Janela Seno utilizada no projeto também são representados com números reais. Portanto, a partir do fato de que a representação numérica no computador segue um padrão, foi realizado um estudo sobre a representação de números em ponto flutuante.

3.4 Métodos Numéricos

No desenvolvimento de CIs, existem alguns requisitos importantes que são levados em consideração durante a especificação e projeto. Neste trabalho foram realizados estudos sobre

(37)

métodos numéricos, mais especificadamente a interpolação. Com a interpolação, tornou-se possível armazenar uma quantidade relativamente pequena de coeficientes referentes à janela seno utilizadas no projeto, para posterior reconstrução de tal janela com todos os seus coeficientes.

3.5 Teoria de Sinais

No decorrer desse projeto foi realizado um estudo sobre janelamento de sinais, pois a principal função do módulo Windowing/Block Switching consiste em realizar o janelamento do sinal de áudio advindo do módulo IMDCT.

3.6 IpProcess

Como metodologia de desenvolvimento de CIs foi aplicado o IpProcess, o que permitiu a geração de diversos modelos especificando detalhes dos módulos implementados. Uma das principais disciplinas do ipProcess adotadas neste projeto foi a de Análise e Projeto (LIMA, 2005). As características dessa disciplina focam no problema e comportamento, não abordando muitos detalhes de implementação, a partir da identificação dos requisitos iniciais. A aplicação da disciplina de Análise e Projeto ocorreu, principalmente, através da elaboração de diagramas e fluxogramas.

3.7 Plano de Verificação e Casos de Teste

Na última etapa do desenvolvimento referente à metodologia de verificação, foram utilizados métodos adequados de entrada de dados em um módulo a ser testado e, a partir de um modelo de referência, foram comparados os resultados gerados pelo módulo com os resultados esperados.

(38)

Após o desenvolvimento do modelo de referência e algoritmo representante da interpolação definida no projeto, ambos os modelos foram agregados a um projeto criado na ferramenta ModelSim, para realização dos testes programados. A ferramenta ModelSim funciona aplicando estímulos de entrada ao módulo a ser testado, assim como a um modelo de referência, cujo funcionamento é tido como ideal, produzindo os resultados esperados. A partir disso, as respostas geradas pelo módulo a ser testado são comparadas com as saídas de um modelo de referência. A existência de erros pode ser identificada quando o resultado da comparação não for equivalente. A Figura 12 apresenta um fluxograma para o plano de verificação.

(39)

4 DESENVOLVIMENTO

Nesta seção será apresentado todo o processo de desenvolvimento dos módulos RTL e dos modelos de referência, bem como os scripts que auxiliaram na construção do projeto.

4.1 Premissas do Desenvolvimento do Projeto

Neste tópico serão descritos as soluções definidas para os problemas encontrados durante o desenvolvimento do projeto.

4.1.1 Utilização do Dígito de Guarda no Somador/Subtrator da Unidade Aritmética de Ponto Flutuante

A partir do desenvolvimento do sub-módulo Gerador de Coeficientes da Janela Seno, foram realizados os primeiros testes com objetivo de identificar possíveis problemas durante a geração de coeficientes da janela seno.

Como foi apresentado no tópico 2.5.1, o erro de arredondamento é inerente quando se realizam cálculos com números representados em ponto flutuante. Esse fato pôde ser percebido durante a realização dos testes no Gerador de Coeficientes da Janela Seno. Sem o uso do Dígito de Guarda as margens dos erros entre os coeficientes ideais e os coeficientes gerados, ocasionados durante a soma/subtração realizada no cálculo de interpolação para a obtenção dos coeficientes, apresentaram-se acima do nível de erro aceitável.

(40)

Figura 13: Análise de erros - Geração dos 256 coeficientes da Janela s/ o Dígito de Guarda (Próprio autor)

Na Figura 13 é possível perceber que as margens de erros entre os coeficientes ideais e os coeficientes gerados estão relativamente altas. A margem de erro máxima é de 2,644% aproximadamente. A média de erro analisando todos os coeficientes em conjunto é de 1,2172%.

Como foi explicado no tópico 2.5.3 existem limitações quando se utiliza a representação de números em ponto flutuante. Baseado no tópico 3.3 tem-se que a mantissa possui 10 bits para sua representação, o que ocasiona o seguinte problema:

Tem-se que,

X = 0,866071764639229 (36)

Y = 0,004061654094695 (37)

X representado em ponto flutuante de 16 bits = 0011101011101101 (38)

Y representado em ponto flutuante de 16 bits = 0001110000101000 (39)

mantissa de X = 1011101101 (40)

mantissa de Y = 0000101000 (41)

O expoente de X = 01110 (42)

O expoente de Y = 00111 (43)

Na equação 42 tem-se que o expoente de X em decimal é igual a 14 e na equação 43 tem-se que o expoente de Y é igual a 7. Como será apresentado no tópico 4.2.3.2, após a

(41)

verificação do maior expoente, ocorre uma subtração entre os expoentes. O resultado da subtração dos expoentes é a quantidade de deslocamentos de casas do menor número. Então, tem-se que:

A subtração entre o expoente representado na equação 42 e o expoente representado na equação 43 é igual a:

Expoente de X – Expoente de Y = 7 (44)

Após a subtração dos expoentes, a mantissa de Y é deslocada em 7 casas, pois é o resultado da subtração efetuada anteriormente.

mantissa de Y (deslocada) = 000000010000101000 (45)

Na equação 45 além do deslocamento da mantissa, tem-se a concatenação do bit 1 (bit escondido) antes do bit mais significativo da mantissa. Como a mantissa é representada apenas por 10 bits, alguns bits serão perdidos como pode ser visto na equação (46):

mantissa de Y (truncada) = 0000000100 (46)

A partir dessas informações, percebe-se que alguns bits foram perdidos. Na equação 47 tem-se o resultado da soma entre os números reais sem o erro de truncamento.

X + Y = 0,8701334187 (47)

Na equação 48 tem-se o resultado da soma entre os números reais com o erro de truncamento.

X + Y = 0,8696289063 (48)

Esses resultados determinam que a margem de erro sempre está aumentando caso somas/subtrações sucessivas sejam efetuadas. Esse fato pode ser confirmado analisando a Figura 13.

(42)

Para diminuir os efeitos do erro de truncamento nas somas/subtrações foi adotada a estratégia do Dígito de Guarda, explicada no tópico 2.5.3.

Figura 14: Análise de erros - Geração dos 256 coeficientes da Janela c/ o Dígito de Guarda (Próprio autor)

Na Figura 14 é possível perceber que as margens de erros entre os coeficientes ideais e os coeficientes gerados estão abaixo de 1%, um nível aceitável. A margem de erro máxima é de 3,948% aproximadamente devido a um único coeficiente; este problema será tratado no próximo tópico. Mas, a média de erro analisando todos os coeficientes em conjunto é de 0,1957 %.

4.1.2 Estratégia de Inserção de Erros e Coeficientes Previamente Conhecidos

Durante o desenvolvimento do sub-módulo Gerador de Coeficientes da Janela Seno foram realizados vários testes a fim de determinar o número de coeficientes pré-armazenados que seriam utilizados na interpolação. Um dos objetivos do projeto é conseguir armazenar a menor quantidade de coeficientes possíveis e obter os 256/2048 coeficientes da janela seno com uma margem de erro menor que 1%. Para o caso da janela de 256 coeficientes, 35 coeficientes foram utilizados para reconstruir a janela com a margem de erro menor que 1% e para o caso da janela de 2048 coeficientes foram utilizados 90 coeficientes.

(43)

Como o algoritmo de interpolação utilizado no projeto é o linear, na geração dos coeficientes da janela seno, obteve-se o seguinte problema:

Alguns coeficientes da janela que são consecutivos têm valores que diferem bastante uns dos outros. Para valores próximos e que seguem um padrão linear, claramente o erro cometido pela interpolação linear será menor. Portanto, alguns coeficientes que são consecutivos, mas que diferem bastante de um valor para o outro e não seguem um padrão linear, ocasionarão um aumento no erro cometido pela interpolação. A solução encontrada para este problema foi inserir o coeficiente previamente conhecido (coeficientes ideais da janela seno gerados no MATLAB), desconsiderando o coeficiente obtido pela interpolação. O problema de inserir coeficientes previamente conhecidos é que se tem o aumento no número de coeficientes pré-armazenados, porém é mais vantajoso, pois o erro torna-se menor.

Outro problema surgiu devido à limitação da representação dos números reais em ponto flutuante utilizando 16 bits. Sabe-se que o menor número positivo representável em ponto flutuante com 16 bits é igual a 0,0000305474. Alguns coeficientes que seriam pré-armazenados possuem um valor que não pode ser representado com 16 bits, por exemplo, o valor 0,0000176473. Então, o algoritmo de conversão automaticamente aproxima os números que não podem ser representados com 16 bits para 0. A solução para esse problema pôde ser resolvida a partir da inserção dos coeficientes previamente conhecidos. Porém, as regiões afetadas por esse problema têm os valores dos coeficientes consecutivos muito próximos possibilitando a inserção do mesmo coeficiente previamente conhecido, em vários lugares.

Para o caso da janela de 256 coeficientes foram inseridos 2 coeficientes e para o caso da janela de 2048 coeficientes foram inseridos 25 coeficientes.

A estratégia da inserção de erros funciona da seguinte forma, baseando-se na margem de erro permitida entre o valor de um coeficiente ideal e um coeficiente gerado que é de 1% para mais ou para menos, tem-se a possibilidade de administrar a margem de erro entre determinado intervalo.

Por exemplo, para a janela de 2048 coeficientes, quando o segundo coeficiente pré-armazenado é utilizado para a realização dos cálculos da interpolação, o mesmo é utilizado 32 vezes; então se pode afirmar que o segundo coeficiente pré-armazenado participa da geração do 2º coeficiente até o 33º coeficiente. Os primeiros coeficientes gerados têm uma margem de erro menor quando comparados com os coeficientes ideais, porém a margem de erro vai aumentando durante os cálculos da interpolação dos coeficientes seguintes. Portanto, para exemplificar, o problema que ocorre é o seguinte:

(44)

 Do 2º coeficiente até o 30º coeficiente a margem de erro não passa de 1%, mas do 31º coeficiente até o 33º coeficiente (que é o último coeficiente gerado a partir do segundo coeficiente pré-armazenado) tem-se uma margem de erro que ultrapassa 1%.

Para resolver esse problema foi observado o seguinte:

 A margem de erro do 1º coeficiente não estava muito próxima de 1%, por exemplo, estava em 0,6%. A partir disso, foi inserido um erro no valor do segundo coeficiente pré-armazenado a fim de aproximar a margem de erro do 1º coeficiente para o valor mais próximo de 1%, mas sem ultrapassar essa margem. Este procedimento implica na variação da margem de erro dos coeficientes seguintes. Por exemplo, com a inserção do erro a margem de erro do 1º coeficiente passou a ser de 0,97%. A partir das somas para obtenção dos coeficientes seguintes, devido ao erro de truncamento, o valor do coeficiente gerado vai se tornando menor do que o valor do coeficiente ideal. Em resumo, com esse procedimento a margem de erro do 31º coeficiente até o 33º coeficiente não ultrapassa a margem de erro de 1%, como ocorria anteriormente.

O problema dessa estratégia é que outras inserções de erros acontecerão, pois como foi dito anteriormente a variação da margem de erro se propaga na geração dos coeficientes seguintes, portanto, a inserção do erro deve ser administrada em determinados locais.

4.1.3 Utilização do Algoritmo de Interpolação Linear no Projeto

Neste projeto o algoritmo de interpolação linear foi desenvolvido, de modo que, com apenas um número reduzido de coeficientes fosse possível reconstruir a janela seno de tamanho 256 ou 2048.

Alguns métodos numéricos de interpolação foram apresentados no tópico 2.4.1, mas a definição de qual método utilizar no projeto não foi explicada.

A explicação para tal decisão de projeto é baseada nas restrições do projeto. Algumas das restrições do projeto são:

(45)

 Um coeficiente gerado por interpolação deve ter uma margem de erro menor que 1% quando comparado ao seu correspondente coeficiente ideal do modelo de referência.

 A quantidade de operações realizadas pelo algoritmo de interpolação deve ser a menor possível, pois quanto maior o número de operações maior o tempo de processamento.

 A quantidade de tipos de operações realizadas deve ser a menor possível, por exemplo, um módulo que contém um somador apenas, ocupa uma área menor e gasta menos recursos do que um módulo composto por um somador, um multiplicador e um divisor.

Portanto, através de testes e estudos desenvolvidos percebeu-se que o algoritmo de interpolação linear atende as restrições do projeto, pois as margens de erro entre os coeficientes gerados e os ideais permaneceram menores que 1%. A quantidade de operações e tipos de operações também é menor, reduzindo o gasto com processamento e área.

Na Figura 15 é apresentado um quadro comparativo, analisando a complexidade dos algoritmos de interpolação descritos no tópico 2.4.1.

Figura 15: Quadro comparativo analisando a complexidade dos algoritmos de interpolação (Próprio autor)

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

O módulo Windowing/Block Switching desenvolvido é composto por 3 sub-módulos. O primeiro sub-módulo é o Controlador Geral. O segundo sub-módulo é o Gerador da

(46)

Com os estudos sobre os processos de codificação e decodificação, o módulo

Windowing/Block Switching, a representação de números em ponto flutuante e os métodos

numéricos, foram coletadas as especificações e projetos necessários para definir a metodologia de implementação.

Desta forma, a partir das especificações obtidas sobre o funcionamento do módulo

Windowing/Block Switching, bem como suas entradas e saídas, é possível visualizar de

forma geral a modelagem do projeto.

O módulo Windowing/Block Switching pode ser dividido em cinco grandes máquinas de estados, interligadas e funcionando em paralelo. A primeira máquina de estados refere-se ao algoritmo da interpolação linear implementado em linguagem de hardware, Verilog. A segunda máquina de estados refere-se ao somador/subtrador de números em ponto flutuante de 16 bits, também implementado em Verilog, que está interligada a primeira máquina de estados de forma a receber como entrada os coeficientes que deverão ser somados/subtraídos fornecendo um resultado representado por um número binário de 16 bits. A terceira máquina de estados refere-se ao multiplicador de números em ponto flutuante de 16 bits, também implementado em Verilog. Os coeficientes após serem processados pela máquina de estados referente à interpolação, serão multiplicados pelos coeficientes advindos do módulo referente a IMDCT, realizando o processo de janelamento. A quarta máquina de estados refere-se ao controle da escrita dos resultados das operações efetuadas. A quinta máquina de estado funciona como um Controlador Geral, fornecendo sinais de controle, como os sinais

Window_shape e Window_sequence.

Na Figura 16 pode-se visualizar a modelagem do bloco Windowing/Block Switching. Como o número de entradas e saídas dos módulos é grande, por questão de organização na modelagem as mesmas não foram inclusas. O software Quartus foi utilizado para simular a funcionalidade das máquinas de estados e tornar possível a visualização do resultado através dos waveforms, que ajudam a depurar erros provenientes da implementação.

(47)

Figura 16: Máquinas de Estados do módulo Windowing/Block Switching (Próprio autor)

4.2.1 Controlador Geral

O Controlador Geral coordena as principais operações dentro do Módulo

Referências

Documentos relacionados

Com estes elementos conhecidos, o ElumTools obtém as informações necessárias para a renderização do modelo pelo processo de radiosidade (Radiosity), efetuando o cálculo

Situar a participação e controle social na gestão das políticas públicas de saúde através das Leis Orgânicas de Saúde, dos Conselhos Locais, Municipais, Estaduais ou Nacional

No interior da Casa Técnica, será então estabelecido um ramal de distribuição novo para servir o marco de incêndio exterior, os carreteis e as instalações sanitárias do

São formas farmacêuticas sólidas, cilíndricas, friáveis, com peso entre 100 e 300mg, obtidos por moldagem da lactose com auxilio de tableteiros sem adição de adjuvantes

São discutidos também os conceitos de ciência, psicologia e a questão das hierarquias nos motivos humanos, enfatizando-se a necessidade de reconhecer como relevantes, no estudo

Introduction: The aim of this study was to evaluate the effects of cleaning protocols using conventional irrigation (CI), rotary brush with continuous rotary motion

proporcional à intenção da criança, que se deve tratar de descobrir; deve ser ministrada a frio, com calma mas rapidamente. Com efeito, uma criança que espera o

Sousa (2002), ao definir algumas características de ensaios fotográficos, afirma que o fotógrafo dedica-se a ​ um tema para contar uma história. Ele cria o termo