数学建模社区-数学中国

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

作者: 大笨象    时间: 2011-6-7 11:12
标题: CORDIC算法的matlab实现
本帖最后由 大笨象 于 2011-6-7 12:26 编辑 8 C8 z! M* Z& o# f$ s4 f( \) ^' u
! I1 N0 k# t' F. o! `
不知道有木有人研究这个,比较偏向于硬件描述。9 G1 `7 p/ \6 e4 r: D9 X8 y. J
今天先发一个sine cose函数的实现。
  I7 I- s2 s5 @( n; @/ R9 v有兴趣的可以看一下,m文件见附件。1 B9 H" p' {# H- m) M/ E5 T
function v=f_cordic(beta,n)
: C6 I! J5 o9 h$ m/ B6 zif beta < -pi/2 || beta > pi/2, T8 @0 A1 B) x! _7 d7 k
    if beta < 0& T0 ]3 [$ g/ T1 S0 e2 v
        v=f_cordic(beta + pi,n);. ]! h6 ^" h: Y' o% v
    else
7 _8 r% P* ?4 I6 o        v=f_cordic(beta - pi,n);8 O2 X* t) P: n' B
    end
) @7 V/ b6 N) P! E, c* `    v = -v;% flip the sign for second or third quadrant
8 f- O: z3 X0 t! K- X# e  r/ B    return% d0 b# Z, Y0 i; {' i
end- V' q4 q  `" @7 r! U$ |  ^! \
% Initialization of tables of constants used by CORDIC0 w) Y  K4 M+ v+ z
% need a table of arctangents of negative powers of two, in radians:3 ~; }. Y; ?$ b8 c
% angles = atan(2.^-(0:27));( r) @. f& O8 a6 ^5 q
angles =  [  ...3 p7 c+ ^- e& ?4 |% U
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
8 w/ R' l$ ^* p7 E    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
% l- V* q4 n( N3 Z    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...$ ]# s: w* M* T. k& B
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ..." ~! m& L- o" c4 h/ Q2 ?$ h
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ..., K5 }' ?+ c: _' x4 l" d
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...7 U4 A6 p0 t, J1 p
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
3 `  S; C( y3 c5 p% and a table of products of reciprocal lengths of vectors [1, 2^-j]:' D: B: A! U+ M) O3 Z/ J
Kvalues = [ ...
" a0 d  z: U; e& m" M    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...& M' [2 g- t- {7 \- g, m: y
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
, U* o5 `0 D  h) m9 d2 k  \    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...7 h0 j" a0 i9 i& ?
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
4 B4 V7 x" C- X# p    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...& n: r/ ]1 e  a
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];" u! N$ m1 e  z) n# @4 [. Q. l' q
Kn = Kvalues(min(n, length(Kvalues)));
2 m; Z5 W; T0 s0 m, M0 _" e, S1 D # U& n- `  y- T$ h
% Initialize loop variables:
  ]- H7 e9 i0 ?: |' m5 s( h! K+ Xv = [1;0]; % start with 2-vector cosine and sine of zero
( l: y" ^- K; s' K0 X" dpoweroftwo = 1; 2 F) b  B2 V: q2 [; I/ |
% Iterations
0 M8 g* S" F2 X6 ~for j = 1:n;
) @" p8 F/ ~( z1 {( ]    if beta < 0! C1 ?; ?4 Z) I) f0 i$ @
        sigma = -1;) R' I( C8 ?1 J, Z" `6 z3 H0 D3 [
    else% \9 C2 d( `" {# L- J# y+ w
        sigma = 1;
' }1 o+ D: t0 ]7 O1 j    end
/ ~6 y) u6 E; ?6 z    % update the angle from table, or eventually by just dividing by two
: K7 Z- R$ Y8 y/ T    if j <= length(angles)
/ n* E$ h0 a2 r+ N* A" B4 l        angle = angles(j);7 b1 u$ l% o6 V" v; Q' c4 u- h
    else
; K: Z" Z6 v8 B. t        angle = angle/2;
  C$ F6 T! J$ ]* u. H& y    end; {! n' G1 T& K2 Z& C7 {# o9 [" b
    factor = sigma * poweroftwo;
% L, z5 `: T% d# c5 V    R = [1, -factor; factor, 1];4 L  O7 o2 B. o/ a/ Q- t9 y; @
    v = R * v; % 2-by-2 mtrix multiply
) k5 h) c6 C# F( V1 g6 w    beta = beta - sigma * angle; % update the remaining angle
  ~$ t$ Z9 J# @: R: K    poweroftwo = poweroftwo / 2;6 h: j5 l4 k, Y; e  a
end5 O) v0 o% n4 I4 v! K
% Adjust length of output vector to be [cos(beta), sin(beta)]:
% A& L" ^1 ~; N0 U% Nv = v * Kn;! A' U1 F6 o. [0 L- |! h% m& j
return
7 m! I6 \' f- t" L: l5 n6 i( ^
/ C2 U  u5 c6 ^. W* ?9 G5 W' i使用20位寄存器,仿真波形如下:8 U9 K- Y# J$ z/ y' |
仿真波形
% ~0 B0 _, X! ^& m- [" C" J

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
5 p4 R) \' y6 [1 M# B6 P这是什么算法?第一次听说

6 @! K6 T0 t; `" Z: F9 r( a这个,就是那个。感兴趣的话你还是自己搜搜吧。
作者: 大笨象    时间: 2011-6-9 19:54
赛才 发表于 2011-6-9 15:01
. f4 _+ B6 T4 U. `我表示很给力

% P& T  @+ B! t6 i5 B4 R4 ?1 T给力就好。呵呵
作者: 魅影骑士    时间: 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
0 Y+ p* x* S: X3 B1 l% }% _5 k, H有什麽用?求解
  A1 o. M1 b" I2 l1 f; F
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15
- P" g* I7 A/ [( n9 d费解。。。。。。。。。。。。。。。。
6 K0 C, ~0 q+ V& p# ]3 Y& V  [$ P
原理比较简单,算法思想是逐步逼近。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15 0 u5 V* H4 v* J* d0 G" E( w% Y
费解。。。。。。。。。。。。。。。。
( |1 @1 V4 t7 {1 _* V
原理比较简单,算法思想是逐步逼近。
作者: 羅雲琦    时间: 2011-6-10 18:18
大笨象 发表于 2011-6-10 15:09 # _8 Q. G0 |3 `3 @0 z- C
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
" U# y1 i! b+ V& F$ G
謝謝,同學。
作者: wangluzhu    时间: 2011-6-10 23:42
NB啊!!膜拜中!!
作者: LoveDearDeer    时间: 2011-6-11 21:02
这就是一直我寻找的吗?
作者: 大笨象    时间: 2011-6-12 21:43
LoveDearDeer 发表于 2011-6-11 21:02
# I% T8 E0 m- }3 m% M这就是一直我寻找的吗?
% t3 O$ {( S7 R0 w/ }, H2 g3 R
可以探讨一下啊。现在正用软件自带的IP核cordic进行比较。
作者: 韦人长弓    时间: 2011-6-22 09:41
没体力,膜拜ing
7 v" I, g2 I, o9 r& s; @
作者: 韦人长弓    时间: 2011-6-22 09:42
,这可正是是要找的,跪谢楼主!
作者: 大笨象    时间: 2011-6-26 10:49
韦人长弓 发表于 2011-6-22 09:42   q$ l. d: N4 n4 B3 B
,这可正是是要找的,跪谢楼主!

5 `5 H0 C6 b! Y6 I" r咱们可以探讨,一起学习。
作者: 郑传赞    时间: 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
, [+ L! ]( b/ A: c; B" F' ^有什麽用?求解
- b1 w1 L; u- a0 G
可以使用硬件实现啊。使用加法器和移位寄存器就可以计算三角函数。
作者: sdccumcm    时间: 2012-10-7 16:54
好的 学习一下!           
作者: Arbitrary1111    时间: 2013-8-22 22:33
thanks for giving
作者: Lsiten    时间: 2014-12-1 22:23
顶顶顶一下6 G# c0 x$ o! S2 j2 I! Y

作者: 2740419624    时间: 2021-5-10 14:01
挺好的,作者台历好了怎么龙牙
2 v6 i9 Y2 c, e1 d  {* V) V1 j) S$ b




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