implementação de filtros digitais em lógica · pdf file1...
TRANSCRIPT
CRISTIANO PEGORARO CHENET
IMPLEMENTAÇÃO DE FILTROS DIGITAIS EM LÓGICA
PROGRAMÁVEL NA LINGUAGEM VHDL
CANOAS, 2011
CRISTIANO PEGORARO CHENET
IMPLEMENTAÇÃO DE FILTROS DIGITAIS EM LÓGICA
PROGRAMÁVEL NA LINGUAGEM VHDL
Trabalho de conclusão apresentado ao Curso de Engenharia de Telecomunicações do Centro Universitário La Salle - Unilasalle, como exigência parcial para a obtenção do grau de Bacharel em Engenharia de Telecomunicações.
Orientação: Profº Dr. Tiago Roberto Balen
CANOAS, 2011
RESUMO
As aplicações do processamento digital de sinais estão aumentando rapidamente.
Algumas de elevada velocidade necessitam de implementação por hardware. O
dispositivo de lógica programável geralmente usado para tal é a FPGA (field
programmable gate arrays), que apresenta algumas vantagens, como menor espaço
ocupado na placa, menor consumo de energia, maior confiabilidade, menor
complexidade de desenvolvimento e geralmente menor custo de fabricação. No
Brasil atual faltam profissionais com conhecimento nessa área. Exemplo disso é a
Datacom, maior fabricante brasileira de equipamentos para telecomunicações, que
possui constantemente vagas em aberto para desenvolvedores de lógica
programável. Tendo em vista os elementos citados, esse trabalho constitui-se na
implementação de um filtro digital em lógica programável usando a linguagem VHDL
(VHSIC hardware description language). Partindo da aplicação de filtragem da voz
humana, bastante comum e de utilização em diversos sistemas, aborda o projeto do
filtro digital e a sua implementação em lógica com foco na FPGA EP1C6Q240, da
família Cyclone, da Altera. Os resultados da síntese do código gerado permitem
verificar que os blocos de arranjo lógico (LABs, logic array blocks) e os elementos
lógicos (LEs, logic elements) são parâmetros críticos na definição de recursos
disponíveis em uma FPGA para a gravação de uma lógica programável. Outro
parâmetro importante em um projeto é a máxima freqüência de operação dos
relógios, pois define se o hardware gerado atende à aplicação planejada.
Palavras-chave: Processamento digital de sinais. Filtros digitais. Sistemas digitais.
FPGAs. VHDL.
SUMÁRIO
1 INTRODUÇÃO ................................................................................................. 4
2 TEORIA DE FILTROS DIGITAIS ........................ ............................................. 6
2.1 Filtros FIR ....................................... ................................................................. 6
2.2 Filtros IIR ....................................... .................................................................. 7
2.3 Comparativo entre filtros FIR e IIR ............... ................................................. 9
2.4 Projeto de filtros FIR ............................ ........................................................ 10
2.4.1 Especificação de filtros ............................................................................... 10
2.4.2 Métodos de projeto de filtros ....................................................................... 11
3 APLICAÇÕES DE FILTROS DIGITAIS .................... ..................................... 13
3.1 Área médica: remoção do EMG do sinal de ECG ....... ............................... 13
3.2 Área de instrumentação: eliminação de ruídos em esp ectroscópio........ 17
3.3 Área de comunicações: cancelamento da sombra do sin al de televisão 19
4 IMPLEMENTAÇÃO, .................................... ................................................... 22
4.1 Projeto do filtro digital ......................... ........................................................ 23
4.2 Implementação da lógica programável usando a lingua gem VHDL ........ 27
4.2.1 Representação dos dados e aritmética ....................................................... 30
4.2.2 Conversão de entrada ................................................................................. 34
4.2.3 Conversão de saída .................................................................................... 37
4.2.4 Filtro ............................................................................................................ 39
5 RESULTADOS ........................................ ....................................................... 47
5.1 Revisão dos conceitos de arquitetura de FPGAs ..... ................................. 47
5.2 Características das FPGAs da família Cyclone da Alt era ......................... 50
5.3 Resultados da síntese da lógica implementada ...... .................................. 52
6 CONCLUSÃO ......................................... ....................................................... 55
REFERÊNCIAS ......................................................................................................... 57
APÊNDICE A – CÓDIGO VHDL GERADO NO TRABALHO ....... ............................ 60
4
1 INTRODUÇÃO
O processamento digital de sinais (DSP, digital signal processing) estuda as
regras que definem o comportamento dos sinais que são funções de variáveis
discretas e os sistemas usados para processá-los. Também lida com sinais que são
funções de variáveis contínuas utilizando técnicas digitais (DINIZ, 2004, p. 25). O
modelo básico de um sistema de DSP é constituído de um bloco para conversão do
sinal analógico em digital (ADC, analog to digital converter), um bloco de DSP
propriamente dito e um bloco para conversão do sinal digital em analógico (DAC,
digital to analog converter) (FLOYD, 2007, p. 778), da maneira ilustrada na figura 1.
Figura 1 - Modelo básico de um sistema de DSP Fonte: FLOYD, 2007, p. 778.
Devido às diversas vantagens do DSP, atualmente suas aplicações estão
aumentando rapidamente (MITRA, 2006, p. 39; TOCCI, 2003, p. 551). A principal
delas é a filtragem e condicionamento de sinais analógicos (TOCCI, 2003, p. 549)
através de filtros digitais.
Os filtros digitais são implementados por software, em um processador de
sinais digitais, ou por hardware específico (DINIZ, 2004, p. 22). Filtros que requerem
elevada velocidade exigem implementação por hardware em dispositivos de lógica
programável (TOCCI, 2003, p. 641), o que na maioria das vezes é feito com matrizes
de portas programáveis por campo (FPGAs, field programmable gate arrays). Elas
apresentam algumas vantagens como menor espaço ocupado na placa, menor
consumo de energia, maior confiabilidade, menor complexidade de desenvolvimento
e, geralmente, menor custo de fabricação (TOCCI, 2003, p. 642).
No Brasil, devido à efervescência de seu desenvolvimento industrial nos
últimos anos, faltam profissionais com conhecimento para desenvolver sistemas
baseados em FPGAs e voltados para DSP. A Datacom, maior fabricante brasileira
5
de equipamentos para telecomunicações, possui constantemente vagas em aberto
para profissionais dessa área. Em suma, são desejados profissionais com
conhecimento de sistemas digitais e da linguagem de descrição de hardware de
circuitos integrados de alta velocidade (VHDL, VHSIC hardware description
language) (DATACOM, 2010), uma das linguagens mais utilizadas para descrever
circuitos digitais em FPGAs.
Tendo em vista os elementos citados, esse trabalho constitui-se na
implementação de um filtro digital em lógica programável usando a linguagem
VHDL. Partindo da aplicação de filtragem da voz humana, bastante comum e de
utilização em diversos sistemas, aborda o projeto do filtro digital e a sua
implementação em lógica com foco na FPGA EP1C6Q240, da família Cyclone, da
Altera.
Os resultados do trabalho são definidos em função dos recursos exigidos pela
lógica programável gerada para viabilizar sua síntese e gravação na FPGA focada.
São analisados principalmente parâmetros relacionados à arquitetura das FPGAs,
como blocos de arranjo lógico (LABs, logic array blocks), elementos lógicos (LEs,
logic elements), tabelas de busca (LUTs, look up tables), blocos e bits de memória e
freqüência máxima de operação.
De forma a registrar o trabalho realizado, esse documento está organizado da
seguinte forma: na seção 2 é discutida a teoria de filtros digitais com foco nas
melhores soluções para seu projeto. A seção 3 estuda algumas aplicações para
filtros digitais. Na seção 4 é apresentada a solução gerada, que abrange o projeto do
filtro e a sua implementação em lógica programável. A seção 5 mostra e analisa os
resultados obtidos.
6
2 TEORIA DE FILTROS DIGITAIS
Os filtros digitais são usados para modificar as características de um sinal no
domínio do tempo ou da freqüência. Os mais comuns são os filtros lineares e
invariantes no tempo (LTI, linear time invariant). Um LTI interage com o sinal de
entrada através de uma convolução linear (MEYER, 2007, p. 165), denotada por y =
f × x onde f é a resposta do filtro ao impulso, x é o sinal de entrada e y o sinal de
saída. A convolução linear é definida em (1), na qual n é o número inteiro que
identifica o sinal e k o número inteiro que identifica o seu deslocamento.
���� � ���� � ���� � ������ � ��
� ������ � ��
(1)
Os filtros digitais LTI são classificados em resposta ao impulso finita (FIR, finite
impulse response) e resposta ao impulso infinita (IIR, infinite impulse response).
Filtros FIR são baseados em finitos números de valores amostrados, reduzindo as
somas da convolução linear à finitas somas por amostra de saída. Já os filtros IIR
requerem que infinitas somas sejam realizadas (MEYER, 2007, p. 165).
Nesta seção é revisada a teoria de ambas as classificações de filtros,
estabelecido um comparativo entre elas e discutido o projeto desses filtros, desde a
especificação até a metodologia utilizada.,
2.1 Filtros FIR
A transformada z é uma generalização da transformada de Fourier de tempo
discreto, ambas ferramentas matemáticas utilizadas para transformar a
representação no domínio do tempo de uma função discreta no tempo para a sua
representação no domínio da freqüência. Conforme o próprio nome indica, ela é
definida em função da variável complexa z, que no tempo pode ser interpretada
como um retardo. Essa transformada é usada para explicar o conceito de filtragem
digital, pois este processo consiste justamente em receber um sinal discreto no
7
tempo e processá-lo de maneira a ajustar suas características no domínio da
freqüência. Assim, um filtro FIR tem a função sistema dada pelo polinômio em z-1 de
(2) (HAYES, 2006, p. 318).
���� � ��������
��� (2)
No domínio do tempo, para uma entrada x(n), a saída é dada conforme (3).
���� � ������ � ��
��� (3)
Existem diversas estruturas para a implementação de filtros FIR a partir de (3),
como, por exemplo, as estruturas direta, em cascata e treliça. Conforme o nome
indica, a estrutura direta é a interpretação mais simples que descende de (3) e,
portanto, é a abordada nesse trabalho. Ilustrada na figura 2, ela exige (N+1)
multiplicações, N somas e N retardos (HAYES, 2006, p. 318).
Figura 2 - Um filtro FIR implementado na estrutura direta Fonte: HAYES, 2006, p. 318.
2.2 Filtros IIR
Um filtro IIR tem a função sistema dada por (4).
8
���� � �������� � ∑ �������
���1 � ∑ �������
��� (4)
A entrada x(n) e a saída y(n) relacionam-se pela equação de diferenças
lineares com coeficientes constantes conforme (5) (HAYES, 2006, p. 321).
���� � ������ � � � ������ � ��
���
�
��� (5)
Da mesma forma que para os filtros FIR, também existem diversas estruturas
que implementam filtros IIR, nesse caso a partir de (5). A maneira mais comum é
chamada de estrutura direta I e é mostrada na figura 3. Ela exige por amostra de
saída (p+q+1) multiplicações e (p+q) somas e retardos.
Figura 3 - Implementação de um filtro IIR pela forma direta I Fonte: HAYES, 2006, p. 322.
A equação (5) pode ser reescrita como um par de equações de diferenças,
como mostrado em (6). É interessante notar que a primeira equação é um filtro FIR
de entrada x(n) e saída w(n) e a segunda é um filtro só de pólos de entrada w(n) e
saída y(n). Esse par de equações forma uma cascata de dois sistemas, visualmente
perceptíveis na figura 3.
9
��� � ������ � �
�
���
���� � ��� � ������ � ��
���
(6)
2.3 Comparativo entre filtros FIR e IIR
Os filtros FIR e IIR podem ser comparados a partir dos seguintes aspectos
(KUO, 2005, p. 305 - 378):
a) fase: filtros FIR podem ter resposta linear nesse aspecto, resultando em
atraso constante e sem distorções de fase. De modo contrário, os filtros IIR
têm resposta não-linear, conseqüentemente tendo resultado com atraso
variável e com distorções de fase;
b) estabilidade: filtros FIR são sempre estáveis pois não são recursivos. De
forma oposta, como os filtros IIR são recursivos, faz-se necessário um
projeto cuidadoso para garantir que estes sejam estáveis;
c) erros de precisão: filtros FIR são pouco sensíveis à quantização dos
coeficientes e ruídos de arredondamento. Ao contrário, filtros IIR são muito
sensíveis a esses parâmetros e, portanto, apresentam erros de precisão
maiores;
d) eficiência na implementação: nesse parâmetro os filtros IIR apresentam
relativa vantagem pois podem ser implementados com menor ordem para
obter o mesmo desempenho de um filtro FIR. Porém, embora com mais
hardware, os filtros FIR são mais simples de serem implementados. A razão
para isso é apresentada na seção 2.2, na qual é mencionado que um filtro
IIR em estrutura direta I é composto por uma cascata de dois sistemas: um
filtro FIR e um filtro só de pólos;
e) resposta em freqüência: os filtros IIR produzem resposta em freqüência mais
precisa em comparação aos filtros FIR devido à contribuição dos pólos
10
existentes nos filtros IIR.
Percebe-se que ambos os filtros apresentam vantagens e desvantagens, de
forma que idealmente algumas aplicações requerem implementação através de
filtros FIR e outras através de filtros IIR. Porém, na prática verifica-se que os filtros
FIR são consideráveis vezes mais utilizados e discutidos, principalmente em função
de suas características já mencionadas de fase linear, estabilidade e facilidade de
implementação. Assim, diante dessa constatação, esse trabalho limita-se a trabalhar
a implementação de um filtro FIR.
2.4 Projeto de filtros FIR
Projetar e implementar um filtro digital envolve diversas etapas. Inicialmente
devem ser feitas as especificações, que podem incluir restrições de magnitude e/ou
de fase para a resposta em freqüência, restrições da resposta do filtro à amostra
unitária ou ao degrau e especificações da ordem e tipo do filtro. O passo seguinte é
encontrar um conjunto de coeficientes de filtro que produza um filtro aceitável e
escolher uma estrutura apropriada. O último passo é implementar o sistema em
hardware ou software (HAYES, 2006, p. 391).
Na seção 2.1 foi apresentada a estrutura direta, a interpretação mais simples
que descende do conceito de filtros FIR. Nesta seção são apresentadas as
especificações necessárias a um projeto de filtros e os métodos para encontrar o
conjunto de coeficientes que produza o filtro desejado.
2.4.1 Especificação de filtros
Supondo o projeto de um filtro passa-baixa com uma freqüência de corte ωc, a
resposta Hd à freqüência ω é dada por (7), na qual a fase é representada por α.
11
�!"#$%& � '#�$(% , |+| , +-0, +- / |+| , 01 (7)
O filtro mostrado em (7) é não causal e instável, portanto não é realizável.
Assim, é necessário relaxar as restrições ideais em relação à resposta em
freqüência e permitir algum desvio da resposta ideal. As especificações para um
filtro passa-baixa terão tipicamente a forma mostrada em (8) (HAYES, 2006, p. 391).
1 � δ3 / |�"e56&| , 1 � δ3, 0 , |+| / +�
|H"e56&| , δ8, +9 , |+| / 0 (8)
A equação (8) é ilustrada na figura 4. Assim, as especificações do filtro incluem
a freqüência de corte ωp da faixa de passagem, a freqüência de corte ωs da faixa de
rejeição, o desvio da faixa de passagem δp e o desvio da faixa de rejeição δs. Os
desvios das faixas de passagem e de rejeição são geralmente dados em decibels e
o intervalo [ωp, ωs] é chamado de faixa de transição.
Figura 4 - Especificações de um filtro passa-baixa Fonte: HAYES, 2006, p. 392.
Definidas as especificações, o passo seguinte consiste em calcular os
coeficientes utilizando algum método de projeto de filtros.
2.4.2 Métodos de projeto de filtros
Existem diversos métodos de projeto de filtros FIR, como exemplo por janelas,
12
equiripple, amostragem de freqüência, fase mínima e Parks-McClellan (HAYES,
2006), (MITRA, 2006) e (OPPENHEIM, 1999). Os mais comuns abordados pela
teoria são o por janelas e equiripple. Nesse trabalho não é abordada a teoria destes
métodos, pois ela está bem explicada na literatura mencionada. Além disso,
atualmente existem diversos softwares que executam os cálculos conforme diversos
métodos, bastando ao projetista certificar-se de qual método mais o convém.
O interessante é notar que o método por janelas apresenta características que
resultam em um filtro menos robusto que um filtro projetado pelo método equiripple.
São elas:
a) os parâmetros δp e δs não podem ser controlados independentemente,
sendo aproximadamente iguais. Portanto é necessário superdimensionar o
filtro na faixa de passagem para satisfazer as especificações mais estritas
da faixa de rejeição (HAYES, 2006, p. 396);
b) para a maioria das janelas o ripple não é uniforme nem na faixa de
passagem nem na de rejeição, e geralmente diminui quando nos afastamos
da faixa de transição. Concedendo que o ripple seja distribuído
uniformemente por toda a faixa, um ripple de pico menor será produzido
(HAYES, 2006, p. 396);
c) não é possível especificar a faixa de transição delimitada pelo intervalo [ωp,
ωs]. Especifica-se apenas a freqüência de corte ωc, e nesse caso é possível
existir uma faixa de passagem e uma faixa de rejeição com valores que não
podem ser aproveitados, devido a seus ganhos já não estarem valendo um
ou zero (BARROS, 2006, p. 20).
Dado que o método equiripple não apresenta essas características
desvantajosas do método por janelas, esse trabalho utiliza o método equiripple para
o projeto do filtro implementado.
13
3 APLICAÇÕES DE FILTROS DIGITAIS
O processamento digital de sinais (DSP, digital signal processing) ganhou
popularidade nos anos de 1960 com a introdução da tecnologia digital. Ela
possibilitou o processamento de sinais em hardware ganhar velocidade, facilidade
de uso e tornar-se mais barato e disponível (KUO, 2005, p. 1). Atualmente a
principal aplicação do DSP é na filtragem e condicionamento de sinais analógicos
(TOCCI, 2003, p. 549). Assim, filtros digitais são aplicados em diversas áreas, como
telecomunicações, análise e processamento de sinais biomédicos e processamento
de voz, áudio e vídeo.
Nessa seção são apresentadas três aplicações de filtros digitais. Na área
biomédica, Chand (2010) propôs a implementação em uma matriz de portas
programáveis por campo (FPGA, field programmable gate array) de um filtro passa-
baixa FIR rápido para a remoção do eletromiograma (EMG) do sinal de
eletrocardiograma (ECG). Para instrumentação, Messai, Nour e Abdellani (2009)
projetaram e implementaram um conjunto de filtros digitais FIR e IIR para a
eliminação de ruídos em espectroscópios de raios gama. Na área de comunicações,
Pora e Siriluangtong (2002) projetaram e implementaram um sistema com filtro FIR
baseado em FPGA, destinado ao cancelamento do efeito de sombra do sinal de
radiodifusão de televisão codificado em linha de fase alternante (PAL, phase
alternating line).
3.1 Área médica: remoção do EMG do sinal de ECG
As condições físicas do coração são diagnosticadas com a ajuda do sinal de
ECG. Esse sinal é a representação das atividades elétricas do coração. Na figura 5
é mostrado o traço típico do sinal de ECG e na figura 6 um período da forma de
onda, o qual representa um ciclo da transferência do sangue do coração para as
artérias. O sinal de ECG é composto por várias ondas, como por exemplo onda Q,
onda R e onda S, conforme pode ser visto na figura 6. Cada uma fornece vários
tipos de informação para a análise da condição do coração de um paciente
14
(SHACKIL apud MITRA, 2006, p. 13).
Figura 5 - Traço típico do sinal de ECG Fonte: MITRA, 2006, p. 13.
Figura 6 - Um período da forma de onda do ECG Fonte: MITRA, 2006, p. 13.
A saúde do coração é diagnosticada em termos da variabilidade da freqüência
cardíaca (HRV, heart rate variability) (CHATLAPALLI apud CHAND, 2010). Ela é
definida como o intervalo de tempo entre duas ondas R, as quais representam o pico
do chamado complexo QRS.
O sinal de ECG original contém vários tipos de ruído, como ruído de contato
dos eletrodos, ruído proveniente da alimentação do equipamento e ruído da
contração dos músculos, os quais podem gerar uma detecção incoerente do
complexo QRS. Portanto são necessários filtros para retirar esses ruídos e aumentar
a sensibilidade de detecção.
A implementação proposta por Chand (2010) tem o objetivo de remover o ruído
gerado pela contração dos músculos, que também é chamado de EMG. Existem
diversas abordagens em software para a detecção das ondas R, porém para
resolver o problema da baixa velocidade delas a proposta é baseada em uma
implementação em hardware, através de FPGAs.
O filtro projetado é do tipo FIR com estrutura direta, exatamente como
mostrado na seção 2.1. Pelos mesmos motivos apresentados em 2.4.2, o método de
15
projeto do filtro utilizado foi o equiripple, realizando os cálculos dos coeficientes
através da ferramenta de projeto e análise de filtros (FDA Tool, Filter Design and
Analysis Tool) do Matlab.
O filtro foi especificado com a freqüência de corte ωp da faixa de passagem
igual a 35 Hz, a freqüência de corte ωs da faixa de rejeição igual a 45 Hz, desvio da
faixa de passagem δp igual a 1,925 dB, desvio da faixa de rejeição δs igual a 48,25
dB e freqüência de amostragem igual a 256 Hz. O resultado é um filtro com 37
coeficientes, cuja resposta em freqüência é mostrada na figura 7.
Figura 7 - Filtro projetado para a remoção do EMG do sinal de ECG Fonte: CHAND, 2010.
Para quantizar os coeficientes do filtro foi adotada a notação de ponto fixo
Q16.14. Essa notação, conhecida por ter sido adotada pela Texas Instruments,
segue o formato genérico Qm.n, em que m é o número de bits utilizado para
representar a parte inteira do número e n o número de bits para representar a parte
fracional. Além desses é necessário um bit adicional para representar o sinal,
portanto o número representado nessa notação é composto por m + n + 1 bits. Eles
são organizados da seguinte forma: o bit mais significante (MSB, most significant bit)
representa o sinal; após, são escritos os m bits e, por fim, até o bit menos
significativo (LSB, least significant bit), são escritos os n bits.
A arquitetura implementada em lógica foi chamada de árvore de somadores
ramificados e está ilustrada na figura 8. A vantagem dela é que as somas podem ser
realizadas em paralelo, reduzindo assim o atraso do filtro.
16
Figura 8 - Arquitetura lógica para o filtro de remoção do EMG do sinal de ECG Fonte: CHAND, 2010.
Nas figuras 9 e 10 estão mostradas simulações realizadas com o filtro
implementado. A figura 9 ilustra um sinal de entrada e a figura 10 o sinal filtrado.
Pode-se observar neste último um sinal de ECG nítido, ausente de ruído.
Figura 9 - Sinal de entrada do filtro proposto por Chand (2010) Fonte: CHAND, 2010.
17
Figura 10 - Sinal filtrado pela implementação de Chand (2010) Fonte: CHAND, 2010.
3.2 Área de instrumentação: eliminação de ruídos em espectroscópio
A radiação gama é um tipo de radiação eletromagnética produzida por
elementos radioativos, processos subatômicos e fenômenos astrofísicos. Para a
avaliação do espectro da radiação gama é utilizado o espectroscópio de raios gama,
dispositivo que através do método de absorção correlaciona a quantidade de energia
absorvida em função do comprimento de onda da radiação incidente.
Equipamentos de medida usados em espectroscopia nuclear são
particularmente sensíveis à relação sinal ruído (SNR, signal to noise rate), fator
determinante para garantir a ótima qualidade da medida (GATTI; MANFREDI apud
MESSAI; NOUR; ABDELLANI, 2009). Uma das principais causas desses erros de
medida é o ruído eletrônico inserido pelo próprio equipamento, especialmente
quando o sinal medido é relativamente baixo. Também contribuem para erros
flutuações do nível de corrente direta (DC, direct current), efeitos do acúmulo de
pulsos, distúrbios eletromagnéticos na fonte de alimentação e instabilidades
térmicas (NICHOLSON apud MESSAI; NOUR; ABDELLANI, 2009). Com a
introdução, nos últimos anos, das técnicas de DSP no campo da espectroscopia
nuclear de raios gama, todas essas fontes de erro podem ser eliminadas ao mesmo
tempo. O processamento digital do sinal proveniente do espectroscópio permite a
síntese de qualquer função de ponderação. Essa função é implementada com filtros
18
digitais próximos aos teoricamente conhecidos como ideais (GATTI apud MESSAI;
NOUR; ABDELLANI, 2009).
Na figura 11 é apresentada a arquitetura típica de um espectroscópio digital de
raios gama. O sinal detectado pelo transdutor passa por um pré-amplificador, por um
filtro anti-aliasing e por um conversor analógico digital (ADC, analog to digital
converter). As amostras geradas são tratadas em um estágio de processamento
digital, implementado em DSP ou FPGA, e o resultado é mostrado em um monitor. O
trabalho de Messai, Nour e Abdellani (2009) consiste no projeto e implementação de
um conjunto de filtros FIR e IIR a serem adicionados no estágio de processamento
digital, com o objetivo de eliminar as fontes de erro.
Figura 11 - Arquitetura típica de um espectroscópio digital de raios gama Fonte: MESSAI; NOUR; ABDELLANI, 2009.
O conjunto de filtros projetados é organizado conforme mostrado na figura 12.
O sinal proveniente do ADC é condicionado a um filtro IIR, cuja saída está ligada à
entrada de dois filtros FIR. O filtro IIR é chamado de pole-zero cancelattion e tem a
função de eliminar o longo decaimento exponencial de cada amostra no tempo,
efeito gerado no pré-amplificador. O filtro FIR para baseline measurements é
destinado a eliminar instabilidades e flutuações que ocorrem lentamente ao longo do
tempo devido a variações térmicas. O segundo filtro FIR, para energy measurement,
é destinado à estimação da energia dos pulsos (MESSAI; NOUR; ABDELLANI,
2009).
19
Figura 12 - Organização dos filtros projetados para espectroscópios digitais Fonte: MESSAI; NOUR; ABDELLANI, 2009.
A implementação da proposta foi feita separadamente em uma placa que
contém um DSP. Os três filtros seguiram a estrutura de filtros direta.
3.3 Área de comunicações: cancelamento da sombra do sinal de televisão
O trabalho desenvolvido por Pora e Siriluangtong (2002) destina-se a cancelar
o efeito de sombra do sinal de televisão PAL. Este é o sistema usado atualmente em
grande parte dos países para a codificação da cor no sinal de vídeo transmitido via
radiodifusão analógica. Embora a radiodifusão analógica esteja sendo gradualmente
substituída pela digital, esta é uma aplicação interessante para mostrar como filtros
digitais são úteis na área de comunicações.
Em algumas situações não desejadas, a propagação do sinal de televisão via
radiodifusão ocorre por diversos caminhos. Isso faz com que um mesmo quadro da
imagem chegue ao receptor diversas vezes em instantes de tempo diferentes e com
potência variável. O resultado disso é conhecido como sombra, efeito que gera uma
espécie de sombra na imagem retratada.
A sombra pode ser removida com a ajuda do sinal de referência para
cancelamento da sombra (GCR, ghost cancellation reference), sinal que é
transmitido juntamente com vídeo durante o intervalo de inibição vertical. Como o
GCR recebe a mesma distorção do sinal de vídeo, a idéia é que o receptor possa
estimar a resposta do canal com base no sinal GCR recebido e aplicar uma
equalização no vídeo para que a sombra seja removida. A figura 13 mostra o padrão
GCR-C com polaridade positiva da International Telecommunication Union (ITU)
20
adotado no projeto de Pora e Siriluangtong (2002). Consiste em um sinal senoidal
cuja freqüência aumenta gradativamente.
Figura 13 - Padrão GCR-C com polaridade positiva Fonte: Pora; Siriluangtong, 2002.
Nos Estados Unidos, o GCR passou a ser transmitido via radiodifusão em
1993, acontecendo o mesmo na Europa (Pao; Khoo; Willson, 1997). Porém os
sistemas de cancelamento da sombra nunca se popularizaram, devido ao elevado
custo do processador de sinais de alto desempenho necessário. Assim a proposta
de Pora e Siriluangtong (2002) é o projeto de um sistema de cancelamento de
sombra possível de ser adaptado em televisores para usuários domésticos.
Na figura 14 é representado o sistema proposto. Os blocos do mesmo são
implementados em um separador do sinal de sincronismo, um ADC, um conversor
digital analógico (DAC, digital to analog converter), um DSP e uma FPGA.
Figura 14 - Estrutura do sistema de cancelamento de sombra proposto Fonte: Pora; Siriluangtong, 2002.
21
O separador do sinal de sincronismo separa o sincronismo do sinal de vídeo
composto e é implementado através do circuito integrado LM1881. O ADC utiliza o
circuito integrado THS1031, o qual tem resolução de 8 bits e foi configurado para
obter 12 × 106 amostras/s. O separador do sinal GCR, feito na FPGA, utiliza o sinal
de sincronismo e o sinal de vídeo digitalizado para extrair o GCR e armazená-lo em
um buffer first-in-first-out (FIFO). Baseado no efeito do canal sobre o sinal GCR
separado, o DSP calcula parâmetros otimizados para ajuste do filtro FIR. O DAC da
saída do sistema, implementado através do circuito integrado THS5641, converte 8
bits novamente em sinal de vídeo analógico.
O filtro FIR precisa ter um tamanho que compreenda o atraso dos quadros de
vídeo que geram o efeito de sombra, resultando em um filtro de tamanho a ponto de
precisar de diversos DSPs para executar a tarefa (PORA; SIRILUANGTONG, 2002).
Por exemplo, para implementar um filtro com 256 coeficientes trabalhando com 12 ×
106 amostras/s, seriam necessários 20 DSPs do tipo TMS320C6211, algo inviável.
Dessa situação surge a necessidade de implementação do filtro em FPGAs.
Para implementar o filtro de tamanho elevado necessário com reduzido custo
de hardware, Pora e Siriluangtong (2002) utilizam um conceito de compartilhamento
de recursos, no qual os processos de soma e multiplicação provenientes de cada
coeficiente do filtro são executados em instantes de tempo diferentes, um a um. Ou
seja, utilizam uma arquitetura que pode ser chamada de serial. O resultado disso
pode ser apreciado no quadro 1.
Quadro 1 - Resultado da arquitetura usada por Pora e Siriluangtong (2002) Fonte: Pora; Siriluangtong, 2002.
Do quadro 1 observamos que o conceito de compartilhamento de recursos traz
uma redução significativa dos recursos de hardware necessários, a um custo de
relógios com freqüência mais elevada e redução da freqüência do dado filtrado.
4 IMPLEMENTAÇÃO
O som da voz humana não é
freqüências elevadas tendem a ser fortemente atenuadas. Como exemplo, na fig
15 é mostrado o espectro de freqüência
que freqüências acima de
relação à potência mais elevada
devido à relação entre banda e custo econômico dos canais de comunicação,
padronizou-se a transmissão da voz humana com uma banda de
o que garante 85 % de inteligibilidade e
ouvinte (PINHEIRO, 2011, p. 22).
Figura 15 -
Diante dessa característica ilimitada do espectro de freqüências do som da voz
humana, em grande parte dos casos em que se deseja transmití
comunicação, o primeiro processo a ser feito é filtrar esse sinal com um filtro passa
baixa com freqüência de corte de
ser necessário utilizar este filtro, de modo a eliminar ruídos em freqüências acima da
voz.
Nesse contexto entra a implementação a que esse trabalho se propõe. Foi
escolhida pois é uma aplica
diversas outras aplicações. Assim, conforme já dado a entender, os requisitos
básicos da implementação são um filtro passa
faixa de passagem de
IMPLEMENTAÇÃO ,
voz humana não é inerentemente limitado em banda,
freqüências elevadas tendem a ser fortemente atenuadas. Como exemplo, na fig
é mostrado o espectro de freqüências para as vogais a e u, na qual observa
que freqüências acima de 4 kHz possuem uma atenuação maior do que
relação à potência mais elevada (RABINER; SCHAFER, 1978, p. 173
devido à relação entre banda e custo econômico dos canais de comunicação,
se a transmissão da voz humana com uma banda de
de inteligibilidade e 68 % de energia da voz recebida pelo
PINHEIRO, 2011, p. 22).
Espectro de freqüências das vogais a e Fonte: RABINER; SCHAFER, 1978, p. 174.
Diante dessa característica ilimitada do espectro de freqüências do som da voz
humana, em grande parte dos casos em que se deseja transmití
comunicação, o primeiro processo a ser feito é filtrar esse sinal com um filtro passa
qüência de corte de 3,4 kHz. Além disso, na recepção pode também
ser necessário utilizar este filtro, de modo a eliminar ruídos em freqüências acima da
Nesse contexto entra a implementação a que esse trabalho se propõe. Foi
escolhida pois é uma aplicação bastante comum e que pode ser utilizada em
aplicações. Assim, conforme já dado a entender, os requisitos
básicos da implementação são um filtro passa-baixa com freqüência de corte
de 3,4 kHz. Diretamente desse contexto surge também uma
22
inerentemente limitado em banda, mas as
freqüências elevadas tendem a ser fortemente atenuadas. Como exemplo, na figura
, na qual observa-se
uma atenuação maior do que 40 dB em
8, p. 173 - 174). Assim,
devido à relação entre banda e custo econômico dos canais de comunicação,
se a transmissão da voz humana com uma banda de 300 Hz a 3,4 kHz,
de energia da voz recebida pelo
e u
Diante dessa característica ilimitada do espectro de freqüências do som da voz
humana, em grande parte dos casos em que se deseja transmití-la por canais de
comunicação, o primeiro processo a ser feito é filtrar esse sinal com um filtro passa-
. Além disso, na recepção pode também
ser necessário utilizar este filtro, de modo a eliminar ruídos em freqüências acima da
Nesse contexto entra a implementação a que esse trabalho se propõe. Foi
ção bastante comum e que pode ser utilizada em
aplicações. Assim, conforme já dado a entender, os requisitos
freqüência de corte ωp da
ntexto surge também uma
23
especificação já relacionada à parte da filtragem digital, que é a freqüência de
amostragem do sinal analógico. Baseado no Teorema de Nyquist, que define que
essa freqüência deve ser de pelo menos duas vezes a freqüência máxima da banda
do sinal amostrado, a freqüência de amostragem da implementação deve ser de
pelo menos 6,8 kHz. Porém definiu-se para a construção desse trabalho uma
sobreamostragem com freqüência de 34 kHz, de maneira a recuperar com qualidade
o sinal no momento da reconstituição.
A seção 4.1 a seguir mostra o projeto do filtro digital. Na seção 4.2 é detalhada
a implementação desse filtro em lógica programável usando a linguagem de
descrição de hardware de circuitos integrados de alta velocidade (VHDL, VHSIC
hardware description language). O código gerado encontra-se na íntegra no
apêndice A.
4.1 Projeto do filtro digital
Conforme comentado na seção 2.4, projetar um filtro digital envolve
basicamente fazer as especificações e com base nelas calcular os coeficientes do
filtro. No quadro 2 estão resumidas todas as especificações do filtro adotadas nesse
trabalho.
Quadro 2 - Especificações do filtro adotadas neste trabalho Fonte: Autoria própria, 2011.
Na seção 2.3 estão explicados os motivos para a escolha do filtro tipo FIR, na
24
seção 2.1 o fator que justifica a implementação pela estrutura direta e na seção 2.4.2
os motivos para a escolha do método de projeto equiripple. As freqüências de corte
são basicamente definidas pela aplicação e portanto estão explicadas no início da
seção 4. É intuitivo perceber que o desvio da faixa de passagem δp ótimo tende à
zero, porém para não gerar um filtro de tamanho desnecessário este parâmetro foi
adotado como 1 dB. Já o desvio da faixa de rejeição δs ótimo tende a infinito, porém
também para não gerar um filtro de tamanho desnecessário esse parâmetro foi
adotado como 40 dB, que corresponde a uma atenuação de 10 × 104 vezes.
Feitas as especificações do filtro digital, assim como na aplicação mostrada na
seção 3.1 e em muito outros projetos, o projeto do filtro foi realizado com a
ferramenta FDA Tool do Matlab (THE MATHWORKS, 2009). Na figura 16 são
mostradas as especificações inseridas no FDA Tool.
Figura 16 - Especificações inseridas no FDA Tool para projeto do filtro Fonte: Autoria própria, 2011.
Analisando a figura 16 verifica-se que o único parâmetro especificado no FDA
25
Tool que não consta no quadro 2 é o fator de densidade (density factor). Ele controla
a resolução em freqüência do filtro. Aumentando seu valor aproxima-se o filtro de um
filtro ideal, o que também aumenta o número de coeficientes (THE MATHWORKS,
2011). Seguindo a idéia já adotada, para não gerar um filtro de tamanho
desnecessário, foi mantido o fator de densidade padrão sugerido pela ferramenta,
que é de 20. Concluída a especificação utiliza-se o botão design filter para que o
software faça os cálculos necessários. Em seguida um conjunto de informações
completas a respeito do filtro projetado é fornecido.
A figura 17 mostra o relatório com informações gerais a respeito do filtro.
Observa-se que ele é estável, tem fase linear conforme esperado e é feito com 82
coeficientes.
Figura 17 - Relatório com informações gerais a respeito do filtro projetado Fonte: Autoria própria, 2011.
No quadro 3 estão os 82 coeficientes gerados, referenciados no formato
decimal. Na seqüência da implementação, serão armazenados na FPGA para
computação do filtro.
26
Quadro 3 - Coeficientes no formato decimal do filtro projetado Fonte: Autoria própria, 2011.
27
A figura 18 mostra a resposta em freqüência do filtro projetado. Observa-se que
ela atende rigorosamente a especificação inserida no FDA Tool. Também é
interessante observar que, conforme a característica dos filtros projetados através
do método equiripple mostrado na seção 2.4.2, o ripple nas faixas de passagem e de
rejeição é constante.
Figura 18 - Resposta em freqüência do filtro projetado Fonte: Autoria própria, 2011.
4.2 Implementação da lógica programável usando a li nguagem VHDL
Da mesma forma que o projeto do filtro, sua implementação no hardware digital
também envolve algumas especificações. Assim, no quadro 4 constam as
especificações utilizadas como referência para a implementação da lógica
programável usando a linguagem VHDL.
Quadro 4 - Especificações para a implementação da lógica programável Fonte: Autoria própria, 2011.
28
Conforme comentado no início da seção 4, foi especificada a freqüência de
processamento da voz amostrada como 34 kHz para recuperar com qualidade o
sinal no momento da reconstituição. Também por esse motivo, optou-se por
trabalhar com uma resolução de 16 bits para a voz quantizada. A FPGA adotada
como referência para a implementação foi a de referência EP1C6Q240, família
Cyclone, da fabricante Altera, pois esse é o componente montado na placa de
desenvolvimento existente no Centro Universitário La Salle, chamada de UP3
Educational Kit. Visando um trabalho futuro, a lógica gerada nessa implementação
pode ser gravada nessa FPGA para a realização de testes. Por fim, também
importante para a especificação da implementação, os relógios disponíveis na placa
de desenvolvimento para a FPGA mostrados no quadro 4 são de conhecimento
necessário, pois delimitam a arquitetura lógica do filtro para executar a aplicação.
Informações referentes à placa de desenvolvimento foram extraídas de (SYSTEM
LEVEL SOLUTIONS, 2007).
De posse das especificações do quadro 4 foi iniciada a implementação. Assim,
ela partiu pela definição de como os dados seriam representados no sistema digital,
como seriam realizadas as operações de multiplicação e soma aritmética e como
isso seria realizado na linguagem VHDL. Para entender como surge essa discussão
é necessário dar-se conta de que nos sistema digitais os números são
representados através de bits agrupados e que na implementação em questão é
necessário trabalhar com números reais, como mostrado no quadro 3, onde estão os
coeficientes do filtro projetado. Portanto deve-se pensar em um sistema que
represente e distingua o sinal do número, a parte inteira e a parte decimal. Conforme
é detalhado na seção 4.2.1, nesse trabalho foi adotada a notação de ponto flutuante
simples, que é definida na norma IEEE 754-1985 (INSTITUTE OF ELECTRICAL
AND ELECTRONICS ENGINEERS, 1985). Ela especifica como representar um
número real através de 32 bits.
Nas especificações para a implementação da lógica programável do quadro 4,
foi definido trabalhar com a voz quantizada com 16 bits. Assim, antes de realizar o
processamento para a filtragem digital é necessário converter os 16 bits binários
representativos da voz e disponibilizados à lógica programável para a notação de
ponto flutuante simples. O inverso ocorre na saída gerada, ou seja, existe a
necessidade de converter o resultado na notação de ponto flutuante simples para 16
bits binários, de modo a disponibilizar o resultado do filtro a um DAC para a
29
reconstituição do sinal. Assim, podemos organizar a lógica programável em três
blocos principais, conforme ilustrado na figura 19.
Figura 19 - Três blocos principais da lógica programável implementada Fonte: Autoria própria, 2011.
Na seção 4.2.2 é detalhada a implementação do bloco de conversão de
entrada. A implementação do bloco de conversão de saída é detalhada na seção
4.2.3. Para facilitar o detalhamento da implementação do filtro propriamente dito, em
função dos diversos processos realizados nesse bloco, como multiplicações e
somas, ele foi dividido em três sub-blocos, conforme mostrado na figura 20.
Figura 20 - Três sub-blocos para detalhamento do bloco de filtragem Fonte: Autoria própria, 2011.
A maneira como foi implementado o armazenamento dos coeficientes e das
amostras encontra-se explicada na seção 4.2.4.1. Na seção 4.2.4.2 está detalhada a
arquitetura utilizada para implementar o filtro. Uma discussão sobre os relógios
30
utilizados e os sinais de controle seqüencial da lógica é apresentada na seção
4.2.4.3.
4.2.1 Representação dos dados e aritmética
A representação e manipulação eficiente dos números reais são necessárias
em muitos campos da ciência, engenharia e finanças. Desde o início da computação
eletrônica, diferentes formas de representação de números reais têm sido
estudadas. Porém, a notação em ponto flutuante é a mais amplamente utilizada na
computação moderna. Simular uma precisão infinita com a precisão das máquinas
não é uma tarefa fácil, deve-se encontrar um ponto ótimo entre velocidade, precisão,
facilidade de uso e implementação e custo de armazenamento. Assim, a notação de
ponto flutuante com parâmetros adequadamente escolhidos é uma solução muito
boa para essa tarefa (MULLER, 2009, p. 3).
A notação em ponto flutuante é definida na norma IEEE 754-1985, mas se
desejado for, pode ser implementada de forma proprietária. Mesmo a norma
estabelece diferentes precisões, sendo as principais a que utiliza 32 bits para
representar um número, chamada de precisão simples, e a que utiliza 64 bits para
representar um número, chamada de precisão dupla. A precisão simples pode
representar números numa faixa de 1,18 × 10-38 a 3,4 × 1038 com precisão de 2-23.
Mesmo sendo a de menor precisão, essa representação que utiliza 32 bits mostra-se
interessante pois já oferece uma precisão aceitável para muitas aplicações sem
gerar um custo computacional muito elevado. Devido a essas características, foi a
solução adotada nesse trabalho.
Um número x é expresso na notação em ponto flutuante com precisão simples,
conforme mostrado em (9) (KUO, 2005, p. 99 - 100). Ele consiste em um bit de sinal
S, 8 bits de expoente exp e 23 bits de mantissa man. O bit S é zero para números
positivos e um para números negativos. O expoente exp é quem implementa o ponto
flutuante, sendo compensado por fator 127 para permitir o deslocamento do ponto
para a esquerda, para representar a parte fracionária, e para a direita, para
representar a parte inteira.
31
� � �19 : 2�<=���>?� : 1. A�� (9)
Os bits que compõem S, exp e man são organizados conforme mostrado na
figura 21. Assim, S é o bit de número 31, exp compreende os bits de número 30 a 23
e man os bits de número 22 a 0.
Figura 21 - IEEE 754-1985 precisão simples Fonte: Kuo, 2005, p. 100.
Na figura 22 são apresentados dois exemplos de números representados
segundo a norma IEEE 754-1985 com precisão simples.
Figura 22 - Exemplos de números segundo IEEE 754-1985 precisão simples Fonte: Autoria própria, 2011.
A norma IEEE 754-1985 também define números chamados especiais, sendo
alguns mostrados na figura 23. NaN (not a number) é utilizado para representar
operações inválidas, como por exemplo divisão por zero.
32
Figura 23 - Números especiais definidos pela IEEE 754-1985 precisão simples Fonte: MULLER, 2009, p. 59.
Os procedimentos para realizar as operações aritméticas com ponto flutuante
também são explicados na norma em questão e podem ser verificados em livros
como (Kuo, 2005), (MULLER, 2009) e (CARTER, 2003). Não serão aqui detalhados
porque a implementação em lógica programável das operações de soma e
multiplicação em ponto flutuante necessárias para gerar o filtro digital foi realizada
através de um núcleo pronto retirado do sitio da OpenCores, a maior comunidade
mundial de desenvolvimento de códigos fonte abertos voltados para hardware, que
segue os ideais do movimento de software livre.
Esse núcleo chama-se Fpu100 (AL-ERYANI, 2011). Consiste numa
implementação em VHDL que realiza as operações aritméticas de adição,
subtração, multiplicação, divisão e radiciação quadrada com números em ponto
flutuante de precisão simples, conforme recomendado na norma IEEE 754-1985. Foi
compilado e sintetizado com sucesso no Quartus II, tendo como alvo a FPGA da
família Cyclone, referência EP1C6Q240. No OpenCores seu status de
desenvolvimento está como estável e existem diversos registros de correções de
bugs, portanto consiste em um núcleo já maduro.
As características citadas contribuíram para a decisão de utilizar o núcleo
Fpu100 na implementação desse trabalhado. A seguir estão detalhadas as
informações mais importantes e necessárias para a implementação usando esse
núcleo, mas informações adicionais podem ser consultadas no datasheet presente
em Al-Eryani (2011).
O núcleo Fpu100 pode operar até uma freqüência máxima de 100 MHz.
Precisa de 7 ciclos de relógio para a computação da soma e 12 ciclos de relógio
para a computação da multiplicação. No momento da implementação, o seu
funcionamento pode ser abstraído por um bloco com sinais de entrada e saída
conforme mostrado na figura 24.
33
Figura 24 - Abstração do núcleo Fpu100 com sinais de entrada e saída Fonte: Autoria própria, 2011.
opa_i e opb_i são os operandos a serem computados, cada um composto por
32 bits organizados conforme a notação de ponto flutuante de precisão simples,
definida pela norma IEEE 754-1985. fpu_op_i são 3 bits utilizados para definir a
operação aritmética a ser realizada, codificados conforme mostrado no quadro 5.
rmode_i são 2 bits utilizados para especificar o modo de arredondamento,
codificados de forma também mostrada no quadro 5. clk_i é o relógio de referência
do núcleo. Após ativadas todas essas entradas, um pulso deve ser dado em start_i
para iniciar a operação aritmética. Quando a operação for concluída, o bit ready_o
vai para nível lógico 1, indicando que nos 32 bits de output_o está o resultado válido
da operação. Os demais bits de saída indicam resultados especiais, como por
exemplo operação inválida, representada por qnan_o e snan_o, e divisão por zero,
representada por div_zero_o.
34
Quadro 5 - Codificação dos bits de entrada fpu_op_i e rmode_i Fonte: AL-ERYANI, 2011.
4.2.2 Conversão de entrada
Conforme já comentado, a conversão de entrada consiste em converter os 16
bits binários representativos da voz e provenientes de um ADC em notação de ponto
flutuante com precisão simples. Tendo em mente que a natureza do sinal de voz
assume como imagem apenas valores positivos e que no caso deste trabalho os
números representativos da voz a serem convertidos são provenientes de um ADC,
a implementação da conversão de entrada restringiu-se a converter números inteiros
e positivos, além do zero.
O processo de conversão baseou-se na constatação, após estudos da notação
de ponto flutuante de precisão simples, de que a parte inteira do número a ser
representado encontra-se na forma binária na notação de ponto flutuante em parte
do termo 1.man da equação mostrada em (9). O detalhe é que o termo mantissa
man contém também a representação da parte fracionária do número, e portanto o
termo expoente exp é quem tem a função de separar a parte inteira da fracionária na
mantissa man. É interessante notar que o conceito de ponto flutuante advém
justamente dessa idéia.
Na figura 25 é ilustrada como exemplo a conversão do número 13 decimal para
35
notação de ponto flutuante, que parte da constatação mencionada. O bit S é zero
para representar o número positivo, assim como sempre ocorre com o sinal de voz a
ser convertido. Os bits mais significativos da mantissa man são formados pelo
binário representativo do número inteiro a ser convertido, excluído o 1 mais
significativo. O restante da mantissa man, ou seja, os seus bits menos significativos,
são preenchidos com zeros. O expoente exp é formado pela soma de 127 com o
número de algarismos do binário representativo do número inteiro a ser convertido
(excluído o 1 mais significativo).
Figura 25 - Exemplo com número 13 de conversão para ponto flutuante Fonte: Autoria própria, 2011.
Seguindo a idéia da figura 25, foi implementada a lógica programável em VHDL
para a conversão de entrada, a qual é mostrada na figura 26.
36
Figura 26 - Implementação da lógica para a conversão de entrada Fonte: Autoria própria, 2011.
Observando a figura 26, verifica-se que na lógica gerada o sinal dos 16 bits
binários representativos da voz a serem convertidos estão disponíveis em um
registrador chamado xn. Essa lógica utiliza um loop for para contar quantos
algarismos tem o binário representativo do número inteiro a ser convertido (excluído
o 1 mais significativo). Essa contagem é armazenada no registrador e, e após
somada com o fator 127 para gerar o expoente exp. A mantissa man é gerada pela
rotação para a esquerda dos bits do registrador xn, realizada 16 – e vezes, ou seja,
o suficiente para que os bits binários representativos do número inteiro a ser
convertido (excluído o 1 mais significativo) fiquem nos bits mais significativos da
mantissa man. O preenchimento com zeros nos bits menos significativos é realizado
automaticamente, juntamente com as rotações. Após encontrados o expoente exp e
a mantissa man, o número em notação de ponto flutuante é montado por
concatenação e armazenado no registrador fpu_entrada. Vale lembrar que como o
número a ser convertido é sempre positivo, na concatenação o bit de sinal S é
sempre montado como 0. O bloco também verifica se o registrador xn é zero, e caso
positivo força o registrador fpu_entrada para zero em notação de ponto flutuante.
Isso porque, conforme mostrado na figura 23, o zero é um número especial na
notação de ponto flutuante, e deve ser tratado como tal. Ainda na figura 26, observa-
se que são realizadas algumas conversões de formato entre os registradores,
necessárias devido aos formatos exigidos pelas sintaxes utilizadas.
Na figura 27 é mostrada uma simulação de conversão do número 13 em
37
notação binária para a notação de ponto flutuante, realizada com o bloco de
conversão de entrada implementado. Verifica-se que após dois ciclos de relógio o
registrador fpu_entrada exibe o número 13 na notação de ponto flutuante com
precisão simples.
Figura 27 - Simulação realizada com o bloco de conversão de entrada Fonte: Autoria própria, 2011.
4.2.3 Conversão de saída
Conforme já discutido, esse bloco tem a função de converter o resultado do
filtro armazenado na notação de ponto flutuante para 16 bits binários, os quais
podem ser ligados a um DAC para a reconstituição do sinal de voz filtrado. Em
função desse resultado do filtro constituir-se em um número real, que
necessariamente é convertido para a notação binária com 16 bits, o bloco de
conversão de saída implementado desconsidera a parte fracionária do número. Além
disso, da mesma forma que o sinal de voz na entrada do bloco de conversão de
entrada, o resultado do filtro é sempre positivo, portanto a saída do bloco de
conversão de saída também é considerada sempre positiva.
A implementação do bloco de conversão de saída também baseou-se na idéia
ilustrada na figura 25 e explicada na seção 4.2.2. Ainda é possível considerá-la
como a lógica inversa da conversão de entrada. Assim, a lógica implementada em
VHDL para a conversão de saída é mostrada na figura 28.
38
Figura 28 - Implementação da lógica para a conversão de saída Fonte: Autoria própria, 2011.
Na figura 28 verifica-se que o dado na notação de ponto flutuante a ser
convertido encontra-se armazenado no registrador fpu_saida. Usando a mesma
idéia de concatenação extrai-se o expoente exp presente nos bits de número 23 ao
de número 30 do registrador fpu_saida. Ao expoente exp é subtraído o fator 127, e o
resultado é armazenado no registrador e_saida, que é utilizado adiante para
deslocar os bits da mantissa man para gerar os 16 bits binários de saída do bloco. O
registrador mantissa_add é formado pela concatenação de um bit 1 como MSB com
a mantissa man do dado em notação de ponto flutuante a ser convetido. Assim,
nesse registrador mantissa_add temos armazenado o termo 1.man da equação
mostrada em (9), que conforme já mencionado contém na forma binária a parte
inteira do número representado e mais a parte fracionária. O registrador
mantissa_add_conv, que constitui-se no mantissa_add apenas convertido de
formato, tem seus bits deslocados 24 - (e_saida + 1) vezes para a direita, e
armazenados no registrador yn_24. Com esse deslocamento, o que está sendo feito
é a exclusão da parte fracionária do número que se está convertendo. Assim, nesse
registrador yn_24 já temos o dado na notação ponto flutuante convertido para
binário. Porém, como a especificação do bloco de conversão de saída compreende
seu resultado no formato binário com 16 bits, é utilizada a idéia de concatenação
39
para armazenar no registrador de saída do bloco yn o resultado com tamanho de 16
bits. Da mesma forma que o bloco de conversão de entrada, o bloco em questão
também preocupa-se com o dado zero a ser convertido, fazendo uma conversão
forçada nesse caso. Observa-se que na notação de ponto flutuante o dado zero
pode ser positivo ou negativo. Assim, na implementação, em qualquer desses casos,
o registrador yn tem seus 16 bits forçados para zero. Por fim, vale lembrar que
também são realizadas conversões de formato entre os registradores.
Na figura 29 é mostrada uma simulação de conversão do número 13,55 em
notação de ponto flutuante para a notação binária de 16 bits, realizada com o bloco
de conversão de saída implementado. Observa-se que a parte fracionária do número
é desconsiderada e que são necessários dois ciclos de relógio para completar a
conversão.
Figura 29 - Simulação realizada com o bloco de conversão de saída Fonte: Autoria própria, 2011.
4.2.4 Filtro
Conforme mostrado na figura 20, o detalhamento do bloco de filtragem
propriamente dito está dividido em três sub-blocos: armazenamento dos coeficientes
e das amostras, arquitetura utilizada para implementar o filtro e relógios e sinais de
controle seqüencial da lógica. A seguir são detalhados esses blocos.
40
4.2.4.1 Armazenamento dos coeficientes e amostras
Os coeficientes do filtro são constantes e assim podem ser armazenados na
linguagem VHDL de maneira análoga a uma memória somente de leitura (ROM,
read only memory). Em função dessa característica da ROM, para utilizá-la não são
necessários sinais de relógio e de habilitação de escrita (PEDRONI, 2004). Como
mostrado na figura 30, essa memória contém uma pilha de palavras words, que são
selecionadas através de um endereço addr e lidas em um registrador de dados data.
Figura 30 - Diagrama de uma ROM Fonte: PEDRONI, 2004.
Na figura 31 é exibida a lógica programável em VHDL escrita para implementar
a ROM de armazenamento dos coeficientes. Os coeficientes são armazenados em
vetores e o arranjo desses vetores forma a ROM. Como na linguagem VHDL não
existe um tipo de dado definido para representar um arranjo de vetores, foi
necessário definir o tipo vector_array_rom e especificar que ele contém de 1 a 82
vetores, dada a necessidade de armazenar os 82 coeficientes do filtro presentes no
quadro 3, e que cada vetor contém 32 bits, dado que os coeficientes são
armazenados na notação de ponto flutuante com precisão simples. Esse arranjo de
vetores compõem a constante memory_rom na qual o dado é armazenado. Na figura
31, por simplicidade de representação, estão mostrados apenas alguns coeficientes
armazenados.
41
Figura 31 - Armazenamento dos coeficientes na linguagem VHDL Fonte: Autoria própria, 2011.
A leitura dos coeficientes é feita como mostrado na figura 32. O registrador
pont_rom é o endereço cujo conteúdo é lido de memory_rom e armazenado no
registrador opa_i_mult.
Figura 32 - Leitura de um coeficiente na linguagem VHDL Fonte: Autoria própria, 2011.
Ao contrário dos coeficientes, as amostras variam conforme o sinal de voz e
devem ser armazenadas à medida que são recebidas e descartadas quando já
foram multiplicadas por todos os coeficientes. Essa característica sugere que as
amostras sejam armazenadas na linguagem VHDL de maneira análoga a uma
memória de acesso aleatório (RAM, random access memory). Conforme
apresentado na figura 33, a RAM requer um relógio clk para funcionar e possui um
sinal wr_ena para habilitação da escrita. Assim, esse processo é feito com a escrita
de nível lógico 1 em wr_ena, seleção do endereço addr onde se deseja escrever e
escrita do dado a ser armazenado em data_in. A leitura é feita com a escrita
desabilitada através de nível lógico 0 em wr_ena, seleção do endereço addr que se
deseja ler e recebimento do dado através de data_out.
42
Figura 33 - Diagrama de uma RAM Fonte: PEDRONI, 2004.
A definição da RAM na linguagem VHDL foi feita de maneira semelhante a uma
ROM, como pode ser observado na figura 34. A diferença é que como os dados são
dinâmicos, eles são armazenados e lidos à medida que a lógica é executada.
Figura 34 - Definição da RAM na linguagem VHDL Fonte: Autoria própria, 2011.
Para possibilitar as escritas das amostras na RAM foi implementada a lógica
mostrada na figura 35, a qual é executada permanentemente. Sempre que a escrita
for habilitada através do nível lógico 1 em wr_ena, o dado presente em data_in é
armazenado no endereço addr_ram da RAM memory_ram. A leitura de um dado é
executada de forma semelhante à da ROM, com o detalhe que a escrita deve estar
desabilitada através do nível lógico 0 em wr_ena.
Figura 35 - Bloco em VHDL que permite escritas na RAM Fonte: Autoria própria, 2011.
43
4.2.4.2 Arquitetura do filtro implementado
Em lógica programável existem inúmeras maneiras de implementar o filtro FIR
em estrutura direta mostrado na figura 2. A arquitetura adotada nesse trabalho é
semelhante à de compartilhamento de recursos utilizada por Pora e Siriluangtong
(2002) e mostrada na seção 3.3. Assim, para implementar as 82 multiplicações dos
coeficientes do filtro projetado pelas amostras de entrada e as 81 somas dos
resultados dessas multiplicações, compartilha-se apenas um multiplicador e um
somador, conforme mostrado na figura 36.
Figura 36 - Arquitetura do filtro implementado Fonte: Autoria própria, 2011.
Acompanhando a arquitetura ilustrada na figura 36, para gerar uma amostra na
saída do filtro os coeficientes e as amostras de entrada são multiplexados na
entrada do multiplicador i_fpu_mult, implementado com o núcleo Fpu100
mencionado na seção 4.2.1. Ele realiza uma multiplicação por instante de tempo,
tendo sua saída diretamente conectada à entrada do somador i_fpu_add, também
implementado com o núcleo Fpu100. Este operador realiza a soma do resultado da
multiplicação com o registrador somatorio, que inicia em zero para cada amostra de
44
entrada e é incrementado com os resultados das somas de produto. Quando todos
os coeficientes e amostras de entrada foram computados, o contador cont habilita a
escrita do registrador somatorio no fpu_saida para gerar a saída do filtro. A cada
amostra de saída a ser gerada o processo é repetido.
Na figura 37 é mostrada a implementação em lógica programável com VHDL
da arquitetura descrita. Observa-se ela consiste basicamente em operar o núcleo
Fpu100 para que sejam realizadas as operações de multiplicação e soma. Os
operandos da multiplicação são buscados da ROM e da RAM. Ao final de todas as
operações, o contador cont chega ao valor 1000 e o resultado é enviado através do
registrador fpu_saida.
Figura 37 - Implementação em VHDL da arquitetura do filtro Fonte: Autoria própria, 2011.
45
4.2.4.3 Relógios e sinais de controle seqüencial
As especificações para a implementação da lógica programável presentes no
quadro 4 definiram a freqüência de amostragem da voz como 34 kHz. Isso significa
que a cada 29,4 us toda a arquitetura do filtro mostrada na figura 36 deve ser
executada para receber a amostra, realizar as somas de produtos e gerar uma
amostra de saída do filtro. Portanto, além do relógio de 34 kHz para amostragem, a
lógica programável precisa de um relógio com freqüência superior. Para definir a
freqüência desse relógio o método usado foi estimar o total de número de ciclos para
a execução da arquitetura de somas de produto e das conversões de entrada e
saída. Esse número de ciclos deve ser executado em uma freqüência tal que o
tempo total desses ciclos seja inferior a 29,4 us.
No quadro 6 encontra-se a estimativa para a implementação planejada nesse
trabalho. É importante destacar que ela contém folgas para evitar erros. Assim, para
a conversão de entrada e de saída a estimativa baseia-se nas simulações
mostradas nas figuras 27 e 29. Para a gravação da amostra de entrada precisa-se
de 1 ciclo somado a 2 ciclos de folga. A estimativa para a execução da arquitetura
de somas de produto parte do fato de que a operação que mais exige ciclos é a de
multiplicação, que exige 12 para cada operação. Como são 82 multiplicações, um
total de 984 ciclos são necessários, adicionados de alguns de folga.
Quadro 6 - Estimativa do número de ciclos para execução do filtro Fonte: Autoria própria, 2011.
Em suma, conforme mostrado no próprio quadro 6, a implementação planejada
precisa de 1209 ciclos. Na placa de desenvolvimento UP3 Educational Kit, onde a
FPGA alvo é montada, temos disponíveis os relógios mostrados no quadro 4.
Utilizando-se o de 66,66 MHz, a execução da implementação ocorrerá em 18,1 us,
46
um tempo adequado, portanto, pois é menor que 29,4 us da amostragem.
Dessa forma, os relógios utilizados na implementação são de 34 kHz e 66,66
MHz. Considerando o de 66,66 MHz como sendo o principal, proveniente de um
oscilador externo à FPGA, o relógio de 34 kHz é gerado através da divisão desse
principal.
Definidos os relógios e a forma como são usados, é preciso também definir um
sincronismo para os processos mostrados no quadro 6, de forma que para gerar
cada amostra de saída eles sejam executados na ordem mostrada nesse quadro. A
idéia para fazer esse sincronismo foi implementar um contador que inicia em zero
quando ocorre um pulso de 34 kHz, o qual habilita a conversão de entrada, e que é
incrementado a cada ciclo do relógio principal de 66,66 MHz. Assim, como temos o
quadro 6, que fornece a estimativa de ciclos para a execução de cada processo,
quando o contador chegar em 3 sabemos que a conversão de entrada finalizou e
que pode ser iniciada a gravação da amostra de entrada na RAM. Quando o
contador chegar em 6 sabemos que esse último processo foi concluído e que a
arquitetura de somas de produto pode ser iniciada. E assim por diante até concluir
todos os processos, conforme ilustrado na figura 38.
Figura 38 - Sincronização dos processos através do registrador cont Fonte: Autoria própria, 2011.
47
5 RESULTADOS
Os resultados desse trabalho partem da análise dos relatórios de síntese da
lógica implementada gerados pelo Quartus II (ALTERA, 2011). São verificadas
informações referentes aos blocos de arranjo lógico (LABs, logic array blocks),
elementos lógicos (LEs, logic elements), tabelas de busca (LUTs, look up tables),
blocos e bits de memória e freqüência máxima de operação. Como é necessário
conhecer o conceito desses parâmetros para o entendimento e análise dos
resultados, na seção 5.1 é realizada uma breve revisão da arquitetura de FPGAs, a
qual é caracterizada basicamente por LABs, LEs e LUTs. Na seção 5.2 são
apresentadas as características desses parâmetros para a família Cyclone, da
Altera, tendo em vista que a FPGA alvo da implementação é a EP1C6Q240, que
pertence a essa família. Por fim, na seção 5.3 são apresentados os resultados com
base nos conceitos e características verificados nas seções 5.1 e 5.2.
5.1 Revisão dos conceitos de arquitetura de FPGAs
Floyd (2007) apresenta os conceitos de forma facilmente compreensível e
também semelhante à arquitetura das FPGAs da família Cyclone da Altera. Assim
sendo, nessa seção utiliza-se a abordagem desse autor.
A estrutura de uma FPGA é composta de três elementos básicos: os LABs, as
interconexões programáveis e os blocos de entrada e saída (FLOYD, 2007, p. 41),
conforme ilustrado na figura 39. Os blocos de entrada e saída estão nas bordas da
estrutura e proporcionam acesso individualmente selecionável de entrada, saída ou
bidirecional ao mundo externo. A matriz de interconexões programáveis é
responsável pela comunicação entre os LABs e as conexões para as entradas e
saídas.
48
Figura 39 - Estrutura básica de uma FPGA Fonte: Adaptado de FLOYD, 2007, p. 645.
Cada LAB é formado de múltiplos LEs e uma interconexão programável local
que é usada para interconectar os diversos LEs dentro de um LAB, conforme
mostrado na figura 40.
49
Figura 40 - LEs dentro de interconexões programáveis globais Fonte: Adaptado de FLOYD, 2007, p. 645.
Um LE em um LAB pode ser configurado como lógica combinacional, lógica
registrada ou uma combinação de ambas. Na figura 41 é mostrado o diagrama em
blocos de um típico LE baseado em LUT, a qual é um tipo de memória programável
usada para gerar funções lógicas combinacionais de soma-de-produtos (FLOYD,
2007, p. 646).
Figura 41 - Diagrama básico de um LE Fonte: Adaptado de FLOYD, 2007, p. 646.
A organização de uma LUT consiste em um número de células de memória
igual a 2n, onde n é o número de variáveis de entrada. Assim, uma LUT com três
variáveis de entrada pode produzir uma expressão de soma-de-produtos com até
oito termos-produto. Um padrão de uns e zeros é usado para programar a saída de
cada produto. Cada nível 1 significa que o termo-produto associado aparece na
soma-de-produtos e cada 0 significa que o termo-produto associado não aparece na
50
saída de soma-de-produtos. Por exemplo, na figura 42, a saída soma-de-produtos
resultante é Ā2Ā1Ā0 + Ā2A1A0 + A2Ā1A0 + A2A1A0.
Figura 42 - LUT programada com determinada saída Fonte: FLOYD, 2007, p. 646.
5.2 Características das FPGAs da família Cyclone da Altera
O quadro 7 mostra as características referentes à arquitetura das FPGAs da
família Cyclone, da Altera. Tomando como referência a FPGA EP1C6Q240, alvo da
implementação desse trabalho, verifica-se que ele possui 32 × 20 LABs e 5980 LEs.
Todas as FPGAs dessa família possuem cada LAB formado por 10 LEs. Na
arquitetura Cyclone estão incluídos também blocos de RAM com tamanho de 128 ×
36 bits cada. Como a FPGA EP1C6Q240 possui 20 desses blocos, o total de bits de
RAM disponível é 92160 (ALTERA, 2008, p. 1.1 - 2.3).
51
Quadro 7 - Características referentes à arquitetura das FPGAs Cyclone Fonte: Adaptado de ALTERA, 2008, p. 1.1 - 2.2.
A arquitetura interna dos LEs da família Cyclone é mostrada na figura 43.
Observa-se que cada LE possui uma LUT de 4 entradas de dados. À direita da LUT
observa-se o circuito lógico referido na seção 5.1, o qual possui as saídas
conectadas às interconexões programáveis locais (ALTERA, 2008, p. 2.6).
Figura 43 - Arquitetura interna dos LEs da família Cyclone Fonte: ALTERA, 2008, p. 2.6.
52
5.3 Resultados da síntese da lógica implementada
A síntese da lógica implementada foi realizada pelo Quartus II configurado com
o parâmetro de otimização no tempo como padrão e o parâmetro de otimização do
tamanho do hardware como balanceado. No quadro 8 são mostrados os resultados.
Quadro 8 - Resultados da síntese da lógica implementada Fonte: Adaptado de ALTERA, 2011.
No quadro 9 é realizado um comparativo de alguns recursos exigidos pela
lógica implementada em função dos recursos disponíveis na FPGA alvo da
implementação, ou seja, o EP1C6Q240. Verifica-se que o percentual de exigência
de LEs e LABs da lógica pela FPGA EP1C6Q240 excede 100 %. Dessa forma, a
53
quantidade exigida desses recursos é maior do que a quantidade disponível. Esse
resultado mostra que não é possível sintetizar e gravar a lógica gerada na FPGA
EP1C6Q240.
Quadro 9 - Comparativo supondo FPGA alvo EP1C6Q240 Fonte: Autoria própria, 2011.
Para viabilizar a síntese e gravação da lógica em questão sem a necessidade
de otimização desta, é necessário utilizar uma FPGA com quantidade maior de
recursos. Por exemplo, conforme mostrado no quadro 10, isso seria possível através
da FPGA EP1C12Q240, também da família Cyclone. Comparando os recursos
disponibilizados por essa FPGA, mostrados no quadro 7, com os recursos exigidos,
mostrados no quadro 8, verifica-se que a síntese e gravação na situação desejada
seria possível.
Quadro 10 - Comparativo supondo FPGA EP1C12Q240 Fonte: Autoria própria, 2011.
Apesar das limitações de hardware impostas pela lógica gerada para a sua
síntese e gravação no FPGA EP1C12Q240, caracterizadas conforme visto pelas
quantidades de LEs e LABs necessários, sob o ponto de vista do atraso imposto
54
pelo caminho crítico da lógica, ela não apresenta impedimentos para ser
implementada na aplicação a que foi definida. Ou seja, a lógica foi planejada para
trabalhar com o relógio principal em 66,66 MHz, de maneira a permitir a
implementação da arquitetura de compartilhamento de recursos. Em contrapartida,
os relatórios de síntese apontaram para a freqüência máxima do relógio principal
como 82,05 MHz, demonstrando que a implementação não apresenta restrições
nesse sentido.
55
6 CONCLUSÃO
O trabalho abordou a implementação de filtros digitais em lógica programável
usando a linguagem VHDL. A aplicação de referência escolhida foi a filtragem da
voz humana, bastante comum e de utilização em diversos sistemas. Realizou-se o
projeto do filtro digital para atender as especificações da aplicação e a construção da
lógica com foco na FPGA EP1C6Q240, da família Cyclone, da Altera.
Os relatórios da síntese da descrição de hardware implementada permitem
verificar que os LEs e LABs são parâmetros críticos na definição de recursos
disponíveis em uma FPGA para a gravação de uma lógica programável. No caso
desse trabalho, não é possível gravar a lógica gerada na FPGA inicialmente definida
para utilização. Verifica-se que é necessário um dispositivo com mais recursos.
Outro parâmetro importante em um projeto é a máxima freqüência de operação
dos relógios. A especificação desse parâmetro é basicamente definida pela
aplicação, assim cuidados devem ser tomados na implementação da lógica para que
o circuito gerado possibilite a operação na freqüência desejada. Nesse trabalho
planejou-se a operação do relógio principal em 66,66 MHz e os relatórios de síntese
indicaram a máxima freqüência para esse relógio como 82,05 MHz, portanto
possibilitando a operação do filtro conforme planejado.
Visando a continuidade desse trabalho, os seguintes caminhos podem ser
adotados:
a) embora com arquitetura definida e coerente, foi verificado que o código
VHDL gerado e presente no apêndice A apresenta alguns erros na
simulação que o impedem de funcionar conforme o esperado. Pode-se
realizar as correções desses erros e simulações para validação da lógica
como filtro digital;
b) estando o código VHDL funcional, comprovadamente através de simulações,
pode-se partir para a implementação de um sistema de DSP conforme
ilustrado na figura 1. Ou seja, gravar a lógica em uma FPGA e conectar esse
dispositivo a um ADC e um DAC. Isso forma um sistema DSP totalmente
construído em hardware, que permite análises diversas;
c) uma perspectiva de continuidade interessante é utilizar o código VHDL
gerado nesse trabalho como base para análises de melhores práticas para a
56
construção de lógicas programáveis, com vistas à otimização de recursos de
hardware. Essas análises são importantes para não repetir o que ocorreu
nesse trabalho, de a lógica demandar mais recursos do que o disponibilizado
pela FPGA alvo;
d) deixando os sistemas digitais um pouco de lado, é possível realizar um
estudo da teoria de DSP em busca de estruturas de filtros digitais e métodos
de projetos com complexidade reduzida, que permitem implementação em
hardware com maior facilidade e menor custo.
57
REFERÊNCIAS
AL-ERYANI, Jidan. FPU100. Version 19. Disponível em: <http://opencores.org/project,fpu100>. Acesso em: 5 maio 2011. ALTERA. Cyclone Device Handbook: Volume 1. Version 1.5. San Jose: Altera, 2008. ALTERA. Quartus II. Version 10.1. [S.l.]: Altera, 2011. BARROS, André Macário. Projeto de Filtros FIR através de Algoritmos Genéticos. 2006. B277p. Dissertação (Mestrado em Ciências) – Programa de Pós-Graduação em Engenharia Elétrica e Informática Industrial, Universidade Tecnológica Federal do Paraná, Curitiba, 2006. CARTER, Nicholas. Arquitetura de computadores. Porto Alegre: Bookman, 2002. CHAND, Rakesh et al. FPGA Implementation of Fast FIR Low Pass Filter for EMG Removal from ECG Signal. In: INTERNATIONAL CONFERENCE ON POWER, CONTROL AND EMBEDDED SYSTEMS (ICPCES), 2010, Allahabad. Proceedings… Piscataway: IEEE, 2010. p. 1-5. DATACOM. A Datacom quer conhecer você . Disponível em: <http://www.datacom.ind.br/new/ pt-br/voce>. Acesso em: 12 set. 2010. DINIZ, Paulo S. R.; SILVA, Eduardo A. B. da; LIMA NETTO, Sergio. Processamento Digital de Sinais: Projeto e Análise de Sistemas. Porto Alegre: Bookman, 2004. FLOYD, Thomas L. Sistemas Digitais: Fundamentos e Aplicações. 9. ed. Porto Alegre: Bookman, 2007. HAYES, Monson H. Teoria e Problemas de Processamento Digital de Sina is . Porto Alegre: Bookman, 2006. INSTITUTE OF ELECTRICAL AND ELECTRONICS ENGINEERS. IEEE Standard 754-1985: IEEE Standard for Binary Floating-Point Arithmetic. [S.I.]: IEEE, 1985.
58
KUO, Sen M.; GAN, Woon-Seng. Digital Signal Processors: Architectures, Implementations and Applications. Upper Saddle River: Prentice Hall, 2005. MESSAI, A.; NOUR, A.; ABDELLANI I. Optimal Digital Filtering in Gamma-ray Spectroscopy. In: INTERNATIONAL CONFERENCE ON ADVANCEMENTS IN NUCLEAR INSTRUMENTATION MEASUREMENT METHODS AND THEIR APPLICATIONS (ANIMMA), 1., 2009, Marseille. Proceedings… Piscataway: IEEE, 2009. p. 1-6. MEYER, U. Digital Signal Processing with Field Programmable G ate Arrays . 3rd ed. Berlin: Springer, 2007. MITRA, Sanjit K. Digital Signal Processing: a computer based approach. 3rd ed. New York: McGraw-Hill, 2006. MULLER, Jean-Michel et al. Handbook of Floating-Point Arithmetic. New York: Birkhäuser Boston, 2010. OPPENHEIM, Alan V.; SCHAEFER, Ronald W.; BUCK, John R. Discrete-Time Signal Processing. 2nd ed. Upper Saddle River: Prentice Hall, 1999. PAO, Sammy; KHOO, Kei-Young; WILSON JR., Alan N. A Programmable FIR Filter for TV Ghost Cancellation. In: IEEE MIDWEST SYMPOSIUM ON CIRCUITS AND SYSTEMS, 39., 1996, Ames. Proceedings… Piscataway: IEEE, 1996. p. 133-136. PEDRONI, Volnei A. Circuit Design with VHDL. Cambridge: MIT Press, 2004. PINHEIRO, Fred S. R. Telefonia. Natal: UFRN, [20--]. (Apostila da disciplina Sistemas de Telecomunicações I, Curso de Engenharia Elétrica, Universidade Federal do Rio Grande do Norte). Disponível em: <www.dee.ufrn.br/~fred/arquivos/Telefonia.pdf>. Acesso em: 29 maio 2011. PORA, Wanchalerm; SIRILUANGTONG, Pahol. A TV Ghost Canceller Using FPGA-based FIR Filters. In: ASIA-PACIFC CONFERENCE ON CIRCUIT AND SYSTEMS (APCCAS), 2002, Bali. Proceedings… Piscataway: IEEE, 2002. p. 289-292. RABINER, L. R.; SCHAFER, R.W. Digital Processing of Speech Signals. Englewood Cliffs: Prentice Hall, 1978. SYSTEM LEVEL SOLUTIONS. UP3 Education Kit: Cyclone Edition (EP1C6). Version 1.3. San Martin: System Level Solutions, 2007.
59
THE MATHWORKS. Matlab R2009A. Version 7.8.0.347. [S.l.]: The MathWorks, 2009. THE MATHWORKS. Signal Processing Toolbox: Introduction to the Filter Design and Analysis Tool (FDA Tool). Disponível em: <http://www.mathworks.com/products/signal/demos.html?file=/products/demos/shipping/signal/introfdatooldemo.html>. Acesso em: 23 abr. 2011. TOCCI, Ronald J.; WIDMER, Neal S.; MOSS, Gregory L. Sistemas Digitais: Princípios e Aplicações. 10. ed. São Paulo: Prentice Hall, 2007.
60
APÊNDICE A – CÓDIGO VHDL GERADO NO TRABALHO
61
62
63