数学建模社区-数学中国

标题: CORDIC算法的matlab实现 [打印本页]

作者: 大笨象    时间: 2011-6-7 11:12
标题: CORDIC算法的matlab实现
本帖最后由 大笨象 于 2011-6-7 12:26 编辑
' s2 y5 S% w4 x# O
( s( C/ n5 |6 c- ~" |不知道有木有人研究这个,比较偏向于硬件描述。
" m4 H/ O& [% R# B2 Y  K1 m" g今天先发一个sine cose函数的实现。& Y3 d8 T& E! s; {
有兴趣的可以看一下,m文件见附件。' @9 P, T( |# M. F  J
function v=f_cordic(beta,n)5 U* b% b" ^7 t9 a. ]# z1 z
if beta < -pi/2 || beta > pi/28 O* C0 X) H" h+ c' `, K' _  n
    if beta < 06 D) j, A' ]% w6 q' A
        v=f_cordic(beta + pi,n);2 q) k2 B2 R- U
    else
7 h' k% u* j1 S* r- n        v=f_cordic(beta - pi,n);( Y5 m2 i6 D& K0 J, v4 @/ [+ A
    end
* s4 G* l" B: a# R    v = -v;% flip the sign for second or third quadrant$ P# A6 T8 M( a. \! @/ g; Q1 @" U
    return; t& L/ c- u$ I% m2 n$ S/ F4 D6 R
end9 ], }0 b, }" n. e
% Initialization of tables of constants used by CORDIC
- ^* B: a& A; j3 q3 x5 a4 Z  g% need a table of arctangents of negative powers of two, in radians:0 p- W; D/ F7 x4 f8 b$ M0 M
% angles = atan(2.^-(0:27));
3 `7 Y* T" G3 @3 qangles =  [  ...% d6 V& g, |2 N0 @
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
, M% e" |# _& l0 I' N# d/ o: Z    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
* W$ b4 Q7 q, }- U- b. n    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
. E! t: d* ?# y% @8 ]    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
! N" w9 p& B$ W  ^! T0 D    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
% r3 y4 k4 Y+ y5 S" S, ~6 W, {- K8 I, s    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...  u7 p8 @& R) T
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
% y* x; F5 j2 u3 b% and a table of products of reciprocal lengths of vectors [1, 2^-j]:/ o+ J5 T) f$ D0 K9 H! Q; L+ |2 o
Kvalues = [ ...
& i0 k# P7 ?8 W2 @    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 .... s3 j# F, I4 G, Z
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
$ A1 n' N1 P8 S; R4 U* Q    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...) u; D) p; G, Z4 V
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ..." w; M" Z  h2 \3 p: q
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 .... J! w5 E. q  L0 S& ^% i
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];  L& h# ~; u8 L
Kn = Kvalues(min(n, length(Kvalues)));
( O9 P' a% E- r; O. O & i) T6 h2 Y: ?1 U7 J, L
% Initialize loop variables:
. D5 Q4 j$ X% L# a% _v = [1;0]; % start with 2-vector cosine and sine of zero" q5 ^$ L6 k" L* M8 X! f' T
poweroftwo = 1; 3 N0 Z+ R! g. M! L
% Iterations
. f$ D) [& ]6 m2 B  _2 a4 ^for j = 1:n;- F; ]# T( c/ O! ]; K! D
    if beta < 05 ]( ]) z' x" h7 E! L4 ?: B  \
        sigma = -1;% d" [: j& z2 f. h# J( [1 f
    else5 a* B, C) H$ L
        sigma = 1;- x- D8 w6 M# r* z8 N( n
    end
) l8 F1 d" M) _    % update the angle from table, or eventually by just dividing by two
! ^; ?: a, a" L; b6 {    if j <= length(angles)
% M0 q6 R! w: R+ G1 G+ z3 X        angle = angles(j);
8 _2 ^5 E. _3 r    else* F3 x' x8 g1 w) |& \% Y  C5 c& F" G
        angle = angle/2;, n! g) k1 L) g
    end/ B- w( i1 d" N5 _! s! u
    factor = sigma * poweroftwo;
' w  W8 a) Y6 n3 t" q& C& X    R = [1, -factor; factor, 1];7 S, M5 F, p2 \1 l. l$ d
    v = R * v; % 2-by-2 mtrix multiply
, N$ z8 N; a. ]    beta = beta - sigma * angle; % update the remaining angle
  E2 H4 ^1 c9 l( I8 l& `! y. o    poweroftwo = poweroftwo / 2;
1 v1 ]2 h* n  J! s% ]0 c% [& yend
: U( A# y3 U/ w  Y; b+ {; |4 W% Adjust length of output vector to be [cos(beta), sin(beta)]:
# p. i3 @% `: j/ d4 [) y' zv = v * Kn;
# \5 N. r  W" \2 W& J# Y2 X) O9 B6 Q- ^3 rreturn
1 _6 {' u1 T" t* C8 x4 E" Q* W, s, Y, r6 F, J: o
使用20位寄存器,仿真波形如下:
1 }$ W4 x$ {. z3 I, @. K% m. H 仿真波形 " U& B. R$ M  k0 k; n& _9 @

f_cordic.m

2.25 KB, 下载次数: 21, 下载积分: 体力 -2 点

CORDIC算法


作者: 杨帆    时间: 2011-6-8 19:27
我表示学习了
作者: zhangjichang    时间: 2011-6-8 22:31
这是什么算法?第一次听说
作者: 赛才    时间: 2011-6-9 15:01
我表示很给力
作者: 大笨象    时间: 2011-6-9 19:52
zhangjichang 发表于 2011-6-8 22:31
: @7 d# Q0 Y) [4 `8 d* b这是什么算法?第一次听说

5 G! Y0 I& s* f  l3 t( b9 d这个,就是那个。感兴趣的话你还是自己搜搜吧。
作者: 大笨象    时间: 2011-6-9 19:54
赛才 发表于 2011-6-9 15:01 " y3 w3 o' `% @- J% ~
我表示很给力

3 f" l3 _( m  W* j6 n% G给力就好。呵呵
作者: 魅影骑士    时间: 2011-6-9 20:08
顶一下!
作者: yingzhen    时间: 2011-6-9 21:15
费解。。。。。。。。。。。。。。。。
作者: 羅雲琦    时间: 2011-6-9 22:32
有什麽用?求解
作者: jt202010    时间: 2011-6-10 10:21

作者: 大笨象    时间: 2011-6-10 15:09
羅雲琦 发表于 2011-6-9 22:32
- V4 b0 T( y- f; x有什麽用?求解

/ I2 g8 c, A2 ^1 O) }可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15 2 J! \) ~0 k  ?9 _$ G: c  [
费解。。。。。。。。。。。。。。。。

) L7 N( D  ~/ \1 U. X# w5 n8 M原理比较简单,算法思想是逐步逼近。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15
7 D! ]7 z; A4 a% Y费解。。。。。。。。。。。。。。。。

/ W4 [% Y; M' f0 o5 T) n2 W8 w6 U原理比较简单,算法思想是逐步逼近。
作者: 羅雲琦    时间: 2011-6-10 18:18
大笨象 发表于 2011-6-10 15:09 / N4 _' `1 ?  O, e3 E
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
/ M0 u' E9 ^- \, E/ U) X1 p% T
謝謝,同學。
作者: wangluzhu    时间: 2011-6-10 23:42
NB啊!!膜拜中!!
作者: LoveDearDeer    时间: 2011-6-11 21:02
这就是一直我寻找的吗?
作者: 大笨象    时间: 2011-6-12 21:43
LoveDearDeer 发表于 2011-6-11 21:02 ; ^' H, Y% o, r1 e0 U
这就是一直我寻找的吗?

/ y& F- F2 }9 a可以探讨一下啊。现在正用软件自带的IP核cordic进行比较。
作者: 韦人长弓    时间: 2011-6-22 09:41
没体力,膜拜ing9 D, I5 C( K7 G5 z( j

作者: 韦人长弓    时间: 2011-6-22 09:42
,这可正是是要找的,跪谢楼主!
作者: 大笨象    时间: 2011-6-26 10:49
韦人长弓 发表于 2011-6-22 09:42 - d# g6 }( s! K1 k, t
,这可正是是要找的,跪谢楼主!

+ S9 o1 |% j. X- ?3 A( o咱们可以探讨,一起学习。
作者: 郑传赞    时间: 2011-6-26 12:39
好。。。。。。。。。。
作者: luli08072109    时间: 2011-6-29 18:06
楼主太强大了!!!
作者: 晨宸    时间: 2011-7-23 14:25
表示看不懂
作者: alair003    时间: 2012-2-6 11:07
尽力而为,无愧于心2887173375254249
作者: 沉默到底    时间: 2012-9-5 10:29
路过。。。
作者: 沉默到底    时间: 2012-9-5 10:37
路过。。。。。
作者: 大笨象    时间: 2012-9-24 20:43
羅雲琦 发表于 2011-6-9 22:32 - o1 C" @8 X! j9 }8 l0 b
有什麽用?求解
% A: A/ h; I% p" e% C
可以使用硬件实现啊。使用加法器和移位寄存器就可以计算三角函数。
作者: sdccumcm    时间: 2012-10-7 16:54
好的 学习一下!           
作者: Arbitrary1111    时间: 2013-8-22 22:33
thanks for giving
作者: Lsiten    时间: 2014-12-1 22:23
顶顶顶一下" {3 R) I  [5 G& Y# }9 ^3 |- ]

作者: 2740419624    时间: 2021-5-10 14:01
挺好的,作者台历好了怎么龙牙
' k$ i. D0 U9 G




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5