• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Algoritmo cordic
 

Algoritmo cordic

on

  • 358 views

 

Statistics

Views

Total Views
358
Views on SlideShare
358
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Algoritmo cordic Algoritmo cordic Presentation Transcript

    • 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 necessidade ´e a m˜ae da inven¸c˜ao”. Bombardeiro supersˆonico B-58 que motivou a cria¸c˜ao do CORDIC
    • 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.
    • 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.
    • 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.
    • 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φ.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]
    • 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.
    • 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]
    • 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]
    • 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
    • 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.
    • 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 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
    • 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. • ”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.