UNIVERSIDADE TECNOL ´OGICA FEDERAL DO PARAN ´A DEPARTAMENTO ACAD ˆEMICO DE EL ´ETRICA
CURSO DE ENGENHARIA EL ´ETRICA
CALLEBE SOARES BARBOSA
IMPLEMENTAC
¸ ˜
AO DO ALGORITMO RADIX-2 PARA
C ´
ALCULO DA FFT EM FPGA
TRABALHO DE CONCLUS ˜AO DE CURSO
PATO BRANCO 2018
CALLEBE SOARES BARBOSA
IMPLEMENTAC
¸ ˜
AO DO ALGORITMO RADIX-2 PARA
C ´
ALCULO DA FFT EM FPGA
Trabalho de Conclus ˜ao de Curso de graduac¸ ˜ao, apresentado `a disciplina de Trabalho de Conclus ˜ao de Curso 2, do Curso de Engenharia El ´etrica da Coordenac¸ ˜ao de Engenharia El ´etrica - CO-ELT - da Universidade Tecnol ´ogica Federal do Paran ´a - UTFPR, C ˆampus Pato Branco, como requisito parcial para obtenc¸ ˜ao do t´ıtulo de Engenheiro Eletricista.
Orientador: Prof. Dr. F ´abio Luiz Bertotti
PATO BRANCO 2018
TERMO DE APROVAC¸ ˜AO
O Trabalho de Conclus ˜ao de Curso intitulado IMPLEMENTAC¸ ˜AO DO AL-GORITMO RADIX-2 PARA C ´ALCULO DA FFT EM FPGA do acad ˆemico Callebe Soa-res Barbosa foi considerado APROVADO de acordo com a ata da banca examinadora N◦ 216 de 2018.
Fizeram parte da banca examinadora os professores:
Prof. Dr. F ´abio Luiz Bertotti Prof. Dr. Giovanni Alfredo Guarneri
Dr. Jean Patric da Costa
A Ata de Defesa assinada encontra-se na Coordenac¸ ˜ao do Curso de Engenharia El ´etrica
Se vi mais longe foi por estar de p ´e sobre ombros de gigantes.
AGRADECIMENTOS
Agradec¸o primeiramente a Deus, por prover a mim os meios pelos quais fui, e sou sustentado todos os dias. E por me conceder a oportunidade, e a capacitac¸ ˜ao para realizac¸ ˜ao deste trabalho.
Agradec¸o a estrutura que formou meu car ´acter, e me deu suporte para a realizac¸ ˜ao de meus mais distantes sonhos; a minha querida fam´ılia, sem o qual jamais teria chegado at ´e aqui. Ao meu pai Jos ´e Geral, a minha m ˜ae Maria Rosa Barbosa e ao meu irm ˜ao Victor E. Soares Barbosa.
Agradec¸o tamb ´em ao meu professor orientador Dr. F ´abio Luiz Bertotti, pela paci ˆencia, dedicac¸ ˜ao e respeito com que me direcionou e ensinou ao longo da realizac¸ ˜ao deste trabalho. Deixo tamb ´em aqui registrado minha gratid ˜ao e reco-nhecimento a toda a Universidade Tecnol ´ogica Federal do Paran ´a (UTFPR). A esta instituic¸ ˜ao que me recebeu como aluno, e me deu a oportunidade de estudar junto a um grupo docente de excel ˆencia, e que me preparou para o nobre exerc´ıcio da enge-nharia.
Por fim, agradec¸o aos meus queridos amigos, que surgiram ao longo de toda a minha jornada, e que de maneira extraordin ´aria contribu´ıram para meu cresci-mento, celebrando com minhas vit ´orias e me sustentando em minha dificuldades.
RESUMO
BARBOSA, Callebe Soares. Implementac¸ ˜ao do Algoritmo Radix-2 para o C ´alculo da FFT em FPGA. 2018. 104 f. Monografia (Trabalho de Conclus ˜ao de Curso) - Curso de Engenharia El ´etrica, Universidade Tecnol ´ogica Federal do Paran ´a. Pato Branco, 2018.
O presente trabalho aborda o desenvolvimento de um hardware dedicado ao c ´alculo da Transformada R ´apida de Fourier (FFT), a partir da implementac¸ ˜ao do algoritmo Radix-2 em uma FPGA, conferindo paralelismo a fim aumentar a efici ˆencia no c ˆomputo da FFT. Para isso, s ˜ao introduzidos os conceitos principais sobre a FFT, o algoritmo Radix-2, o algoritmo CORDIC, e o projeto de par ˆametros que maximizam o desem-penho desses algoritmos. O dispositivo escolhido para implementac¸ ˜ao ´e o ZynqBerry - TE0726, o qual ´e equipado com a FPGA da fam´ılia Zynq-700. Neste trabalho s ˜ao implementadas duas arquiteturas de FFT. A primeira FFT possui 16 pontos, e ´e compu-tada com apenas 12 ciclos de clock, atingindo um desempenho de SQNR de 52dB. A segunda FFT possui 1024 pontos, e ´e computada com 1728 ciclos clock, atingindo um desempenho SQNR de 41dB. Ao final deste trabalho ´e poss´ıvel compreender como ´e projetado e implementado uma FFT de bom desempenho, em um ambiente vantajoso como a FPGA.
ABSTRACT
BARBOSA, Callebe Soares. Implementation of the Radix-2 Algorithm for the Calcu-lation of FFT in FPGA. 2018. 104 p. Undergraduate Thesis - Electrical Engineering Course, Universidade Tecnol ´ogica Federal do Paran ´a. Pato Branco, 2018.
The objective of this work is the development of a specific hardware for the calculation of Fast Fourier Transform (FFT), based on the implementation of the Radix-2 algorithm in FPGA, using parallelism to increase the computational efficiency. This work intro-duce the main concepts about FFT, the Radix-2 algorithm, the CORDIC algorithm, and the project of parameters that maximize the performance of these algorithms. The de-vice chosen for FFT implementation is the ZynqBerry - TE0726, which has an FPGA of the Zynq-700 family.0. Two FFT architectures are implemented in this work; the first FFT has 16 points, and is computed with only 12 cycles of textit clock, achieving a SQNR performance of 52dB. The second FFT has 1024 points, and is computed with 1728 clock cycles, achieving a SQNR performance of 41dB. At the end it is possible to understand how an FFT is designed and implemented in an advantageous environ-ment such as the FPGA.
LISTA DE FIGURAS
Figura 1: Expectro de Fourier do Sinal x(t) = sin(2π15t) + sin(2π40t) . . 17
Figura 2: Butterfly do Fluxo do Sinal . . . 20
Figura 3: FFT de 8 Pontos . . . 21
Figura 4: FFT DIF de 8 Pontos . . . 23
Figura 5: Rotac¸ ˜ao de Hr pelo ˆangulo de 2πr/N0 . . . 24
Figura 6: Angulos Elementares - Cordic Tradicional com N=4 . . . .ˆ 28 Figura 7: EEAS com N=2 e S=4 . . . 31
Figura 8: Exemplo de execuc¸ ˜ao do Algoritmo TBS . . . 34
Figura 9: Exemplo de execuc¸ ˜ao do Algoritmo TBS . . . 35
Figura 10: MSR com I=2, J=1 e N=2 . . . 38
Figura 11: MSR com I=2, J=1 e N=2 . . . 39
Figura 12: Relac¸ ˜ao entre o Pupper e o SQNR para MSR-CORDIC, como Nspt = 3e N = 3 . . . 43
Figura 13: Arquitetura Tipica de uma FPGA . . . 45
Figura 14: Arquitetura de uma CLB com 4 BLEs . . . 46
Figura 15: Arquitetura de uma BLE (Basic Logic Element) . . . 47
Figura 16: Diagrama Geral do Sistema Implementado . . . 49
Figura 17: SoC ZynqBery - TE0726 . . . 50
Figura 18: Arquitetura Simplificada - Zynq-7000 . . . 52
Figura 19: Arquitetura Simplificada de um Sistema Digital . . . 53
Figura 20: Arquitetura Simplificada do um Sistema Digital Mapeado para o Zynq . . . 54
Figura 21: Relac¸ ˜ao entre S e o SQNR M ´edio para MSR Cordic Modo Normal 58 Figura 22: Arquitetura da Iterac¸ ˜ao MSR Cordic Modo Normal Nspt = 3 . . . 61
Figura 24: Arquitetura Implementada FFT de 16 Pontos . . . 63
Figura 25: Arquitetura FFT 1024 Pontos Implementada . . . 65
Figura 26: Sinal com componentes em 213Hz, 410Hz, e 1403Hz - FFT de 16 Pontos . . . 69
Figura 27: Sinal de Entrada da FFT de 16 Pontos Amostrado a 3200 Hz . . 70
Figura 28: Espectro de Fourier proveniente da FFT de 16 Pontos . . . 71
Figura 29: Espectro de Fourier proveniente do Matlab para 16 Pontos . . . 71
Figura 30: Erro entre o resultado obtido pela FFT de 16 Pontos Implemen-tada e o Matlab . . . 72
Figura 31: Sinal com Componentes em 213Hz, 410Hz, e 1403Hz - FFT de 1024 Pontos . . . 75
Figura 32: Sinal de Entrada da FFT de 1024 Pontos Amostrado a 3200 Hz 75 Figura 33: Espectro de Fourier proveniente da FFT de 1024 Pontos . . . . 76
Figura 34: Espectro de Fourier proveniente do Matlab para 1024 Pontos . 76 Figura 35: Erro entre o resultado obtido pela FFT de 1024 Pontos Imple-mentada e o Matlab . . . 77
Figura 36: Criac¸ ˜ao de um Novo Bloco de Design . . . 83
Figura 37: Criac¸ ˜ao de um Novo Bloco de Design . . . 84
Figura 38: Bloco de Design para FFT 16 Pontos . . . 85
Figura 39: Enderec¸o de Mem ´oria da Interface AXI FFT . . . 86
Figura 40: Caminho at ´e a ferramenta: Tools: Create and Package New IP . 88 Figura 41: Ferramenta de Criac¸ ˜ao e Empacotamento de Novas IPs . . . . 88
Figura 42: Escolha da Opc¸ ˜ao: Create a New Peripheral . . . 89
LISTA DE TABELAS
Tabela 1: Matriz φ para o dado Exemplo . . . 36
Tabela 2: N´ıvel SQNR entre o Modo Generalizado e Normal, NSP T = 3 . . 59
Tabela 3: Resultado de S´ıntese FFT 16 Pontos . . . 67
Tabela 4: Comparativo de S´ıntese - FFT 16 Pontos . . . 67
Tabela 5: Comparativo N´ıvel de SNQR para FFT de 16 Pontos . . . 68
Tabela 6: Resultado de S´ıntese FFT 1024 Pontos . . . 72
Tabela 7: Comparativo de S´ıntese - FFT 1024 Pontos . . . 73
SUM ´ARIO 1 INTRODUC¸ ˜AO . . . 11 1.1 OBJETIVOS . . . 12 1.1.1 Objetivo Geral . . . 12 1.1.2 Objetivos Espec´ıficos . . . 12 1.2 ORGANIZAC¸ ˜AO DO TRABALHO . . . 13 2 REVIS ˜AO DE LITERATURA . . . 14
2.1 REPRESENTAC¸ ˜AO DE FOURIER PARA SINAIS . . . 14
2.1.1 S ´erie de Fourier . . . 14
2.1.2 Espectro de Fourier . . . 16
2.2 TRANSFORMADA DISCRETA DE FOURIER . . . 17
2.3 TRANSFORMADA R ´APIDA DE FOURIER . . . 18
2.4 ALGORITMO CORDIC . . . 23 2.4.1 CORDIC Tradicional . . . 25 2.4.2 EEAS-CORDIC . . . 27 2.4.2.1 Algoritmo TBS . . . 31 2.4.3 MSR-CORDIC . . . 36 2.4.3.1 An ´alise do Erro . . . 40 2.5 FPGA . . . 44
2.5.1 Aspectos Construtivos da FPGA . . . 44
3 MATERIAIS E M ´ETODOS . . . 49
3.1 ZYNQBERRY TE0726-03M . . . 50
3.1.1 Zynq-7000 . . . 51
3.2 IMPLEMENTANDO O PROCESSADOR CORDIC . . . 55
3.2.1 Projeto dos Par ˆametros Cordic . . . 55
3.2.2 Arquitetura Cordic Implementada . . . 60
3.3 IMPLEMENTANDO A FFT 16 PONTOS . . . 62
4 RESULTADOS E DISCUSS ˜AO . . . 67
4.1 FFT DE 16 PONTOS . . . 67
4.2 FFT DE 1024 PONTOS . . . 72
5 CONCLUS ˜AO . . . 78
AP ˆENDICE A - PROGRAMANDO O ZYNQBERRY . . . 83
11 1 INTRODUC¸ ˜AO
A Transformada Discreta de Fourier ou (DFT) (Discrete Fourier transform), segundo Bingham (1990), ´e um recurso amplamente utilizado em aplicac¸ ˜oes como processamento de imagens, comunicac¸ ˜ao em redes locais sem-fio ou WLAN (Wireless Local Area Network), multiplexac¸ ˜ao por divis ˜ao de frequ ˆencias ortogonais ou OFDM (Orthogonal Frequency Division Multiplexing), e medic¸ ˜oes de diferentes espectros.
O c ´alculo da DFT ´e uma tarefa que exige muitos recursos computacionais e que requer um projeto preciso para uma implementac¸ ˜ao eficiente (WANG et al., 2010). A DFT tem como base a pr ´opria s ´erie trigonom ´etrica de Fourier discretizada. Se-gundo Lathi (2007, p. 719), grac¸as a um algoritmo chamado (FFT) (Fast Fourier trans-form), desenvolvido por Cooley e Tukey (1965), o n ´umero de c ´alculos necess ´arios para executar uma DFT foi drasticamente reduzido, possibilitando um tempo de execuc¸ ˜ao aceit ´avel.
Mesmo reduzindo a complexabilidade de c ´alculo da DFT, a FFT depende basicamente de operac¸ ˜oes de multiplicac¸ ˜oes complexas, as quais consomem mui-tos recursos computacionais, e demandam blocos multiplicadores dedicados. Para solucionar este problema ´e poss´ıvel utilizar o algoritmo CORDIC (COordinate Rota-tion DIgital Computer ), desenvolvido por Jack E. Volder(VOLDER, 1959). Por meio desse algoritmo ´e poss´ıvel tratar as multiplicac¸ ˜oes complexas, semelhantes as pre-sentes no c ´alculo da FFT, como operac¸ ˜oes de rotac¸ ˜ao vetorial, e efetu ´a-las por meio de operac¸ ˜oes de deslocamento de bits (shifters) e somas, de forma e economizar recursos computacionais.
Segundo Zhou et al. (2009), os dispositivos conhecidos como FPGA (Field Programmable Gate Array) s ˜ao cada vez mais usados em implementac¸ ˜ao de hardware para telecomunicac¸ ˜oes, por exemplo, devido a sua capacidade de alcanc¸ar um elevado desempenho, aliado a sua flexibilidade de configurac¸ ˜ao. Desta forma, o uso de FPGA para implementar um hardware espec´ıfico para o c ´alculo da FFT torna-se relevante.
Uma da formas de realizar o c ´alculo da DFT de forma mais eficiente con-siste em dividir o c ´alculo em partes, sendo executados em paralelo por dispositivos de hardware espec´ıficos para esta finalidade. Isto pode ser conseguido a partir de dispo-sitivos que permitem construir elementos de hardware de forma configur ´avel, como as
1.1 Objetivos 12
FPGAs.
A FPGA ´e uma boa opc¸ ˜ao para a implementac¸ ˜ao do algoritmo da FFT de-vido a grande variedade de recursos de hardware sintetiz ´aveis, al ´em de possuir recur-sos de programac¸ ˜ao paralela que permite o processamento paralelo de sinais, con-ferindo assim uma maior rapidez na execuc¸ ˜ao do algoritmo. Portanto, implementar a FFT em uma plataforma dotada de FPGA ´e mais um fator motivador para a realizac¸ ˜ao deste trabalho (IBRAHIM et al., 2016).
1.1 OBJETIVOS
1.1.1 OBJETIVO GERAL
Utilizando a Linguagem de Descric¸ ˜ao de hardware VHSIC (VHDL), imple-mentar um circuito l ´ogico que, dado um conjunto de dados digitais de entrada, seja capaz de processar a Transformada R ´apida de Fourier (FFT), utilizando a metodolo-gia do algoritmo Radix-2. Buscar na implementac¸ ˜ao alcanc¸ar o melhor desempenho em termos de ciclos de clock necess ´arios para que completar a tarefa de processa-mento da FFT, tendo como restric¸ ˜ao os recursos dispon´ıveis na FPGA utilizada.
1.1.2 OBJETIVOS ESPEC´IFICOS
Ao longo deste trabalho ser ˜ao buscados os seguintes objetivos espec´ıficos:
• Identificar a melhor vers ˜ao do algoritmo CORDIC para a Implementac¸ ˜ao do
c ´alculo da FFT: Tendo em vista as restric¸ ˜oes de recursos da FPGA utilizada,
encontrar o algoritmo que implemente a operac¸ ˜ao de rotac¸ ˜ao vetorial, essencial no c ´alculo da FFT, que reduza o erro da aproximac¸ ˜ao e maximize o desempenho da operac¸ ˜ao.
• Projetar os valores dos par ˆametros CORDIC que maximizem a operac¸ ˜ao de
rotac¸ ˜ao vetorial: Dado a vers ˜ao do Algoritmo CORDIC escolhido, encontrar um
m ´etodo de otimizac¸ ˜ao para a relac¸ ˜ao erro de aproximac¸ ˜ao x desempenho. A partir do m ´etodo escolhido obter o conjunto otimizante de par ˆametros para cada
ˆangulo de rotac¸ ˜ao a ser realizado para o c ´alculo da FFT.
• Implementar o hardware do m ´odulo CORDIC a ser utilizado: Com base na variac¸ ˜ao do algoritmo CORDIC desenvolver em VHDL o hardware necess ´ario
1.2 Organizac¸ ˜ao do Trabalho 13
para realizar a operac¸ ˜ao de rotac¸ ˜ao vetorial, tamb ´em visando a otimizac¸ ˜ao de recursos.
• Implementar e testar uma FFT de 16 pontos : Implementar uma FFT 16 pontos a partir da arquitetura desenvolvida. Em seguida realizar o testa da implementac¸ ˜ao por meio do envio de diferentes sinais de entrada digitais, re-alizando os devidos testes de desempenho.
• Implementar o hardware da FFT de 1024 pontos: Com base em na arquitetura desenvolvida implementar uma FFT de 1024 pontos. Ao final realizar os devidos testes para a comparac¸ ˜ao de desempenho.
1.2 ORGANIZAC¸ ˜AO DO TRABALHO
A fim de se apresentar de forma clara e organizada, o presente traba-lho se encontra estruturado em quatro etapas: Revis ˜ao de Literatura, Materiais e M ´etodos, Resultados e Discuss ˜ao e Conclus ˜ao. A Revis ˜ao de Literatura presente no Cap´ıtulo 2, aborda todo o embasamento te ´orico necess ´ario para o desenvolvimento e implementac¸ ˜ao deste trabalho. Em seguida, o Cap´ıtulo 3: Materiais e M ´etodos, trata das metodologias e procedimentos realizados para desenvolver a implementac¸ ˜ao do projeto. No Cap´ıtulo 4 ´e ent ˜ao apresentado os Resultados e Discuss ˜oes proveniente da implementac¸ ˜ao e teste do projeto. E por ´ultimo, o Cap´ıtulo 5 trata das conclus ˜oes obtidas com o desenvolvimento deste trabalho.
14
2 REVIS ˜AO DE LITERATURA
Nos mais diversos campos da ci ˆencia os conceitos de sinais e sistemas possuem um papel importante, sendo utilizados nas aplicac¸ ˜oes mais variadas como ac ´ustica, sismologia, projeto de circuitos, sistemas de gerac¸ ˜ao e distribuic¸ ˜ao de ener-gia, controle de processos qu´ımicos, e engenharia biom ´edica, entre outros. Indiferen-temente da natureza f´ısica de uma aplicac¸ ˜ao, os sinais e sistemas que surgem destas possuem duas caracter´ısticas b ´asicas; os sinais cont ´em informac¸ ˜oes sobre a natureza ou comportamento de um fen ˆomeno, e os sistemas respondem a um sinal especifico produzindo um comportamento desejado (OPPENHEIM; WILLSKY, 2010, Pr ´ologo).
Um sinal ´e um conjunto de dados ou informac¸ ˜oes, que podem descrever di-versos tipos de fen ˆomenos, com a temperatura de um volume de ´agua em um ebulidor controlado, o registro de vendas de uma empresa ou ainda os valores de fechamento de uma bolsa de valores. J ´a os sistemas s ˜ao entidades que processam conjuntos de sinais (ditos entrada), e geram outro conjunto de sinais como resposta (ditos sa´ıdas). Os sistemas podem ser constitu´ıdos de componentes f´ısicos, el ´etricos, mec ˆanicos, hidr ´aulicos ou apenas l ´ogicos (LATHI, 2007, p. 75). O filtro de ´audio, que modifica o sinal de entrada gerando um sinal de ´audio com as caracter´ısticas desejadas, ´e um exemplo de sistema. Assim como o ebulidor controlado que a partir de um sinal de refer ˆencia (entrada) gera um sinal de controle para o atuador da resist ˆencia de aque-cimento, de modo a elevar a temperatura do liquido at ´e a refer ˆencia.
Segundo Oppenheim e Willsky (2010, p. 1), existe uma linguagem ade-quada para descrever sinais e um conjunto poderoso de ferramentas para analis ´a-los, capaz de se aplicar a problemas oriundos de diversos dom´ınios. A s ´erie de Fourier e a Transformada R ´apida de Fourier s ˜ao ambas exemplos dessas ferramentas, e ser ˜ao apresentadas nos pr ´oximos cap´ıtulos.
2.1 REPRESENTAC¸ ˜AO DE FOURIER PARA SINAIS 2.1.1 S ´ERIE DE FOURIER
Segundo Lathi (2007, p. 530), ”Um sinal peri ´odico x(t) com per´ıodo T0pode ser descrito como a soma de senoides de frequ ˆencia f0 e todas as suas harm ˆonicas”,
2.1 Representac¸ ˜ao de Fourier para Sinais 15
conforme apresentado na seguinte express ˜ao:
x(t) = a0+ ∞ X n=1
ancos(nω0t) + bnsen(nω0t) (1)
Esta ´e a chamada s ´erie de Fourier para sinais peri ´odicos, ou apenas s ´erie de Fourier. Na express ˜ao da Equac¸ ˜ao (1), a s ´erie de Fourier est ´a na forma trigo-nom ´etrica, onde ω0 ´e a frequ ˆencia fundamental de x(t), e a0, an e bns ˜ao os coeficien-tes de amplitude das harm ˆonicas que comp ˜oes x(t), sendo a0a harm ˆonica zero (n´ıvel CC).
Os coeficientes a0, ane bnde (1 ) s ˜ao determinados pelas seguintes equac¸ ˜oes: a0 = 1 T0 Z T0 x(t)dt, (2) an = 2 T0 Z T0 x(t)cos(nω0t)dt, (3) bn = 2 T0 Z T0 x(t)sen(nω0t)dt, (4)
em que T0 representa o per´ıodo relativo a frequ ˆencia fundamental f0.
A s ´erie de Fourier, al ´em da forma trigonom ´etrica, tamb ´em pode ser apre-sentada na forma exponencial, em termos de ejω0t, como apresentado na sec¸ ˜ao ante-rior. A forma exponencial, segundo Lathi (2007, p. 533), ´e dada pela express ˜ao:
x(t) = ∞ X −∞
Cnejnω0t, (5)
em que o coeficiente Cn e an ´alogo aos coeficientes an e bn da serie trigonom ´etrica, sendo obtido por:
Cn = 1 T0 Z T0 x(t)ejnω0tdt. (6)
Tanto a forma trigonom ´etrica quanto a exponencial da s ´erie de Fourier con-sideram x(t)como sendo uma func¸ ˜ao qualquer, real ou complexa. Entretanto na maio-ria das aplicac¸ ˜oes x(t) ´e real, como ´e o caso dos sinais neste trabalho. Segundo Lathi (2007, p. 533), se o sinal de entrada do sistema LTI x(t) ´e real, isso significa que an e bn tamb ´em s ˜ao reais para todos os valores de n, assim a s ´erie de Fourier pode ser representada na forma compacta por:
x(t) = D0+ ∞ X n=1
2.1 Representac¸ ˜ao de Fourier para Sinais 16 sendo: D0 = a0, (8) Dn= p a2 n+ b2n, (9) θn = tan−1 −bn an . (10) 2.1.2 ESPECTRO DE FOURIER
Por meio da s ´erie de Fourier na forma compacta, conforme (7), conclui-se que um sinal real peri ´odico x(t) pode ser descrito como uma soma de senoides de frequ ˆencias nω0 e amplitudes Dne fases θn. Segundo Lathi (2007, p. 533), o espectro exponencial de Fourier ´e trac¸ado a partir de Dn e θn em func¸ ˜ao das frequ ˆencias nω0. Portanto, s ˜ao tac¸ados dois gr ´aficos para o espectro exponencial de Fourier, um que relaciona Dncom nω0, chamado espectro de magnitude, e outro que relaciona θncom nω0, chamado de espectro de fase.
Tomando como exemplo um sinal x(t) = sin(2π15t) + sin(2π40t), expresso em um per´ıodo igual a 1 segundo, como mostrado na Figura 1. Para este sinal ´e expresso o espectro de Fourier na mesma Figura (1), com o espectro de magnitude e fase.
2.2 Transformada Discreta de Fourier 17 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Tempo(s) -2 0 2 X(t) Signal Original 0 0.2 0.4 0.6 |FFT(X)| Espectro de Magnitude -50 -40 -30 -20 -10 0 10 20 30 40 50 Frequência (Hz) -50 -40 -30 -20 -10 0 10 20 30 40 50 Frequência (Hz) -2 0 2 FFT(X) ( rad) Espectro de Fase
Figura 1: Expectro de Fourier do Sinal x(t) = sin(2π15t) + sin(2π40t) Fonte: Autoria Pr ´opria
Nota-se que o espectro da Figura (1) aparecem frequ ˆencias negativas, as quais dividem a magnitude com suas frequ ˆencias sim ´etricas. Isso ocorre devido a simetria que o ˆangulo nω0t possui no c ´alculo dos coeficientes da s ´erie de Fourier. Para resolver este problema, basta considerar apenas a parte positiva do espectro e multiplicar por 2 a magnitude das frequ ˆencias no espectro de magnitude.
Para Lathi (2007, p. 533), os dois gr ´aficos de magnitude e fase juntos for-mam o espectro de frequ ˆencia, o qual revela os conte ´udos de frequ ˆencia do sinal x(t), com suas amplitudes e fase. Conhecendo-se este espectro, n ˜ao s ´o ´e poss´ıvel anali-sar o sinal x(t) dentro do dom´ınio da frequ ˆencia, como tamb ´em reconstru´ı-lo de forma f ´acil.
2.2 TRANSFORMADA DISCRETA DE FOURIER
Para ser ´util em uma aplicac¸ ˜ao computacional a transformada de Fourier deve estar na sua forma discreta, conhecida como DFT (Discrete Fourier Transform).
2.3 Transformada R ´apida de Fourier 18
Segundo HAYKIN e Veen (2001, p. 314), a DFT ´e a ´unica representac¸ ˜ao de Fourier que pode ser calculada por um computador, sendo amplamente usada para manipular sinais.
Segundo Oppenheim e Willsky (2010, p. 125), a transformada discreta de Fourier ´e representada pela seguinte express ˜ao:
Xr = N0−1 X n=0 xnejω0nr, (11) onde: Ω0 = 2π N0 , (12) ω0T = Ω0 = 2pi/N0 (13)
Para compactar a express ˜ao de (11), se faz a substituic¸ ˜ao da express ˜ao exponencial pela vari ´avel W , de modo que WN0 = e−2π/N0 = e−jΩ0 (MEYER-BAESE, 2007, p. 344). Logo a express ˜ao para DFT ´e dada por:
Xr = N0−1 X n=0 xnejω0nr, (14) onde: 0 ≤ k ≤ N0− 1. (15)
2.3 TRANSFORMADA R ´APIDA DE FOURIER
Para se calcular uma DFT de N0 valores usando apenas (14), ´e necess ´ario realizar um total de N2
0 multiplicac¸ ˜oes e N0(N0− 1) somas, utilizando n ´umeros com-plexos. Quando N0 assume um valor elevado, muitos recursos computacionais s ˜ao necess ´arios, at ´e chegar ao ponto de que esse algoritmo se torna impratic ´avel.
A reduc¸ ˜ao do n ´umero de operac¸ ˜oes matem ´aticas necess ´arias para calcular a DFT ´e poss´ıvel a partir do algoritmo criado por J.W. Cooley e John Tukey, conhecido como Transformada R ´apida de Fourier ou FFT (Fast Fourier Transform) Cooley e Tukey (1965). Para reduzir o n ´umero de c ´alculos, a FFT se utiliza da propriedade linear da transformada de Fourier Lathi (2007, p. 719). Segundo Oppenheim e Willsky (2010, p. 119), a transformada de Fourier de um sinal pode ser dada pela combinac¸ ˜ao linear
2.3 Transformada R ´apida de Fourier 19
da transformada de Fourier de segmentos menores do mesmo sinal. Logo, ´e poss´ıvel aplicar `a DFT o paradigma da divis ˜ao e conquista, o qual ´e um recurso muito utilizado em algoritmos de ordenac¸ ˜ao.
Segundo Cormen et al. (2002, p. 21), um algoritmo de Divis ˜ao e Con-quista realiza o desmembramento de um problema em v ´arios subproblemas que s ˜ao id ˆenticos ao original, por ´em menores em sua faixa de ac¸ ˜ao, o que os torna mais simples de resolver. Em seguida, resolvem-se os subproblemas recursivamente e combinam-se essas soluc¸ ˜oes de modo a obter a soluc¸ ˜ao para o problema original.
De modo muito semelhante, o algoritmo da FFT prev ˆe uma divis ˜ao recur-siva da DFT em dois blocos: bloco par e o bloco ´ımpar, como mostrado abaixo(CHU; GEORGE, 1999, p. 35): Xr = N0 2 −1 X n=0 x2nWN02nr | {z } P arcela P ar + N0 2 −1 X n=0 x2n+1W (2n+1)r N0 | {z } P arcela ´Impar . (16)
Nessa mesma equac¸ ˜oes, os limites dos somat ´orios de ambas as parcelas ´ımpar e par foram redefinidos para englobar apenas metade dos N0pontos, bem como os expoentes de W foram ajustados.
Utilizando algumas das propriedades geom ´etricas de W , j ´a que esse re-presenta um n ´umero complexo, pode-se realizar simplificac¸ ˜oes importantes em 17. Primeiro, nota-se que WN0/2 = WN02 , logo:
Xr = N0 2 −1 X n=0 x2nWN02nr | {z } Gr + N0 2 −1 X n=0 x2n+1W (2n+1)r N0 | {z } Hr . (17)
Como Gre Hrs ˜ao DFTs com N0/2pontos cada, ent ˜ao ambos possuem um per´ıodo de N0/2. Com base na propriedade peri ´odica dessas DFTs, pode-se utilizar as simplificac¸ ˜oes (18) e (19) para reduzir o n ´umero de c ´alculos na DFT (LATHI, 2007, p. 721). Gr+N0 2 = Gr, (18) Hr+N0 2 = Hr, (19)
2.3 Transformada R ´apida de Fourier 20 Wr+N02 N0 = W N0 2 N0 = e −jπ WN0 = −WN0r . (20)
Al ´em disso, a express ˜ao em (20) pode ser assumida para se reduzir o n ´umero de c ´alculos da FFT. Portanto, usando (21) e (22) se obt ´em, respectivamente, os primeiros N0/2pontos e os ´ultimos N0/2pontos da FFT:
Wr+N02 N0 = W N0 2 N0 = e −jπ WN0 = −WN0r , (21) Wr+N02 N0 = W N0 2 N0 = e −jπ WN0 = −WN0r , (22)
Portanto, uma DFT pode ser calculada combinando duas DFTs de N0/2, tal como mostrado em (21) e (22). E comum na literatura representar o processo´ de c ´alculo de DFT, feito pelo algoritmo da FFT, pelo diagrama da Figura (2). Este diagrama ´e conhecido como Butterfly de Fluxo do Sinal (CHU; GEORGE, 1999, p. 36).
Figura 2: Butterfly do Fluxo do Sinal Fonte: Lathi (2007, p. 721)
Aliando o conceito de divis ˜ao em conquista ao m ´etodo de c ´alculo da DFT, usando o diagrama Butterfly, a representac¸ ˜ao do algoritmo da FFT pode ser facilmente feita pelo diagrama da Figura (3) (LATHI, 2007, p. 722), onde a FFT ´e feita para apenas 8 amostras de sinal X.
2.3 Transformada R ´apida de Fourier 21 -WN0 0 WN0 0 x0 x4 X0 X1 -WN0 0 WN0 0 x2 x6 X2 X3 -WN0 0 WN0 0 x1 x5 X4 X5 -W0 WN0 0 x3 x7 X6 X7 -WN0 0 WN0 0 WN0 2 -WN 2 -WN0 0 WN0 0 WN0 2 -WN 2 -WN0 2 -WN0 3 -WN0 0 -WN0 1 0 0 WN0 2 WN0 3 WN0 0 WN0 1 DFT - N = 40 DFT - N = 40 DFT - N = 80
Nível 2 Nível 1 Nível 0
DFT - N = 20 DFT - N = 20 DFT - N = 20 DFT - N = 20 Figura 3: FFT de 8 Pontos Fonte: Lathi (2007, p. 722)
Ap ´os se dividir uma DFT de tamanho N0 em duas DTFs de tamanho N0/2, e subdividindo cada uma das DFTs de tamanho N0/2 em duas N0/4 (LATHI, 2007, p. 721). E assim o procedimento continua at ´e que se atinja um n´ıvel em que as DFTs tenham tamanho N0/2n = 2, ou seja, quando se atinge DFTs que possuam um custo de c ´alculo m´ınimo.
Um fato importante sobre o algoritmo da FFT ´e que o valor N0 pode ser escolhido segundo a relac¸ ˜ao N0 = rn, sendo n o numero de n´ıveis necess ´arios para calcular a FFT, e r ´e o m´ınimo tamanho DFT. Os algoritmos de FFT mais usados possuem a base r igual a 2 ou a 4. Consequentemente, esses algoritmos s ˜ao conhe-cidos como Radix-2 e Radix-4, respectivamente (MEYER-BAESE, 2007, p. 365). Nesse trabalho o foco ser ´a o algoritmo com a base r igual a 2, ou seja, o Radix-2.
Na Figura (3) as DFTs est ˜ao agrupadas por n´ıveis, cada n´ıvel abrange as DFTs de mesmo tamanho N0/n, e no ´ultimo n´ıvel a esquerda h ´a quatro DFTs de tamanho 2. O n ´umero de n´ıveis necess ´arios em uma FFT de N0 pontos ´e log2N0. Os valores de X, na Figura (3) `a direita est ˜ao ordenados de forma crescente, por ´em os valores de x `a esquerda est ˜ao ordenados de forma diferente. Est ´a ordenac¸ ˜ao ´e
2.3 Transformada R ´apida de Fourier 22
conhecida como Bit-Reverse (CHU; GEORGE, 1999, p. 51).
Segundo Chu e George (1999, p. 51), quando se divide o processo de c ´alculo de uma DFT em duas, sendo uma respons ´avel pelos valores pares e a ou-tra pelo valores ´ımpares, conforme as conex ˜oes entres o n´ıveis v ˜ao ocorrendo, h ´a permutac¸ ˜oes entre os sinais. O processo de Bit-Reverse prev ˆe as permutac¸ ˜oes, sendo poss´ıvel saber qual a ordem adequada dos sinais na entrada da FFT. Para aplicar o conceito de Bit-Reverse, basta considerar um elemento xk de ordem n e escrev ˆe-lo na base bin ´aria com log2N0 bits. Em seguida, para determinar a posic¸ ˜ao de xk basta converter novamente para base decimal o n ´umero bin ´ario obtido, lendo esse na ordem inversa dos bits.
Na FFT da Figura (3) a subdivis ˜ao das DFTs ´e feita a partir da sa´ıda, sinal em frequ ˆencia, com DFT de 8 pontos, at ´e a entrada, sinal no tempo, com as DFTs de 2 pontos com custo m´ınimo. Essa subdivis ˜ao ´e conhecida como decimac¸ ˜ao, e no caso da Figura (3), ela ´e feita a partir do sinal no tempo, logo essa estrutura ´e co-nhecida como decimac¸ ˜ao no tempo. Por ´em, existe uma outra forma, a decimac¸ ˜ao na frequ ˆencia. A partir de uma alterac¸ ˜ao em (17), ´e poss´ıvel alterar a ordem da decimac¸ ˜ao, partindo do sinal de entrada no tempo, at ´e a sa´ıda em frequ ˆencia, como pode ser visto na Figura(4) (CHU; GEORGE, 1999, p. 37).
2.4 Algoritmo CORDIC 23
N0
Figura 4: FFT DIF de 8 Pontos
Fonte: Adaptado de Chu e George (1999, p. 44)
Na decimac¸ ˜ao em frequ ˆencia, a ordem de entrada dos sinais na FFT ficam ordenados de forma crescente, por ´em a sa´ıda passa a estar ordenada no esquema Bit-Reverse. Esse esquema de decimac¸ ˜ao ´e preferencialmente escolhido por dispen-sar a reordenac¸ ˜ao dos dados de entrada. Ao final de todo o processo de simplificac¸ ˜ao
do c ´alculo da DFT, o algoritmo da FFT necessita apenas realizar (N0/2) log2N0multiplicac¸ ˜oes e N0 log2 N0 somas complexas (LATHI, 2007, p. 720). Reduz-se assim a
complexabili-dade do algoritmo, tornando a DFT pratic ´avel at ´e para valores elevados de N0.
2.4 ALGORITMO CORDIC
Na equac¸ ˜ao (21) nota-se que o c ´alculo a FFT depende essencialmente de um multiplicac¸ ˜ao complexa entre Wr
N0 e Hr. Hr representa um vetor complexo qual-quer, e Wr
N0 ´e igual a e 2πr
N0. Essa tarefa pode ser realizada atrav ´es da representac¸ ˜ao de Wr
N0 e Hrna forma retangular, considerando para efeitos de exemplo WN0r = x + iy e Hr = a + ib, logo:
2.4 Algoritmo CORDIC 24
WN0r = x + iy, (23)
Hr = a + ib, (24)
Hr· WN0r = (x + iy)(a + ib), (25) Hr· WN0r = (xa − yb) + i(xb + ya). (26)
Logo, s ˜ao necess ´arios utilizar 4 multiplicadores e 2 somadores, para com-pletar tal operac¸ ˜ao (DESPAIN, 1974, p. 1). Al ´em disso, multiplicadores s ˜ao mais elabo-rados e em muitos dispositivos FPGA existem apenas algumas dezenas, o que limita a utilizac¸ ˜ao de multiplicadores em paralelo, reduzindo a velocidade de c ´alculo da FFT. Para contornar o problema, considere expressar o vetor Hr na forma polar reθr e manter Wr N0 igual a e 2πr N0, logo: Hr = Re(θr), (27) Hr· WN0r = re (θr)· e 2πr N0 , (28) Hr· WN0r = re θr+2πr N0 . (29)
Assim Hr · WN0r ´e equivalente a operac¸ ˜ao trigonom ´etrica de rotacionar o vetor complexo Hr pelo ˆangulo de 2πr/N0, como pode ser visto na Figura (5).
Re Im
Figura 5: Rotac¸ ˜ao de Hr pelo ˆangulo
de 2πr/N0
Fonte: Autoria Pr ´opria
2.4 Algoritmo CORDIC 25
evitar o gargalo que eles possam provocar, parece dif´ıcil, por ´em existe uma t ´ecnica bastante usada no desenvolvimento de circuitos l ´ogicos em FPGA que o possibilita. Com o objetivo de oferecer uma soluc¸ ˜ao para o c ´alculo de func¸ ˜oes trigonom ´etricas mais simples, utilizando o m´ınimo de recursos de tempo e hardware, Jack E. Vol-der(VOLDER, 1959) desenvolveu a t ´ecnica de computac¸ ˜ao trigonom ´etrica CORDIC (COordinate Rotation DIgital Computer ).
2.4.1 CORDIC TRADICIONAL
O algoritmo CORDIC tem como base as microrotac¸ ˜oes do vetor alvo, de tal modo que cada microrotac¸ ˜ao possa ser feita por somas e deslocamentos de bits. Para tal, considere o vetor Hr = x + iy, e a matriz de rotac¸ ˜ao A em func¸ ˜ao do ˆangulo θ. A rotac¸ ˜ao do vetor pode ser dada por (GARRIDO et al., 2016):
" x0 y0 # = " cos(θ) −sin(θ) sin(θ) cos(θ) # " x y # . (30)
Isolando o termo cos(θ) de (30) ´e obtido o seguinte sistema: " x0 y0 # = cos(θ) " 1 −tan(θ) tan(θ) 1 # " x y # , (31)
o qual ´e a base da t ´ecnica CORDIC convencional (EL-MOTAZ et al., 2014).
Segundo (VOLDER, 1959), ao inv ´es de rotacionar completamente o vetor Hr pelo ˆangulo θ, ou pelo ˆangulo 2πr/N0 como mostrado na Figura (5), o algoritmo CORDIC rotaciona Hrpor ˆangulos θnmuito menores, sendo esses frac¸ ˜oes de θ, de tal forma que: θ = N −1 X n=0 µnθn+ ζ (32)
µn representa o sentido da microrotac¸ ˜ao θn, sendo que se for no sentido hor ´ario ´e igual a 1, caso contr ´ario ´e igual a -1, e ζ ´e o erro acumulado da aproximac¸ ˜ao pelo somat ´orio, que ser ´a considerado suficientemente pequeno para ser ignorado.
O primeiro ponto dessa abordagem ´e o fato de que se um ˆangulo θn for suficientemente pequeno ´e poss´ıvel afirmar que:
2.4 Algoritmo CORDIC 26
Assim ´e poss´ıvel substituir θ no sistema de (31), e obter a seguinte ex-press ˜ao: " x0 y0 # = cos(tan−1θn) " 1 −tan(tan−1θ n) tan(tan−1θn) 1 # " x y # . (34)
O segundo ponto ´e que para satisfazer (32) s ´o ´e necess ´ario que a soma do conjunto de microrotac¸ ˜oes θnresulte no ˆangulo θ, o que abre a possibilidade de se escolher um conjunto de microrotac¸ ˜oes baseadas em deslocamento de bits, como:
θn = tan−12−n (35)
Logo, aplicando a Equac¸ ˜ao(35) em (34) obt ˆem-se a express ˜ao final para CORDIC: " x0 y0 # = N −1 Y n=0 kc " 1 −µ2−n µ2−n 1 # " x y # , (36) kc= cos(tan−1(2−n)) = 1 √ 1 + 2−2n, (37) µ ∈ {−1, 1}. (38)
kc ´e calculado a cada microrotac¸ ˜ao n, assim o valor total do ganho acu-mulado por Hr ao fim da operac¸ ˜ao de rotac¸ ˜ao ´e dado pelo produto de todos os kc. O n ´umero total de microrotac¸ ˜oes (N ) ´e escolhido de acordo com o SQNR (Signal-to-Quantization-Noise Ratio ) admiss´ıvel a cada rotac¸ ˜ao. Segundo (VOLDER, 1959),
considerando N → ∞, Kc passa a ser constate e aproximadamente igual a 0, 6073. O inverso de Kc ´e igual a 1, 647, sendo conhecido como Ganho CORDIC. Tal ganho ´e independe do ˆangulo a ser rotacionado, e em muitos sistemas esse ganho ´e s ´o compensado fora do bloco l ´ogico de c ´alculo do CORDIC.
Como pode ser observado, o algoritmo CORDIC se resume a operac¸ ˜oes de deslocamento de bit e somas. A direc¸ ˜ao das microrotac¸ ˜oes ´e determinada por µ, que depende diretamente do sinal do ˆangulo θn a se rotacionar. Em aplicac¸ ˜oes nas quais o ˆangulo de rotac¸ ˜ao ´e previamente conhecido, que ´e o caso da FFT, as sequ ˆencias de rotac¸ ˜oes µ podem ser armazenado em uma mem ´oria (ROM) Read-Only Memory (EL-MOTAZ et al., 2014). Isso torna as microrotac¸ ˜oes como n iterac¸ ˜oes, armazenando em z os ˆangulos rotacionados a cada iterac¸ ˜ao de θn, sendo o algoritmo
2.4 Algoritmo CORDIC 27
CORDIC expressado por:
x(n + 1) = x(n) − [µ2−n]y(n), (39) y(n + 1) = y(n) + [µ2−n]x(n), (40) z(n + 1) = z(n) − tan−1[µ2−n], (41) (42) sendo: Hr = x(0) + iy(0), (43) θ = z(0), (44) n = {0, 1, ..., N − 1} , (45) µ = " 1 z (n) ≥ 0, −1 z (n) < 0 # . (46) 2.4.2 EEAS-CORDIC
No algoritmo CORDIC, cada ˆangulo de rotac¸ ˜ao θn ´e necessariamente deter-minado de maneira sequencial ap ´os cada iterac¸ ˜ao n, utilizando o conjunto de ˆangulos elementares definidos como (WU et al., 2003):
S1 = {tan−1(µ2−n)}, (47)
: µ ∈ {−1, 1}, n ∈ {0, 1, . . . , N − 1}. (48)
A partir do ˆangulo inicial de Hr, o algoritmo Cordic realiza as N iterac¸ ˜oes, deslocando o vetor por meio do conjunto de ˆangulos elementares, de forma a reduzir a diferenc¸a entre o ˆangulo atual e o ˆangulo desejado. Para fins de comparac¸ ˜ao a Figura (6) apresenta a densidade combinacional dentro do c´ırculo trigonom ´etrico do conjunto de ˆangulos elementares do algoritmo CORDIC tradicional.
2.4 Algoritmo CORDIC 28
Figura 6: ˆAngulos Elementares - Cordic Tradicional com N=4
Fonte: (LIN; WU, 2005)
Cada ponto em (6) representa um ˆangulo de rotac¸ ˜ao θn poss´ıvel por meio das diferentes combinac¸ ˜oes do par ˆametro µ, presente em (48). Para o algoritmo COR-DIC tradicional qualquer vetor ap ´os o processo de rotac¸ ˜ao apresentar ´a um m ´odulo 1,63 vezes maior do que seu valor original por conta do ganho kc, apresentado anteri-ormente. Logo, na Figura (6) todos os ˆangulo de rotac¸ ˜ao θn poss´ıveis se apresentam fora do c´ırculo unit ´ario, afim de representar esse ganho.
Segundo Wu e Wu (2001) o maior problema do CORDIC ´e a baixa veloci-dade computacional de c ´alculo desse algoritmo, devido principalmente a necessiveloci-dade de um grade n ´umero de iterac¸ ˜oes N para atingir um erro de aproximac¸ ˜ao ζ aceit ´avel. O error de aproximac¸ ˜ao ζ ´e dado por:
ζ = θ − N −1 X n=0 µθn = θ − N −1 X n=0 µ tan−1(2−n) , (49) µ ∈ {−1, 0, 1} (50)
Em aplicac¸ ˜oes em que os ˆangulos de rotac¸ ˜ao s ˜ao conhecidos, ´e poss´ıvel relaxar as restric¸ ˜oes da Equac¸ ˜ao (6), utilizando o m ´etodo Angle Recoding (AR) (WU; WU, 2001). O AR tem como objetivo reduzir o n ´umero de iterac¸ ˜oes CORDIC e o erro ζ . Para tal, o AR que expande o conjunto de combinac¸ ˜oes lineares em (48),
2.4 Algoritmo CORDIC 29
adicionando zero ao conjunto de µ. Com isso, obt ´em-se uma melhor aproximac¸ ˜ao para certos valores de θ e uma reduc¸ ˜ao de at ´e 50% no n ´umero de iterac¸ ˜oes (MEHER et al., 2009).
Por outro lado, o m ´etodo Extended Elementary-Angle-Set Recoding (EE-ASR) apresenta um m ´etodo baseado no AR que, al ´em de expandir o conjunto de µ, estende tamb ´em o conjunto de ˆangulos elementares (Elementary-Angle-Set, EAS), visando aumentar a possibilidades de decomposic¸ ˜ao do ˆangulo de rotac¸ ˜ao(WU et al., 2003). Para perceber a modificac¸ ˜ao que o EEASR prop ˜oem, nota-se primeiramente que o conjunto de ˆangulos elementares no CORDIC utilizando AR ´e definido como:
S1 = {tan−1(µ2−s)}, (51)
: µ ∈ {−1, 0, 1}, s ∈ {0, 1, . . . , N − 1}. (52)
Como ´e poss´ıvel notar em (51), os ˆangulos elementares dependem de ape-nas um termo pot ˆencia de dois, ou Signed Power of Two (SPT). Segundo (WU et al.,
2003), para aumentar a precis ˜ao dos ˆangulos elementares e, consequentemente, re-duzir o n ´umero de iterac¸ ˜oes pode-se adicionar mais um termo SPT em (51), resultando em:
S2 = {tan−1(µ02−s0 + µ12−s1)} (53) : µ0, µ1 ∈ {−1, 0, 1}, s0, s1 ∈ {0, 1, . . . , S} (54) S ´e denominado como o n ´umero m ´aximo de deslocamentos de bits a direita que po-dem ser realizados. Esse valor est ´a diretamente relacionado com o quantidade de bits utilizados para representar um n ´umero dentro da arquitetura que implementa o COR-DIC. Por exemplo, em uma aplicac¸ ˜ao em FPGA, em que a palavra bin ´aria utilizada para representar um n ´umero inteiro tenha apenas 16 bits, n ˜ao faz sentido o valor de S ser maior do 15. Portanto, alterando a equac¸ ˜ao (34) com base em (53) ´e obtida a express ˜ao para c ´alculo iterativo CORDIC utilizando o EEASR:
" x(n + 1) y(n + 1) # " 1 µ02−s0(n)+ µ12−s1(n) µ02−s0(n)+ µ12−s1(n) 1 # " x(n) y(n) # , (55) : µi, µj ∈ {−1, 0, 1}, s0, s1 ∈ {0, 1, . . . , S}, (56)
2.4 Algoritmo CORDIC 30
θn = tan−1 µ02−s0(n)+ µ12−s1(n) , (57)
z(n + 1) = z(n − 1) + θn, (58)
´
E importante notar que ao adicionar mais termos a S1, o ganho Kctamb ´em ´e modificado, passando a ser definido por:
Kn =
1 p
1 + [µ02−s0(n)+ µ12−s1(n)]2
. (59)
Com a alterac¸ ˜ao de Kc, o ganho passa a n ˜ao ser mais constante, e varia de acordo com cada iterac¸ ˜ao N . Sendo assim necess ´ario calcular o ganho Kcpara cada iterac¸ ˜ao afim de realizar a compensac¸ ˜ao. O valor de Kcao final de cada operac¸ ˜ao de c ´alculo CORDIC passa a ser definido por:
Kc = N −1
Y n=0
Kn. (60)
Para casos em que o ˆangulo θ a ser rotacionado ´e conhecido, como ´e o caso da FFT, ´e poss´ıvel escolher previamente o conjunto de valores µ0, µ1, s0 e s1, e con-sequentemente atrav ´es da Equac¸ ˜ao (59) determinar o valor de Kc a ser compensado a cada iterac¸ ˜ao, e por meio de (60) determinar a compensac¸ ˜ao de Kc a ser realizada ap ´os cada operac¸ ˜ao de rotac¸ ˜ao. Para tal ´e realizado, ap ´os as iterac¸ ˜oes de rotac¸ ˜ao do algoritmo, uma correc¸ ˜ao no m ´odulo do vetor resultante por meio da seguinte operac¸ ˜ao de rotac¸ ˜ao modificada:
x(n + 1) = x(n) − [µ02−s0(n)+ µ12−s1(n)]x(n), (61) y(n + 1) = y(n) − [µ02−s0(n)+ µ12−s1(n)]y(n), (62)
z(n + 1) = z(n), (63)
em que µ0, µ1, s0 e s1 para essa operac¸ ˜ao s ˜ao escolhidos de modo a minimizar o erro de compensac¸ ˜ao de Kc.
Com a relaxac¸ ˜ao das restric¸ ˜oes introduzidas pelo m ´etodo AR e pelo EE-ASR, a densidade combinacional dentro do circulo unit ´ario do conjunto de ˆangulos elementares do Algoritmo CORDIC aumenta, se comparado ao CORDIC tradicional, como pode ser visto na Figura (7).
2.4 Algoritmo CORDIC 31
Figura 7: EEAS com N=2 e S=4 Fonte: Lin e Wu (2005)
Os pontos marcados na Figura (7) representam os conjuntos dos ˆangulos θn poss´ıveis de se obter em (57), utilizando diferentes combinac¸ ˜ao de par ˆametros µ0, µ1, s0 e s1. Diferente do algoritmo CORDIC tradicional, no EEAS o ganho do vetor ap ´os o rotacionamento realizado pelo algoritmo varia de acordo com a equac¸ ˜ao (59).
2.4.2.1 ALGORITMO TBS
A relaxac¸ ˜ao das restric¸ ˜oes feita pelos m ´etodos AR e EEASR tornaram o algoritmo iterativo CORDIC mais eficiente. Por ´em o EEASR abre uma quest ˜ao crucial: a determinac¸ ˜ao dos conjuntos µ e s. No algoritmo CORDIC tradicional, o valor de µ estava contido no conjunto {−1, 1} e era determinado com base no sinal de z(n) a cada iterac¸ ˜ao. No entanto, no m ´etodo AR µ passa a estar contido no conjunto {−1, 0, 1}. Logo, determinar o valor de µ a cada iterac¸ ˜ao torna-se uma tarefa de otimizac¸ ˜ao, em relac¸ ˜ao a minimizar o erro ζ, na forma (WU et al., 2003):
min ζ = θ − N −1 X n=0 µ tan−1(2−n) , (64) µ ∈ {−1, 0, 1}. (65)
2.4 Algoritmo CORDIC 32
elementares ´e definido por S1 em (48), e a cada iterac¸ ˜ao o deslocamento do vetor ´e feito com base no elemento n desse conjunto. O m ´etodo EEASR adiciona mais um termo SPT a express ˜ao do conjunto dos ˆangulos elementares S2, definido em (53), o que possibilita a escolha de qualquer termo s0 e s1. Dessa forma, al ´em de agre-gar a mesma necessidade de determinar o conjunto otimizado µ0 e µ1 de AR, o EE-ASR tamb ´em requer a determinac¸ ˜ao do conjunto otimizado s0 e s1, visando minimizar tamb ´em o erro ζ. Portanto, a func¸ ˜ao de minimizac¸ ˜ao do erro ´e dada pela seguinte express ˜ao: min ζ = θ − N −1 X n=0 tan−1(µ02−s0 + µ12−s1) , (66) : µ0, µ1 ∈ {−1, 0, 1}, s0, s1 ∈ {0, 1, . . . , S}. (67)
Para otimizar a Func¸ ˜ao (66) ´e poss´ıvel utilizar uma variedade de algoritmos heur´ısticos ou n ˜ao heur´ıstico a fim de determinar um conjunto de par ˆametros que minimize o erro ζ, como por exemplo Dijkstra, Caminhos M´ınimos ou o mais comum Algoritmo Greedy. Wu et al. (2003) prop ˜oe um m ´etodo de otimizac¸ ˜ao para par ˆametros EEAS chamado Trellis-Based Search(TBS).
A partir do n ´umero m ´aximo de iterac¸ ˜oes N , do ˆangulo de rotac¸ ˜ao θ e de W, que representa o n ´umero de bits de θ, o TBS emprega um m ´etodo de otimizac¸ ˜ao para encontrar os melhores par ˆametros s0(n), s1(n), µ
0 e µ1 (WU et al., 2003). TBS ´e baseado no efeito que os diferentes arranjos dos ˆangulos elementares S2 poss´ıveis tem sobre ζ. O algoritmo segue o seguintes passos:
1. Inicializac¸ ˜ao: Inicialmente ´e definido o vetor r(k), o qual representa o conjunto de ˆangulos elementares presentes na Equac¸ ˜ao (66), obtidos atrav ´es das poss´ıveis combinac¸ ˜ao n ˜ao redundantes de µ0, µ1, s0 e s1. Em seguida, ´e definida a ma-triz φ(n, k) para (1 ≤ n ≤ N ) e (1 ≤ k ≤ z(S2)), representando a estrutura de acumulac¸ ˜ao do algoritmo utilizada para alcanc¸ar o melhor resultado. N ´e o n ´umero de iterac¸ ˜oes desejadas, enquanto z(S2) representa o n ´umero de ele-mentos do vetor r(k). Para ent ˜ao iniciar o algoritmo, φ(1, k) ´e preenchido com o vetor r(k).
2. Acumulac¸ ˜ao: Em cada iterac¸ ˜ao n o algoritmo percorre os elementos k do vetor φ(n+1, k∗), atribuindo a cada valor k o menor resultado encontrado da express ˜ao kφ(n, k∗) + r(k) − θk. O ´ındice i varia 1 ≤ i ≤ N − 1, e k varia de 1 ≤ k ≤ Z(S
2.4 Algoritmo CORDIC 33
3. Determinac¸ ˜ao do ´Otimo Global: Ao final do processo de acumulac¸ ˜ao, os ele-mento da coluna φ(N, ) apresentam os resultados globais. Logo, dentro dessa coluna ´e determinado o valor que mais se aproxima de θ, defini-se esse como θT BS.
4. Determinac¸ ˜ao do Caminho Soluc¸ ˜ao: A partir do elemento θT BS da coluna φ(N, ) ´e trac¸ado o caminho reverso at ´e a coluna φ(1, ). A comec¸ar por (k0 = θ
T BS) e (i = N ) ´e escolhido o valor da coluna (i − 1) que minimiza kφ(1 : z(S2), i − 1) + r(k0) − θk. Em seguida se atribui a k0 a posic¸ ˜ao k do valor minimizante. Os valores k0 s ˜ao armazenados em um vetor e representam as combinac¸ ˜oes de
ˆangulos elementares que minimizam o erro .
Segue abaixo o pseudo-c ´odigo que implementa o algoritmo TBS.
1 % I n i c i a l i z a c¸ ˜a o 2 φ(1, k) = r(k) para todo k , 3 4 %Acumulac¸ ˜ao 5 F OR i = 1 to N − 1 6 F OR k = 1 to Z(S2)
7 φ(i + 1, k) = min {| φ(i, k∗) + r(k) − θ |: 1 ≤ k∗≤ Z(S2)}
8 EN D
9 EN D 10
11 %Determinac¸ ˜ao do ´Otimo G l o b a l
12 θT BS = min {| φ(Rm, k∗) − θ |: 1 ≤ k∗≤ Z(S2)}
13 Result(N ) = k∗ 14
15 %Determinac¸ ˜ao do Caminho Soluc¸ ˜ao 16 F OR i = N to 2
17 Encontra k0tal que φ(i, k∗) = min {| φ(i − 1, k0) + r(k∗) − θ |: 1 ≤ k0≤ Z(S2)}
18 k∗= k0 19 Result(i − 1) = k0 20 EN D 21 C ´odigo 2.1: Algoritmo TBS Fonte : Wu et al. (2003)
Nos trabalhos de Wu et al. (2003), os autores utilizam um exemplo base para explicar o algoritmo TBS, o qual tamb ´em ser ´a usado aqui. Para esse exemplo, o
2.4 Algoritmo CORDIC 34
ˆangulo de rotac¸ ˜ao θ ser ´a π/3, o n ´umero m ´aximo de iterac¸ ˜oes ser ´a N = 4 e a resoluc¸ ˜ao de θ ser ´a de W = 4 bits.
A primeira etapa do algoritmo ent ˜ao inicia com a definic¸ ˜ao do vetor r(k), e o preenchimento da primeira coluna da matriz φ(1, ), como pode ser visto na Figura (8). Na segunda etapa do algoritmo ´e realizada a acumulac¸ ˜ao, para cada elemento das colunas 2, 3 e 4 s ˜ao preenchidos com base na coluna anterior a partir da express ˜ao kφ(n, k∗) + r(k) − θk. Na Figura (8) o elemento φ(2, 15) representa essa etapa, e o valor do elemento φ(2, 15) ´e definido a partir da soma do ˆangulo representante da linha 15 (r(15)), com o elemento da coluna 1 que minimiza o erro de aproximac¸ ˜ao do resultado dessa soma com θ, que nesse caso ´e π/3. Esse processo se estende at ´e completar a coluna 4 da matriz φ. -1,107 -0,982 -0,896 -0,785 -0,643 -0,463 -0,245 -0 0,245 0,785 1,107 0,643 0,463 0,982 0,896 1.141 i=1 i=2 k=1 k=2 k=3 k=4 k=5 k=6 k=7 k=8 k=9 k=10 k=11 k=12 k=13 k=14 k=15
Figura 8: Exemplo de execuc¸ ˜ao do Algoritmo TBS Fonte: Autoria Pr ´opria
Ap ´os a etapa de acumulac¸ ˜ao, a ´ultima coluna de φ apresenta os resultados globais da acumulac¸ ˜ao. Logo, para determinar o valor ´otimo global ´e escolhido na co-luna φ(4, ) o valor θT BS, que mais se aproxima de θ ou π/3. Ap ´os essa etapa ´e iniciada a determinac¸ ˜ao do vetor Result, o qual deve conter o caminho soluc¸ ˜ao necess ´ario para
2.4 Algoritmo CORDIC 35
atingir o valor de ´otimo global θT BS. Na Figura (9) ´e apresentado os caminhos m´ınimos para cada coluna da matriz φ, consequentemente, o melhor caminho encontrado pelo algoritmo. -1,107 -0,982 -0,896 -0,785 -0,643 -0,463 -0,245 -0 0,245 0,785 1,107 0,643 0,463 0,982 0,896 i=1 i=2 k=1 k=2 k=3 k=4 k=5 k=6 k=7 k=8 k=9 k=10 k=11 k=12 k=13 k=14 k=15 i=3 i=4 0 0,124 0,211 0,321 0,463 0,643 0,862 1,030 1,141 1.030 1,131 0,999 0,961 1,016 1,054
Figura 9: Exemplo de execuc¸ ˜ao do Algoritmo TBS Fonte: Autoria Pr ´opria
A tabela (1) apresenta os valores encontrados para φ na execuc¸ ˜ao do exem-plo apresentado. Em destaque est ˜ao os valores do caminho soluc¸ ˜ao, que s ˜ao arma-zenados em Result.
2.4 Algoritmo CORDIC 36
i=1 i=2 i=3 i=4
k=1 -1.1071 0 0.0339 0 k=2 -0.9828 0.1244 0.1582 0.1244 k=3 -0.8961 0.2111 0.2450 0.2111 k=4 -0.7854 0.3218 0.3556 0.3218 k=5 -0.6435 0.4636 0.4975 0.4636 k=6 -0.4636 0.6435 0.6774 0.6435 k=7 -0.2450 0.8622 0.8961 0.8622 k=8 0 1.1071 1.0304 1.0304 k=9 0.4636 1.1071 1.1071 0.9612 k=10 0.6435 1.1071 1.1071 0.9991 k=11 0.2450 1.0304 1.1071 1.1410 k=12 0.7854 1.0304 0.9965 1.0304 k=13 1.1071 1.1071 1.1071 1.1410 k=14 0.9828 0.9828 1.1071 1.0167 k=15 0.8961 1.1410 1.0204 1.0543
Tabela 1: Matriz φ para o dado Exemplo
Fonte: Autoria Pr ´opria
2.4.3 MSR-CORDIC
Como pode ser visto na Sec¸ ˜ao (2.4.1), o Algoritmo Cordic Tradicional possui a necessidade de realizar a correc¸ ˜ao do ganho kc ap ´os o processo de rotac¸ ˜ao do vetor, al ´em de requisitar um n ´umero elevado de iterac¸ ˜oes a fim de reduzir o erro de aproximac¸ ˜ao do vetor. Para reduzir o n ´umero de iterac¸ ˜oes CORDIC, o EEAS aumenta o n ´umero de termos SPT, por ´em acaba por impactar o ganho Kc, que passa a n ˜ao ser mais constante e necessita ser compensado a cada iterac¸ ˜ao. Tanto no algoritmo tradicional quanto o EEAS a correc¸ ˜ao final de Kc, que se estabelece sempre abaixo da unidade, provoca uma degradac¸ ˜ao do SQNR.
Segundo Lin e Wu (2005), para evitar a degradac¸ ˜ao do SQNR ´e necess ´ario manter o m ´odulo do vetor de entrada o mais perto da unidade a cada iterac¸ ˜ao. Assim, Lin e Wu (2005) reformulam o algoritmo Cordic para um novo esquema que passa a distribuir os termos SPT de forma diferente do EEAS, com o intuito de dar mais liberdade ao ganho Kc e reduzir o n ´umero de iterac¸ ˜oes necess ´arias para atingir um erro de aproximac¸ ˜ao admiss´ıvel. Tal algoritmo pode ser expressado por:
2.4 Algoritmo CORDIC 37 " x(n + 1) y(n + 1) # " PI i=1µi2−si(n) − PJ j=1µj2−sj(n) PJ j=1µj2 −sj(n) PI i=1µi2 −si(n) # " x(n) y(n) # , (68) z(n + 1) = z(n − 1) + θn, (69) : µi, µj ∈ {−1, 0, 1}, si, sj ∈ {0, 1, . . . , S}, (70) : I + J = Nspt. (71)
A reformulac¸ ˜ao apresentada por Lin e Wu (2005) incrementa termos SPT nas parcelas x(n) de x(n + 1) e y(n) de y(n + 1), a fim de possibilitar o ganho Kc se tornar maior ou menor do que a unidade, dependendo da escolha dos par ˆametros Cordic. Assim ´e poss´ıvel realizar a operac¸ ˜ao de microrotac¸ ˜ao e a compensac¸ ˜ao do ga-nho Kc simultaneamente. Por tais motivos, esse algoritmo CORDIC ´e denominado de Mixed Scaling Rotation (MSR). Consequentemente, ao inserir mais termos na func¸ ˜ao CORDIC, tanto θn quanto Kc precisam ser corrigidos (KUO et al., 2003). Portanto θn e Kc passam a definidos por:
θn = tan−1 PJ j=1µj2 −sj(n) PI i=1µi2−si(n) ! , (72) Kn = 1 r PI i=12−si(n) 2 +PJ j=12 −sj(n)2 , (73) Kc = N −1 Y n=0 K(n). (74)
Como pode ser percebido em (73) e (72), com a escolha adequada dos conjuntos de termos µi, µj, Si e Sj, e dos valores de I e J ´e poss´ıvel aproximar Kc da unidade a cada iterac¸ ˜ao ao mesmo tempo em que o erro ζ ´e reduzido. No MSR o conjunto de ˆangulos elementares ´e definidor por:
S3 = {tan−1 PJ j=1µj2−sj(n) PI i=1µi2−si(n) ! }, (75) : µi, µj ∈ {−1, 0, 1}, si, sj ∈ {0, 1, . . . , S}, (76)
2.4 Algoritmo CORDIC 38
sendo o erro ζ ´e definido por:
min ζ = θ − N −1 X n=0 tan−1 PJ j=1µj2−sj(n) PI i=1µi2−si(n) ! , (77) : µi, µj ∈ {−1, 0, 1}, s0, s1 ∈ {0, 1, . . . , S}. (78)
Com mais graus de liberdade o MSR possui uma densidade combinacio-nal dentro do circulo trigonom ´etrico maior do que o CORDIC tradiciocombinacio-nal e o EEAS-CORDIC (KUO et al., 2003), como pode ser visto na Figura (10). Assim como no EEAS, o ganho do vetor ap ´os o rotacionamento, mostrado em (73), depende da escolha dos par ˆametros CORDIC. Por ´em no caso do MSR este ganho pode ser menor, maior ou igual a 1, como pode ser visto na Figura (10).
Figura 10: MSR com I=2, J=1 e N=2 Fonte: (LIN; WU, 2005)
O incremento de mais termos SPT na definic¸ ˜ao do ˆangulo de rotac¸ ˜ao θn acaba por dar ao conjunto dos ˆangulos elementares mais liberdade combinacional dentro do c´ırculo unit ´ario. No algoritmo CORDIC tradicional e no EEAS havia uma dificuldade de realizar rotac¸ ˜oes maiores que π/4, devido a distribuic¸ ˜ao dos ˆangulos elementares, como pode ser visto nas Figura (6) e (7). Devido a essa dificuldade era necess ´ario realizar uma pr ´e-rotac¸ ˜ao no vetor de entrada, quando o ˆangulo de rotac¸ ˜ao era maior que π/4, a fim de reduzir o ˆangulo para uma faixa mais aceit ´avel de rotac¸ ˜ao, o que aumenta o custo computacional do algoritmo, e demandava mais recursos de
2.4 Algoritmo CORDIC 39
hardware. No algoritmo MSR o conjunto dos ˆangulos elementares no circulo unit ´ario ´e maior e melhor distribu´ıdos como visto na Figura (10). Isso possibilita ao MSR alcanc¸ar ˆangulos de rotac¸ ˜ao de 0 ´a 2π, varrendo todo o circulo unit ´ario.
O desempenho do algoritmo EEAS, como mostrado na sec¸ ˜ao anterior, ´e diretamente relacionado com a escolha dos par ˆametros CORDIC µ0, µ1, s0 e s1. De maneira an ´aloga ´e a determinac¸ ˜ao dos par ˆametros CORDIC J , I, µi, µj, si e sj que garante a converg ˆencia e efici ˆencia do algoritmo.
Para determinar os par ˆametros Cordic do algoritmo MSR, Lin e Wu (2005) utiliza a an ´alise do erro entre o vetor idealmente rotacionado, e o vetor que na pr ´atica do Algoritmo MSR consegue alcanc¸ar no rotacionamento. Para exemplificar, consi-dere que se deseja rotacionar um vetor OD pelo ˆangulo θ at ´e a posic¸ ˜ao do ponto A, formando assim um novo vetor rotacionado OA. Considerando que o MSR n ˜ao con-siga rotacionar o vetor OD por exatamente θ, e que devido ao ganho Cordic o m ´odulo do vetor rotacionado seja diferente do vetor OD. Logo, a nova posic¸ ˜ao do vetor rotaci-onado ´e OB, como mostrado na Figura (11)(LIN; WU, 2005).
O
C
A B D
Figura 11: MSR com I=2, J=1 e N=2 Fonte: (LIN; WU, 2005)
Analisando a Figura (11), o erro de aproximac¸ ˜ao do algoritmo MSR ´e representado pelo trecho OB, denominado ∆l0. J ´a o erro angular ´e representado por ∆θ, e o erro do m ´odulo ´e representado pelo trecho OC, denominado ∆l0. Segundo Lin e Wu (2005), quando ∆θ ´e suficientemente pequeno ´e poss´ıvel obter a seguinte express ˜ao:
2.4 Algoritmo CORDIC 40
∆l02 = OA2+ OB2− 2OA × OBcos(∆θ), (79) ∆l02 = 1 + (1 + ∆l)2− 2 × 1 × (1 + ∆l) ×p1 − sin2(∆θ), (80) ∆l02 ≈ ∆l2+ ∆θ2. (81)
Por meio de (81) ´e poss´ıvel concluir que o erro angular ∆θ, e o erro modular ∆l possuem o mesmo impacto no erro de aproximac¸ ˜ao do algoritmo MSR. Portanto, afim de otimizar o desempenho do algoritmo MSR ´e necess ´ario escolher um conjunto de par ˆametros CORDIC que privilegiem igualmente a reduc¸ ˜ao de ambos os erros de aproximac¸ ˜ao (LIN; WU, 2005).
Assim determinar o conjunto dos melhores valores para os par ˆametros CORDIC J , I, µi, µj, si e sj nada mais ´e do que uma tarefa de otimizac¸ ˜ao, sendo que a equac¸ ˜ao de minimizac¸ ˜ao ´e a express ˜ao do erro , o qual pode ser definido como:
min = √∆l2 + ∆θ2. (82)
Para cumprir essa tarefa de otimizac¸ ˜ao de ´e poss´ıvel utilizar diferentes tipos de algoritmos, e inclusive adaptar o algoritmo TBS j ´a apresentado. Segundo Lin e Wu (2005), existe uma certa restric¸ ˜ao quanto a utilizac¸ ˜ao de algoritmos como o greedy, pois esse tipo de algoritmo Guloso n ˜ao garante a melhor soluc¸ ˜ao dentro do conjunto de soluc¸ ˜oes poss´ıveis desse problema.
2.4.3.1 AN ´ALISE DO ERRO
Um importante fator para a determinac¸ ˜ao do melhor conjunto de par ˆametros Cordic para o MSR, al ´em da minimizac¸ ˜ao do erro , ´e o efeito do ru´ıdo de arredon-damento (Roundoff Noise Analysis) en, e o erro de overflow, ou estouro da palavra bin ´aria. Ambos os efeitos ocorrem ao longo das operac¸ ˜oes l ´ogicas promovidas pelo al-goritmo CORDIC, em especial devido a operac¸ ˜ao de compensac¸ ˜ao do ganho Kc. Essa compensac¸ ˜ao envolve uma operac¸ ˜ao de multiplicac¸ ˜ao, o que acentua os problemas de arredondamento da parte fracion ´aria e, dependendo do valor da compensac¸ ˜ao, pode causar um overflow da palavras bin ´aria.
Nos dispositivos digitais o n ´umero de bits utilizados para representar sinais quantizados ´e limitado de acordo com a arquitetura. Esse limite de representac¸ ˜ao
2.4 Algoritmo CORDIC 41
acaba por impactar na resoluc¸ ˜ao da palavra bin ´aria para n ´umeros fracion ´arios, o que forc¸a a realizac¸ ˜ao de arrendondamentos na representac¸ ˜ao bin ´aria.
Para representar o conjunto dos n ´umeros racionais no mundo digital, a ar-quitetura dos sistemas digitais reserva parte dos bits da palavra bin ´aria para represen-tar o fracion ´ario do n ´umero racional. Assim, segundo Lin e Wu (2005), os n´ıveis de quantizac¸ ˜ao para um sinal digital s ˜ao definidos como:
−2W −i−1, ..., −2−i+1
, −2−i, −2−i+1, ..., 2W −i−1 , (83) sendo que W representa o n ´umero de bits da palavra bin ´aria, e i representa o n ´umero de d´ıgitos fracion ´arios.
Uma soluc¸ ˜ao simples para reduzir o efeito do en ´e aumentar o n ´umero de bits W e i, melhorando a resoluc¸ ˜ao da representac¸ ˜ao. Por ´em, essa soluc¸ ˜ao, como afirma (LIN; WU, 2005), provocaria uma reduc¸ ˜ao na velocidade computacional do sis-tema, e ainda consumiria mais recursos de hardware. Outra opc¸ ˜ao seria reduzir o n ´umero de bits utilizados para representar a parte inteira do n ´umero, e transferir es-ses bits para a parte fracion ´aria. Por ´em, esse m ´etodo pode provocar um overflow da palavra bin ´aria, o que ´e ainda pior do que um ru´ıdo de arredondamento.
Considerando a amplitude ρ de um sinal de entrada, definido entre os inter-valos:
− 2W a≤ ρ ≤ 2Wb− 1, para W
a, Wb ≥ 0, (84)
sendo que W a e W b representam respectivamente o limite superior e inferior da am-plitude do m ´odulo desse sinal. Ainda:
Wmax = max{Wa, Wb}. (85)
Como o limite absoluto desse sinal. O n ´umero m´ınimo de bits necess ´arios para representar tal sinal seria de (Wmax + 1). Assim, segundo Lin e Wu (2005), para evitar um overflow seria necess ´ario manter o sinal de entrada dentro da seguinte restric¸ ˜ao:
2Wmax ≤ 2W −1−i. (86)
Para solver o problema do ru´ıdo de arredondamento, Lin e Wu (2005) assu-mem que o en ´e uniformemente distribu´ıdo e n ˜ao possui correlac¸ ˜ao com outros sinais. Al ´em de considerar que, baseado nos n´ıveis de quantizac¸ ˜ao, o en est ´a situado em
2.4 Algoritmo CORDIC 42
uma faixa sim ´etrica de (−2−i−1, 2−i−1). Portanto, a vari ˆancia de en ´e dada por: σen2 = V
2 LSB
12 , (87)
sendo VLSB igual a 2i. Logo, a vari ˆancia do erro de arredondamento ´e proporcional ao quadrado valor do ´ultimo bit da palavra bin ´aria.
Como base em (87), Lin e Wu (2005) analisam o efeito a operac¸ ˜ao de rotac¸ ˜ao tem sobre a vari ˆancia de en, e mais especificamento o efeito que o ganho Kc tem sobre o SQNR. Quando o ganho Kc ´e > 1 ou < 1 SQNR ´e reduzido para 1/(Kn)a cada iterac¸ ˜ao CORDIC.
O ganho KC ´e fator importante no projeto dos par ˆametros Cordic para o MSR, afetando tanto o erro en quanto . Para refinar a func¸ ˜ao de minimizac¸ ˜ao apre-sentada em (82), Lin e Wu (2005) adicionam a seguinte restric¸ ˜ao em relac¸ ˜ao ao valor do ganho Kc:
Plower = 1/Pupper, (88)
sendo Pupper e Plower, respectivamente, o limite superior e o limite inferior de Kna cada iterac¸ ˜ao.
O gr ´afico da Figura (12) mostra uma an ´alise pr ´atica entre o n´ıvel do SQNR e o Pupper, para diferentes valores de deslocamento de bits (S). Por meio dessa an ´alise Lin e Wu (2005) sugerem que para um bom projeto de par ˆametros MSR Cordic, para Nspt = 3e N = 3, o valor de Pupper deve estar pr ´oximo de 1, 5. J ´a que, como pode ser visto na Figura (12), para valores maiores o desempenho de SQNR ´e saturado. Logo, para esse caso, ´e poss´ıvel adicionar mais essa restric¸ ˜ao a equac¸ ˜ao de minimizac¸ ˜ao do erro .
2.4 Algoritmo CORDIC 43
Figura 12: Relac¸ ˜ao entre o Pupper e o SQNR para MSR-CORDIC, como Nspt = 3e
N = 3
Fonte: (LIN; WU, 2005)
O ´ultimo aspecto da melhoria do erro en ´e a escolha dos par ˆametros I e J. Esses par ˆametros est ˜ao diretamente relacionados a Nspt, o n ´umero de termos SPT presentes na equac¸ ˜ao x(n + 1) e y(n + 1). Esta relac¸ ˜ao ´e descrita por (71). O valor de Nspt ´e uma escolha que impacta no n ´umero de deslocadores de bits (shifters) ne-cess ´arios para realizar a operac¸ ˜ao Cordic, sendo mais comum na bibliografia observar implementac¸ ˜ao MSR Cordic com Nspt= 3ou Nspt = 4(PARK; YU, 2012) (LIN; WU, 2005) (MEHER et al., 2009).
Os valores I e J podem ser escolhidos como fixos (Modo Normal) ou po-dem ser din ˆamicos a cada operac¸ ˜ao de rotacionamento (Modo Generalizado). Tanto no modo Normal quanto o modo Generalizado, o valor de I e J devem obedecer a restric¸ ˜ao I + J = NSP T, por ´em ao utilizar o modo Normal ´e poss´ıvel reduzir a com-plexabilidade do hardware e alcanc¸ar um desempenho aceit ´avel. Para tal, quando em modo de operac¸ ˜ao Normal, os par ˆametros deve I e J devem atender a duas restric¸ ˜ao dadas a seguir (LIN; WU, 2005):
• Se Nspt ´e par: I = J = Nspt/2,
• Se Nspt ´e ´ımpar: J = (Nspt+ 1)/2e I = J − 1.
A operac¸ ˜ao em modo Generalizado permite que o desempenho do MSR Cordic seja maior, j ´a que nessa configurac¸ ˜ao as possibilidades combinat ´orias dos par ˆametros Cordic s ˜ao maiores. Nesse modo passa a existir, al ´em da operac¸ ˜ao normal
2.5 FPGA 44
de rotacionamento, a possibilidade de ocorrer a operac¸ ˜ao de multiplicac¸ ˜ao de escala, quando J = 0, e a operac¸ ˜ao de invers ˜ao de escala, quando I = 0. Essas operac¸ ˜oes adicionais maximizam o desempenho nas rotac¸ ˜oes em ˆangulos como π/4, π/2 e π. Na pr ´atica, esse modo requer o uso de mais 3 switches de controle, o que em muitas aplicac¸ ˜oes torna vi ´avel aumentar o consumo de recursos para alcanc¸ar um melhor desempenho.
Alinhando todas as restric¸ ˜oes apresentadas com a equac¸ ˜ao de minimizac¸ ˜ao apresentada em (82), ´e obtido um conjunto de par ˆametros Cordic que otimizam a operac¸ ˜ao de rotacionamento, elevando o valor de SQNR do sinal.
2.5 FPGA
Moore (2007, p. 4) define a FPGA como um dispositivo semicondutor capaz de ser totalmente redefinido ap ´os sua fabricac¸ ˜ao, permitindo ao programador reconfi-gurar produtos e func¸ ˜oes j ´a implementadas, adaptando o hardware a novas func¸ ˜oes. De forma pr ´atica, a FPGA permite uma flexibilidade em um projeto, podendo mudar a forma como ele ´e implementado, sem a necessidade de se construir um hardware novo.
Para Moore (2007, p. 4), comparado com as outras formas de construir um hardware, a FPGA oferece duas grandes vantagens em uma aplicac¸ ˜ao. Primeiro, para uma aplicac¸ ˜ao, ao inv ´es de se utilizar um circuito integrado padr ˜ao comercial, que geralmente ´e super ou subdimensionado, ou ainda desenvolver um novo projeto de circuito integrado especifico, consumindo tempo e recursos, a FPGA possibilita desenvolver um hardware exatamente dentro das especificac¸ ˜oes, personalizado e oti-mizado para a func¸ ˜ao destinada. Em segundo, por ´em t ˜ao importante quanto, ´e que essa capacidade de personalizac¸ ˜ao de hardware possibilita a realizac¸ ˜ao de operac¸ ˜oes de modo mais simplificado, r ´apido e energeticamente eficiente se comparado a um mi-croprocessador.
2.5.1 ASPECTOS CONSTRUTIVOS DA FPGA
As FPGAs s ˜ao baseadas em unidades l ´ogicas elementares b ´asicas, ou (BLE) Basic Logic Elements, dentro de uma hierarquia de interconex ˜oes reconfigur ´aveis que permitem que os BLEs sejam fisicamente conectados uns aos outros de diferen-tes formas, criando uma enorme variedade de componendiferen-tes digitais. A arquitetura das FPGAs modernas s ˜ao constitu´ıdas, basicamente, por conjunto de mem ´orias de
2.5 FPGA 45
armazenamento em massa SRAM (Static Random Access Memory ), Portas de Entra-da/Sa´ıda, blocos l ´ogicos configur ´aveis (CLB) e sistema de roteamento, como pode ser visto na Figura (13) (MOORE, 2007, p. 5).
Figura 13: Arquitetura Tipica de uma FPGA Fonte: Adaptado Meyer-Baese (2007, p. 6)
Os CLB s ˜ao blocos realizam operac¸ ˜oes l ´ogicas b ´asicas e armazenam pe-quenos volumes de dados. Comumente as operac¸ ˜oes complexas, necess ´arias para o processamento de uma aplicac¸ ˜ao, s ˜ao divididas em processos mais simples para cada uma das CLBs selecionadas, de modo que a soma das tarefas de cada CLB seja equivalente a operac¸ ˜ao complexa, em uma estrat ´egia de divis ˜ao e conquista. Para re-alizar operac¸ ˜oes l ´ogicas b ´asicas e ainda armazenar pequenos volumes de dados, os CLBs tecnicamente poderiam ser apenas um pequeno circuito de transistores (granu-laridade fina), ou at ´e mesmo um processador completo (granu(granu-laridade grosseira). Se os CLBs fossem granularidade fina, para realizar tarefas complexas seria necess ´ario
2.5 FPGA 46
um grande n ´umero de CLBs e um sistema de roteamento complexo para interconecta-los, o que resultaria em uma FPGA de baixo desempenho e um elevado consumo energ ´etico. Por outro lado, se as CLBs forem de uma granularidade mais grosseira, seria um desperd´ıcio de recurso utiliz ´a-los em operac¸ ˜oes mais simples (FAROOQ et al.,
2012, p. 11). Assim a escolha do n´ıvel de complexabilidade, ou granulac¸ ˜ao, das CLBs de uma FPGA ´e um compromisso de otimizac¸ ˜ao de recursos.
Segundo Farooq et al. (2012, p. 11), dentro da gama de granulac¸ ˜ao das CLBs, algumas arquiteturas incluem o uso de portas NAND, interconex ˜ao de multi-plexadores e tabelas de busca LUT (Lookup Table). Em especial, fabricantes como a Xilinx utilizam CLBs baseadas em LUTs, j ´a que CLBs baseadas em LUT oferecem uma boa relac¸ ˜ao de granulac¸ ˜ao, otimizando os recursos da FPGA para aplicac¸ ˜oes simples at ´e as mais complexas. Esse tipo de CLB pode incluir uma ´unico BLE, ou mesmo um cluster de BLEs interconectados, como mostrado na Figura (14).
Figura 14: Arquitetura de uma CLB com 4 BLEs
Fonte: Adaptado Farooq et al. (2012, p. 13)
Segundo Farooq et al. (2012, p. 11), um BLE mais simples consiste basi-camente de um LUT e um Flip-Flop tipo D, como pode ser visto na Figura (15). Um LUT com k entradas pode implementar k func¸ ˜oes booleanas utilizando os espac¸os de mem ´oria SRAM dentro da LUT. O exemplo apresentado na Figura (15) utiliza 16 bits
2.5 FPGA 47
de mem ´oria SRAM, os quais s ˜ao conectadas a entrada do multiplexador que possui 4 bits de selec¸ ˜ao, e cuja sa´ıda ´e ligada ao flip-flop. Essa configurac¸ ˜ao permite que a LUT tenha 2k combinac¸ ˜oes das k operac¸ ˜oes booleanas.
Figura 15: Arquitetura de uma BLE (Basic Logic Element)
Fonte: Adaptado Farooq et al. (2012, p. 13)
Um ´unico BLE ´e capaz de realizar algumas operac¸ ˜oes booleanas b ´asicas, por ´em em clusters as combinac¸ ˜oes de operac¸ ˜oes aumentam. FPGAs modernas ti-picamente cont ´em de 4 a 10 BLEs em um ´unico cluster. Por ´em, essas FPGAs n ˜ao possui apenas BLEs id ˆenticas, na verdade h ´a uma grande heterogenia de blocos, sendo muitos deles desenvolvidos para prop ´ositos espec´ıficos. Entre esses blocos de prop ´osito espec´ıfico est ˜ao multiplicadores, somadores, mem ´orias e DSPs (Digital Sig-nal Processor ), entre outros. Esses blocos s ˜ao desenvolvidos para otimizar o espac¸o, processamento, roteamento e demais recursos de hardware que seriam necess ´arios para implementar as mesmas func¸ ˜oes em BLEs comuns, sendo essenciais em certas aplicac¸ ˜oes Farooq et al. (2012, p. 10).
A implementac¸ ˜ao de qualquer circuito l ´ogico ´e feita pela associac¸ ˜ao de di-ferentes blocos l ´ogicos e pelas portas de entrada e sa´ıda da FPGA, os quais s ˜ao conectados uns aos outros por meio da rede de roteamento program ´avel, ou PLN (Programmable Logic Network ). Na Figura (13) a PLN ´e representada pela Matriz Program ´avel de Interconex ˜oes e pelos Canais de Roteamento. Para que a FPGA possa implementar qualquer circuito digital, as interconex ˜oes de roteamento devem ser flex´ıveis para suportar a grande variedade de conex ˜oes demandada, otimizando