Scipy에서 CORDIC
자세한 것은 여기의 페이지가 매우 알기 쉬웠다.
실제로 써본 코드는 부동 소수점수로 연산하고 있으므로, 시프트 연산 대신에 곱셈을 사용.
그렇다 치더라도 , 자주 이런 알고리즘 을 생각해 낸다 .
이하, 코드와 실행 결과.
cordic.py
#!/usr/bin/env python
from __future__ import division
import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
import math
term_num = 17
thetas = map( lambda x : math.atan( 1.0 / math.pow( 2.0,x ) ) , range( term_num + 1) )
hypot_length = 1.0 / reduce( lambda x,y: x * ( 1.0 / math.cos(y) ) ,thetas,1.0 )
def cos_cordic( angle ):
x,y = (1.0,1.0)
acc_theta = thetas[0]
scale_ratio = 1.0
for i,theta in enumerate( thetas[1:] ):
x1,y1 = x,y
scale_ratio *= 0.5
if acc_theta < angle :
acc_theta += theta
x -= scale_ratio * y1
y += scale_ratio * x1
else:
acc_theta -= theta
x += scale_ratio * y1
y -= scale_ratio * x1
return ( x * hypot_length )
if __name__ == '__main__':
t = [ x * ( math.pi / 200.0 ) for x in range( 100 ) ]
result = map( cos_cordic,t )
plt.plot( result )
plt.show()
Reference
이 문제에 관하여(Scipy에서 CORDIC), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ar90n@github/items/e1656f535d36ff8fb95b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)