Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Algoritmo CORDIC
Cairo P. Cheble Caplan
CBPF - Linguagem de Programa¸c˜ao
Prof. Pablo Diniz Batista
21/08/2013
Introdu¸c˜ao
CORDIC - COordinate Rotation DIgital Computer
Computador digital de rota¸c˜ao coordenada
Figura 1 : ”A necess...
Introdu¸c˜ao
• No in´ıcio de 1956 o departamento de Aeroeletrˆonica da
Convair, em Fort Worth, foi encarregado de determin...
Vantagens do CORDIC
Vantagens do algoritmo CORDIC em rela¸c˜ao aos dois m´etodos
tradicionais de fun¸c˜oes trancedentais c...
Implementa¸c˜oes do CORDIC
O projeto da CORDIC pode ser usado em duas base formas
diferentes
• Software - Podendo ser escr...
Matem´atica da Rota¸c˜ao
0.5 1 1.5 2 2.5
0.5
1
1.5
2
2.5
0
v’ (x’,y’)
v (x,y)
Θ
φ
Matem´atica da Rota¸c˜ao
• {x= v .cos(φ)
{y= v .sin(φ) [1]
• x’= v’ .cos(φ+θ)
y’= v’ .sin(φ+θ)
v’ = v [2]
• sin(φ+θ) = sin...
Matem´atica da Rota¸c˜ao
• Aplicando [1] em [4] Temos:
x’ = x.cosθ - y.sinθ
y’ = y.cosθ + x.sinθ [5]
• Rearranjando a expr...
Algoritmo CORDIC iterativo
Ideias chaves da proposta do algoritmo:
• Rotacionar o vetor gradualmente com passos de ˆangulo...
Algoritmo CORDIC iterativo
• Pr´e-c´alculo dos cossenos das intera¸c˜oes, as constantes Ki
• Lembrando que Ki = cos(θi)
• ...
Algoritmo CORDIC iterativo
Sintetizando:
• Partindo da express˜ao [10] e assumindo que se queira obter
rota¸c˜ao de um vet...
Algoritmo CORDIC iterativo
Ao final das N itera¸c˜oes temos:
• X como cosseno do ˆangulo.
• Y como seno do ˆangulo
• Z como...
Algoritmo CORDIC iterativo
Figura 2 : Exemplo gr´afico de itera¸c˜oes
Algoritmo CORDIC iterativo
Tabela de arcotangentes
Tabela 1 : Exemplo de tabela de arcotangentes com 8 bits, sendo um
bit ...
Arquitetura do circuito digital
Figura 3 : Arquitetura abstrata do circuito
Simula¸c˜ao do circuito digital
Figura 4 : Formas de onda dos sinais do projeto em VHDL
Referˆencias Bibliogr´aficas
• ”The Birth of CORDIC”, Jack E. Volder, Journal of VLSI
Signal Processing 25, 101–105, 2000.
...
Upcoming SlideShare
Loading in …5
×

Algoritmo cordic

822 views

Published on

Published in: Self Improvement
  • Be the first to comment

  • Be the first to like this

Algoritmo cordic

  1. 1. Algoritmo CORDIC Cairo P. Cheble Caplan CBPF - Linguagem de Programa¸c˜ao Prof. Pablo Diniz Batista 21/08/2013
  2. 2. Introdu¸c˜ao CORDIC - COordinate Rotation DIgital Computer Computador digital de rota¸c˜ao coordenada Figura 1 : ”A necessidade ´e a m˜ae da inven¸c˜ao”. Bombardeiro supersˆonico B-58 que motivou a cria¸c˜ao do CORDIC
  3. 3. Introdu¸c˜ao • No in´ıcio de 1956 o departamento de Aeroeletrˆonica da Convair, em Fort Worth, foi encarregado de determinar a possibilidade de substitui¸c˜ao do sistema de navega¸c˜ao anal´ogico do bombardeiro B-58 por um computador digital. Esta substitui¸c˜ao foi necess´aria pela baixa precis˜ao dos elementos anal´ogicos de c´alculo do sistema. • Eletrˆonica digital era bastante limitada na ´epoca, transistores eram novidade e trabalhavam a uma baixa velocidade e havia a necessidade do sistema obter resultados em tempo real. • Publicado por Jack E. Volder em mar¸co de 1959, o algoritmo e computador digital CORDIC podia realizar c´alculos de rota¸c˜ao, magnitude a ˆangulo de vetores. • Neste trabalho ser´a apresentado o algoritmo do CORDIC iteratico para c´alculo de cossenos e senos e um ˆangulo de entrada.
  4. 4. Vantagens do CORDIC Vantagens do algoritmo CORDIC em rela¸c˜ao aos dois m´etodos tradicionais de fun¸c˜oes trancedentais como armazenamento em tabela de valores e por s´erie de Taylor: • Alta precis˜ao dos resultados, em oposi¸c˜ao ao m´etodo de tabela de valores. • N˜ao h´a necessidade de uso de unidades de multipli¸c˜ao ou divis˜ao, em oposi¸c˜ao ao m´etodo por s´erie de Taylor • Opera¸c˜ao com n´umeros reais em formato de ponto fixo. Permitindo seu uso em microcontroladores ou CPUs simples e diminuindo o custos de circuitos em hardware dedicado.
  5. 5. Implementa¸c˜oes do CORDIC O projeto da CORDIC pode ser usado em duas base formas diferentes • Software - Podendo ser escrito em liguagens de program¸c˜ao tradicionais como C ou assembly, destinado `a execuc˜ao de microcontroladores ou CPUs. • Hardware - Podendo ser escritos em linguagens de descri¸c˜ao de hardware, como VHDL ou Verilog, destinado `a implementa¸c˜ao em circuitos digitais dedicados como em Circuitos Integrados, ASICs e FPGAs. Uma implemena¸c˜ao em VHDL para FPGA foi feita para este trabalho.
  6. 6. Matem´atica da Rota¸c˜ao 0.5 1 1.5 2 2.5 0.5 1 1.5 2 2.5 0 v’ (x’,y’) v (x,y) Θ φ
  7. 7. Matem´atica da Rota¸c˜ao • {x= v .cos(φ) {y= v .sin(φ) [1] • x’= v’ .cos(φ+θ) y’= v’ .sin(φ+θ) v’ = v [2] • sin(φ+θ) = sinφ.cosθ + sinθ.cosφ cos(φ+θ) = cosφ.cosθ - sinθ.sinφ [3] • x’ = v .cos(φ+θ) = v .cosφ.cosθ - v .sinθ.sinφ y’ = v .sin(φ+θ) = v .sinφ.cosθ + v .sinθ.cosφ [4]
  8. 8. Matem´atica da Rota¸c˜ao • Aplicando [1] em [4] Temos: x’ = x.cosθ - y.sinθ y’ = y.cosθ + x.sinθ [5] • Rearranjando a express˜ao anterior colocando o cosseno em evidˆencia: x’ = cos(θ).(x - y.tanθ) y’ = cos(θ).(y + x.tanθ) [6] • A raz˜ao entre x’ e y’ permanece a mesma pois ambos s˜ao multiplicados por cos(θ). • Ainda s˜ao necess´arias as opera¸c˜oes de multiplica¸c˜ao e fun¸c˜ao tangente.
  9. 9. Algoritmo CORDIC iterativo Ideias chaves da proposta do algoritmo: • Rotacionar o vetor gradualmente com passos de ˆangulos bem definidos, onde seus valores s˜ao tabelados. • tan(θi) = ±2−i | i={0,1,2,... n} [7] • Substituindo as express˜oes originais em [6] por uma forma iterativa temos: x[i+1] = Ki(x[i] - y[i].tanθi) y[i+1] = Ki(y[i] + x[i].tanθi) [8] Onde θi pode ser positivo ou negativo dependendo do sentido necess´ario da rota¸c˜ao e Ki = cos(θi) = cos(-θi). • Como tan(θi) = - tan(- θi) ent˜ao podemos reduzir o n´umero de valores da express˜ao [7] pela metade adicionando o parˆametro di, definindo o sinal o ˆangulo. tan(±θi)= di.2−i | i={0,1,2,... n} ∧ di = 1 se rota¸c˜ao positiva ou -1 se negativa [9] • Logo, substituindo [9] em [8]: x[i+1] = Ki(x[i] - y[i].di.2−i ) y[i+1] = Ki(y[i] + x[i].di.2−i ) [10]
  10. 10. Algoritmo CORDIC iterativo • Pr´e-c´alculo dos cossenos das intera¸c˜oes, as constantes Ki • Lembrando que Ki = cos(θi) • Ao final das n itera¸c˜oes as constantes multiplicativas Ki podem ser sintetizadas em uma ´unica Kpn. Kpn = K0.K1..Kn Kpn = n i=0Ki [11] • Discretizando θi por θi =arctan(2−i ) Temos: Ki = cos(tan−1 (2−i )) ∴ Ki = 1/ √ 1 + 2−2i [12] • Aplicando [12] em [11] Kpn = n i=0(1/ √ 1 + 2−2i) [13] • O valor do produt´orio Kpn converge para um valor finito: K=Kp∞ = limn→∞( n i=0(1/ √ 1 + 2−2i)) K≈0,670252935008881256194... [14]
  11. 11. Algoritmo CORDIC iterativo Sintetizando: • Partindo da express˜ao [10] e assumindo que se queira obter rota¸c˜ao de um vetor unit´ario partindo do ˆangulo zero, pode-se aplicar a constante final K [14] no in´ıcio das itera¸c˜oes, extinguindo a ´ultima opera¸c˜ao de multiplica¸c˜ao das itera¸c˜oes de [10]. x[0] = (1)*K e y[0] = (0)*K x[i+1] = (x[i] - y[i].di.2−i) y[i+1] = (y[i] + x[i].di.2−i) • Os valores de di s˜ao decididos de acordo com o ˆangulo teste atual, chamado de zi, criado para medir a distˆancia angular do resultante das itera¸c˜oes com o ˆangulo dado. z[0] = ˆAngulo desejado e z[i+1] = z[i] - θi ∴ z[i+1] = z[i] - di. arctan(2−i) Onde d[i] = -1 se z[i]<0 ou 1 se ≥0
  12. 12. Algoritmo CORDIC iterativo Ao final das N itera¸c˜oes temos: • X como cosseno do ˆangulo. • Y como seno do ˆangulo • Z como diferen¸ca ˆangular dos ˆangulos da sa´ıdas X e Y em rela¸c˜ao ao ˆAngulo dado. Servindo como parˆametro de precis˜ao. • O ˆAngulo de entrada deve estar compreendido entre 0 e 90 graus.
  13. 13. Algoritmo CORDIC iterativo Figura 2 : Exemplo gr´afico de itera¸c˜oes
  14. 14. Algoritmo CORDIC iterativo Tabela de arcotangentes Tabela 1 : Exemplo de tabela de arcotangentes com 8 bits, sendo um bit inteiro i tan(2−i) θ = arctan(2−i) θ em graus θ em bin´ario 0 1,000000000 0,785398163 45 0,1100100 1 0,500000000 0,463647609 26,56505118 0,0111011 2 0,250000000 0,244978663 14,03624347 0,0011111 3 0,125000000 0,124354995 7,125016349 0,0001111 4 0,062500000 0,062418810 3,576334375 0,0000111 5 0,031250000 0,031239833 1,789910608 0,0000011 6 0,015625000 0,015623729 0,89517371 0,0000001
  15. 15. Arquitetura do circuito digital Figura 3 : Arquitetura abstrata do circuito
  16. 16. Simula¸c˜ao do circuito digital Figura 4 : Formas de onda dos sinais do projeto em VHDL
  17. 17. Referˆencias Bibliogr´aficas • ”The Birth of CORDIC”, Jack E. Volder, Journal of VLSI Signal Processing 25, 101–105, 2000. • ”FPGA Implementation of Sine and Cosine Value Generators using Cordic Algorithm for Satellite Attitude Determination and Calculators”, Shoaib Bhuria, Student Member, IEEE, and P.Muralidhar, Member, IEEE. • ”A survey of CORDIC algorithms for FPGA based computers”, Ray Andraka, Andraka Consulting Group Inc.

×