数学建模社区-数学中国

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

作者: 大笨象    时间: 2011-6-7 11:12
标题: CORDIC算法的matlab实现
本帖最后由 大笨象 于 2011-6-7 12:26 编辑 1 j8 a( h3 b+ \/ Q

+ h* d+ ?& i% Y+ A. t8 R7 s不知道有木有人研究这个,比较偏向于硬件描述。- b$ H( |6 B! H, l9 c
今天先发一个sine cose函数的实现。- u- Y1 L& j6 q" |2 ~0 N
有兴趣的可以看一下,m文件见附件。) J2 ?7 @! n! g
function v=f_cordic(beta,n)7 s: P+ {4 t2 D  m5 I# x% `5 I
if beta < -pi/2 || beta > pi/25 ?7 G! R& P  |, L/ F1 v& j
    if beta < 0
( Y+ B8 J' x- @/ u" E        v=f_cordic(beta + pi,n);
! b5 a6 N' s7 N- i! R( \& j' {1 Z; U    else5 Y' s, j/ k& X" ]* H! S# x
        v=f_cordic(beta - pi,n);, ^5 n2 B- j/ R9 q( q  H
    end
) s  `1 d+ C  Y$ @8 F6 z/ V+ L    v = -v;% flip the sign for second or third quadrant" i, v# h: U# R# @0 O
    return- ~/ d' P: {3 _  d
end$ P) C% i9 ?. B/ i5 Q8 q3 n" k
% Initialization of tables of constants used by CORDIC
+ I8 G3 c4 E0 Z  [% need a table of arctangents of negative powers of two, in radians:& D% k0 l7 L6 x
% angles = atan(2.^-(0:27));
9 j6 E" M* Z2 i  ^7 oangles =  [  ...
' a) n4 b" K% ]1 M    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
$ V: U( |3 P9 _+ ?    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
8 K2 G% ^3 A7 U5 A# L0 h3 {    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...5 `; n  q) y9 Z( S
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
, O; R) w& ?  m6 n5 f    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
/ }) k" M& _0 S) {9 G& P7 s    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...: p0 s' D7 Z+ ^' w
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];% R- N2 b! B2 o8 s* g2 ^; u. x( U. ^5 B+ h
% and a table of products of reciprocal lengths of vectors [1, 2^-j]:
; ?: P9 s' b  A$ FKvalues = [ ...: k1 Y  r5 V$ ?, a1 }
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...
/ J4 n% H, \( H4 D' ?) a    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
1 }- n7 E7 K3 `) A3 a" m* x' K! c    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
2 [. M. r0 I4 F+ `( \! |    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...! P6 ~8 j) E9 V- A1 o
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...0 K+ A4 Y3 E* G& T# _: `/ ^1 f
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
9 F5 I$ c2 _0 x; h+ T. C7 |Kn = Kvalues(min(n, length(Kvalues)));* D1 S  c/ J  \. I& e
1 `( k" p* }; H
% Initialize loop variables:
1 G7 Q# q. Q& w, R: zv = [1;0]; % start with 2-vector cosine and sine of zero5 J+ y. w8 z6 A+ m; J
poweroftwo = 1; ' _  y; k0 `1 t; x, u% l
% Iterations
1 S$ n" T5 A: I" I; D+ [( Hfor j = 1:n;: G* O: h. H% G/ w+ e
    if beta < 0
, [% K5 R4 I4 Q0 D; l9 F  l+ Q+ h* U        sigma = -1;
& x+ k9 e0 F) w* r+ d3 S    else2 ]/ {9 }/ o# D. Q4 y% M
        sigma = 1;
' C/ s: e& u% \    end3 j: F* z& w/ q; W  ~
    % update the angle from table, or eventually by just dividing by two0 w; D, k8 O" m; Z; J
    if j <= length(angles)4 g5 l4 N- b9 p" t3 e4 V- B3 S
        angle = angles(j);, K% Q" m: Y9 [! y
    else2 h. N  C1 Z4 H: i) h
        angle = angle/2;  d: ~* q# j6 l. x' K
    end
% O% f) l' P% @  t" _: G- R    factor = sigma * poweroftwo;
) v* d" \! Z6 F& G# j$ X  ]% {# L/ z    R = [1, -factor; factor, 1];2 y. Z6 P+ T0 y
    v = R * v; % 2-by-2 mtrix multiply
1 n5 [5 t7 D! n% u    beta = beta - sigma * angle; % update the remaining angle
4 c& `. n2 K1 C$ M4 E8 v& J3 g    poweroftwo = poweroftwo / 2;
/ m4 T& ]3 r8 d1 ]; k2 Pend5 M* Y: P" y! P, m2 M9 P6 d) `
% Adjust length of output vector to be [cos(beta), sin(beta)]:9 P, Q2 R6 T# b9 Q
v = v * Kn;
3 H3 T9 F! c: ]/ }; o0 \* a8 creturn
- @0 t# W: L( h3 z+ X: Z8 w4 P
1 D2 D" _( T% a0 D使用20位寄存器,仿真波形如下:2 b! |6 b: t5 R& f3 j. G
仿真波形 $ Q7 M4 ]9 Q( {( i* u5 _$ N6 P

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 ) S1 X3 ^2 d8 Q
这是什么算法?第一次听说
! r4 a$ m" ~# C& D; Y+ b0 t
这个,就是那个。感兴趣的话你还是自己搜搜吧。
作者: 大笨象    时间: 2011-6-9 19:54
赛才 发表于 2011-6-9 15:01
* O7 W6 ~# Y, T" j+ L2 @1 r我表示很给力
3 c. P( D! d- M# k; l
给力就好。呵呵
作者: 魅影骑士    时间: 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
& W5 g+ R2 u" [# w& G6 D有什麽用?求解
& P6 j9 f6 H% ]# O4 L4 U7 M
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15
' w9 |' n6 T! ~( C+ E% y费解。。。。。。。。。。。。。。。。
0 c$ r+ U3 W- y6 i+ s" k! k' `
原理比较简单,算法思想是逐步逼近。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15 - J* Y( E* i, d6 x* H6 {1 e
费解。。。。。。。。。。。。。。。。

# I8 m8 E1 O9 N原理比较简单,算法思想是逐步逼近。
作者: 羅雲琦    时间: 2011-6-10 18:18
大笨象 发表于 2011-6-10 15:09
& l' _3 _/ y* z! S1 Z可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
, ~+ }: c$ a# a* ^) {( w
謝謝,同學。
作者: wangluzhu    时间: 2011-6-10 23:42
NB啊!!膜拜中!!
作者: LoveDearDeer    时间: 2011-6-11 21:02
这就是一直我寻找的吗?
作者: 大笨象    时间: 2011-6-12 21:43
LoveDearDeer 发表于 2011-6-11 21:02
" R! ^7 Q6 [* H: k这就是一直我寻找的吗?

4 g( _( \5 U8 m* X* p0 ]可以探讨一下啊。现在正用软件自带的IP核cordic进行比较。
作者: 韦人长弓    时间: 2011-6-22 09:41
没体力,膜拜ing! V; N* ^3 z9 v1 U

作者: 韦人长弓    时间: 2011-6-22 09:42
,这可正是是要找的,跪谢楼主!
作者: 大笨象    时间: 2011-6-26 10:49
韦人长弓 发表于 2011-6-22 09:42 * k" q, R/ K0 t5 d
,这可正是是要找的,跪谢楼主!

. T: y7 F/ Q) p- T7 w咱们可以探讨,一起学习。
作者: 郑传赞    时间: 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 0 O& Y. y: X! k* T
有什麽用?求解
1 [6 U7 L& m3 Z2 z/ Y
可以使用硬件实现啊。使用加法器和移位寄存器就可以计算三角函数。
作者: sdccumcm    时间: 2012-10-7 16:54
好的 学习一下!           
作者: Arbitrary1111    时间: 2013-8-22 22:33
thanks for giving
作者: Lsiten    时间: 2014-12-1 22:23
顶顶顶一下0 y. R+ @# D+ S

作者: 2740419624    时间: 2021-5-10 14:01
挺好的,作者台历好了怎么龙牙7 ?" ]* @" n( J6 k$ u$ f4 K





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