数学建模社区-数学中国

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

作者: 大笨象    时间: 2011-6-7 11:12
标题: CORDIC算法的matlab实现
本帖最后由 大笨象 于 2011-6-7 12:26 编辑 * r- ?. F% v9 i* h5 V6 r0 n3 v9 m" m8 x

% g! C  [" T6 D4 a* A; K# S3 t% T0 s不知道有木有人研究这个,比较偏向于硬件描述。
- `1 O: P/ |) R3 U今天先发一个sine cose函数的实现。& ?7 e6 H: Z, `& @
有兴趣的可以看一下,m文件见附件。$ e8 f8 m5 [) X& P4 C0 E, I
function v=f_cordic(beta,n)
0 N* u/ }! e7 W' S8 Y$ Y8 mif beta < -pi/2 || beta > pi/2
, h8 ?, z( \* k' a; K; B    if beta < 0% w% x6 O: Q' q
        v=f_cordic(beta + pi,n);
3 D: v$ v6 ^; J8 t) K    else3 a" h% x5 Q! M# ?
        v=f_cordic(beta - pi,n);
8 t. M% y2 h# i* f    end, k% _0 l2 F* o8 a/ {
    v = -v;% flip the sign for second or third quadrant0 H5 |6 C9 i" J$ k
    return
! ?5 m% Q6 y3 i7 E7 vend9 U* O4 `) v4 V
% Initialization of tables of constants used by CORDIC# j/ k9 ]  v+ q1 m- @3 o
% need a table of arctangents of negative powers of two, in radians:
1 b$ F5 d( j% r2 ^5 D& H% angles = atan(2.^-(0:27));
1 _; Q+ @7 q7 ^angles =  [  ...
; X3 x5 i6 `, b3 m    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...5 g' t& g4 @' q2 b8 s' ?' g
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
) [7 E7 z$ Y2 B    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...0 a$ a* m. w& r
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...8 Y3 B+ N8 Y+ V
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 .... L- z! I+ I4 ]2 `' y8 p! R
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...
3 G# N- f" ], C    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
! b4 l# f' O; l# b% and a table of products of reciprocal lengths of vectors [1, 2^-j]:
' M  L8 @3 z6 EKvalues = [ ...
* `/ D& g/ ~" T' k9 J. @    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...0 k$ R) w0 K5 l& O2 ]1 e) x6 ~
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...+ G2 l. h% m; b# M( a& U# z
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
2 L$ O$ c$ V& d: Z% ]7 T1 z* v    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
$ E1 j' X  w$ n, q2 b  C    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...2 s9 O& C" q7 w7 U
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
8 z0 E( k; \( i! DKn = Kvalues(min(n, length(Kvalues)));
0 C  k0 I! K4 ]/ ^$ x' a 0 D8 a5 c4 r: w
% Initialize loop variables:% u% g- p/ b. ^& M
v = [1;0]; % start with 2-vector cosine and sine of zero4 Q, U" Q7 Y4 d6 w' V7 s
poweroftwo = 1; , x7 C. l: X) v. u$ f# J- s0 u
% Iterations
7 c" k  ]: |' b' Tfor j = 1:n;
3 y$ _, w- ~# ?1 Z9 g    if beta < 0* P! N0 g& K) C' [2 y
        sigma = -1;* B: y4 a" N% z% S4 X
    else
2 S6 |! T9 t3 K1 Z; x        sigma = 1;
6 {" g- ]! Q3 |" P/ n    end% y* G/ F& T( D. `3 H) q3 K
    % update the angle from table, or eventually by just dividing by two7 y5 \# T+ b) A7 C
    if j <= length(angles)2 d/ q5 |/ r; E- O9 S
        angle = angles(j);. H: @# |9 i# G7 H# H& [
    else  S& {+ c2 J2 g) I- I6 ]& M
        angle = angle/2;3 h! X( q, o" G. i- C" f! v- _! R, O
    end
  E  |' o* G7 ?2 ]4 Z- d    factor = sigma * poweroftwo;
: E( m' P" H% A1 O1 Y    R = [1, -factor; factor, 1];
& @+ ~6 p' \# U' \0 I/ j    v = R * v; % 2-by-2 mtrix multiply
! Q' Y0 C  E* n9 V1 x0 Y8 V# r3 |    beta = beta - sigma * angle; % update the remaining angle
' r8 R0 q% f. W, B2 F    poweroftwo = poweroftwo / 2;
6 O- P) @3 X0 [$ R2 o- t: l8 v  r! t1 kend7 D7 @0 H4 P1 h$ z: k+ R# \6 ?  M" _
% Adjust length of output vector to be [cos(beta), sin(beta)]:
) V  t& h+ x& @8 u6 j' g' yv = v * Kn;  n0 p* X6 ~5 p$ I9 {% d
return
: b; A5 H: i: _5 K6 H
; V! r: s5 }$ C使用20位寄存器,仿真波形如下:& A( Z  J/ U% o4 o0 I7 Q
仿真波形
, `2 }5 Q4 b$ g! d

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 * S2 n9 A6 q' k" d4 Q9 Q: ^
这是什么算法?第一次听说
' H% g1 v. i) A- y- K
这个,就是那个。感兴趣的话你还是自己搜搜吧。
作者: 大笨象    时间: 2011-6-9 19:54
赛才 发表于 2011-6-9 15:01 1 I$ z6 q+ |1 D5 ]* y" W- V! ~
我表示很给力

  r9 _" w5 C) m$ R, X  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
9 t7 q2 r1 \1 W3 ]. {8 @# e有什麽用?求解
  k" d2 B1 k2 |( m
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15 + y9 \" g6 v& V! P
费解。。。。。。。。。。。。。。。。
9 N; x' ~9 E+ t/ G) W; m
原理比较简单,算法思想是逐步逼近。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15
- @6 i( U7 A' ?( Y7 u费解。。。。。。。。。。。。。。。。

& h8 N5 s& u' i+ I) L+ ?0 g0 l* F: V原理比较简单,算法思想是逐步逼近。
作者: 羅雲琦    时间: 2011-6-10 18:18
大笨象 发表于 2011-6-10 15:09
7 D6 m( D0 v( O5 t5 t可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。

& {9 W" h% F+ Y8 G* G( j; k謝謝,同學。
作者: wangluzhu    时间: 2011-6-10 23:42
NB啊!!膜拜中!!
作者: LoveDearDeer    时间: 2011-6-11 21:02
这就是一直我寻找的吗?
作者: 大笨象    时间: 2011-6-12 21:43
LoveDearDeer 发表于 2011-6-11 21:02 8 q& e' e7 H; c/ L" L. e( {
这就是一直我寻找的吗?

, {" m) V: d. B. ]可以探讨一下啊。现在正用软件自带的IP核cordic进行比较。
作者: 韦人长弓    时间: 2011-6-22 09:41
没体力,膜拜ing+ x3 c9 X2 R0 w4 N. p6 j, D+ j

作者: 韦人长弓    时间: 2011-6-22 09:42
,这可正是是要找的,跪谢楼主!
作者: 大笨象    时间: 2011-6-26 10:49
韦人长弓 发表于 2011-6-22 09:42
4 |4 K1 N5 ^+ G$ O,这可正是是要找的,跪谢楼主!
4 a; U$ r9 _8 @- b
咱们可以探讨,一起学习。
作者: 郑传赞    时间: 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 6 W. e3 e' o* M9 T- i/ Z6 x
有什麽用?求解
  c- e( z* \% [
可以使用硬件实现啊。使用加法器和移位寄存器就可以计算三角函数。
作者: sdccumcm    时间: 2012-10-7 16:54
好的 学习一下!           
作者: Arbitrary1111    时间: 2013-8-22 22:33
thanks for giving
作者: Lsiten    时间: 2014-12-1 22:23
顶顶顶一下! p+ B! B0 l$ O2 n; H, i

作者: 2740419624    时间: 2021-5-10 14:01
挺好的,作者台历好了怎么龙牙+ p1 }- W; J0 J& }( Q" b5 r9 V





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