数学建模社区-数学中国

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

作者: 大笨象    时间: 2011-6-7 11:12
标题: CORDIC算法的matlab实现
本帖最后由 大笨象 于 2011-6-7 12:26 编辑
, Z( A2 i) q& H' i: J/ v
7 Q0 Z4 [, a! V: ~0 o. x不知道有木有人研究这个,比较偏向于硬件描述。! M0 N3 I3 x3 j1 c. H
今天先发一个sine cose函数的实现。) T( z9 D$ w% B1 R. ]6 Q8 A
有兴趣的可以看一下,m文件见附件。8 r, a1 }& l; s" z- s6 [2 _
function v=f_cordic(beta,n)3 b' P6 `- f( C6 M, Z& }
if beta < -pi/2 || beta > pi/2
2 I2 \9 b; E3 X/ q- [    if beta < 05 z8 x0 y! P6 e+ w$ `, W$ W
        v=f_cordic(beta + pi,n);: [7 a& R0 R. ^/ ]
    else
( c7 x7 }6 i0 d+ T. R2 c1 u$ ]8 @: M        v=f_cordic(beta - pi,n);6 g' d0 W8 y4 O, C6 r6 f
    end/ t$ Z& U) u3 T* r- h
    v = -v;% flip the sign for second or third quadrant
/ u- E3 \6 f$ X    return
% W3 l* I. b9 i+ l; a: A+ j% X0 b  vend
. `( `7 G+ q4 h# v4 S" X1 ?* _: D' q4 q% Initialization of tables of constants used by CORDIC
! Q7 ]: _4 U( g4 _7 ]% need a table of arctangents of negative powers of two, in radians:! l* e/ m9 F# A- u0 I: e
% angles = atan(2.^-(0:27));
( _0 l7 P8 J- t, d+ r/ Z. X# p" oangles =  [  ...
1 b$ X& i( b; I- U0 }4 _+ `3 z2 C    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...; ~) M+ A. B5 _
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
3 [9 Y$ N( Z8 u6 A3 \( b    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
. e% e/ k/ X# {: p; E    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
6 _) F5 B  z: N, A    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
/ ?& x  h" v. [1 W9 W6 M1 {    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...$ F0 A; P3 `& z7 S) B% E
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];$ K; H9 @  f8 F" s; C4 c
% and a table of products of reciprocal lengths of vectors [1, 2^-j]:. Y# A. ~1 m8 j: l& F! }
Kvalues = [ ...3 A& u- a1 Z/ v4 {& o, A( n# W1 s
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ..., d" L, s5 B! s$ ]5 r: {2 L) E( l4 Q
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ..." I3 m' _( d- @; w9 D: [  h
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...- a9 U) a  X. L# |. v1 h' U" z4 k
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...2 ~; L. x9 {5 u, z7 W* }4 u
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...! i7 M+ `0 h# m" \# ~2 I/ N% l) B8 p
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];/ A6 N# l; L' \/ i1 @
Kn = Kvalues(min(n, length(Kvalues)));
: P4 B: s; N  e7 q4 D 9 l$ L+ p" e/ B
% Initialize loop variables:% _2 j1 H# x$ k* U- {7 v
v = [1;0]; % start with 2-vector cosine and sine of zero: R- C& z/ G$ }7 [  h* @( {  b
poweroftwo = 1; 1 {1 d( v+ e8 h5 O. i
% Iterations
0 K. e" T9 q8 o9 nfor j = 1:n;& b3 _2 y2 D& _$ f
    if beta < 0, }3 d6 l( d7 o; z1 \
        sigma = -1;
' L) u7 q5 a1 h* B" h$ m1 v    else
. J7 O+ ]$ Z, F0 o$ ^, j  J# R        sigma = 1;
1 @" b; O+ Z" o' n    end( D! n: G6 S  Z* h8 [7 q
    % update the angle from table, or eventually by just dividing by two
2 `0 l! @+ r! O: T1 D( ]    if j <= length(angles)
/ G( n# Y1 S2 ~' \0 w        angle = angles(j);
, O- V" z' A8 D& L4 {$ v+ \    else
9 B5 Y/ \% }: V5 D+ r+ t& [7 i        angle = angle/2;
7 }3 J& {) e% f) k    end
; E) f- w, [( z: p; y( `, ^    factor = sigma * poweroftwo;" H3 Z  `2 i. Z7 V- }1 V; ]
    R = [1, -factor; factor, 1];
8 }1 ~- x3 z' K    v = R * v; % 2-by-2 mtrix multiply) z2 Q  y2 L& B( S
    beta = beta - sigma * angle; % update the remaining angle
! c& x- R( c& ^2 n" z# J2 \- d    poweroftwo = poweroftwo / 2;
( L" S' Z( E& }- Xend
3 L. p: i9 Q) M; k% Adjust length of output vector to be [cos(beta), sin(beta)]:& r8 i3 m( g' n! J7 E
v = v * Kn;8 o8 Y" G' A/ J0 E% L
return
5 T& y, q& J, X) r" ]  m" o+ D$ L) B3 _6 H: a0 [2 T
使用20位寄存器,仿真波形如下:
0 {& I" z* s/ A4 x5 p' n+ ~. n 仿真波形
/ j6 j7 o7 i) @4 s4 x

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
9 M) q0 H6 c- F  R这是什么算法?第一次听说
# i+ @6 U' x) ?+ _( q' N
这个,就是那个。感兴趣的话你还是自己搜搜吧。
作者: 大笨象    时间: 2011-6-9 19:54
赛才 发表于 2011-6-9 15:01
& k6 u* i1 w, R/ j7 O+ [我表示很给力
: q# ?( F/ h; w
给力就好。呵呵
作者: 魅影骑士    时间: 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
( i- H% L! B1 b0 Z- m有什麽用?求解
) W) T6 O7 M  F( |* x$ b
可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15
" A/ }& s; Q  z费解。。。。。。。。。。。。。。。。
" ~0 i% o3 {' r6 L- _# H
原理比较简单,算法思想是逐步逼近。
作者: 大笨象    时间: 2011-6-10 15:10
yingzhen 发表于 2011-6-9 21:15 & `) g  b5 E, j9 i5 i# c6 t% L
费解。。。。。。。。。。。。。。。。

8 L/ J! u0 k( K原理比较简单,算法思想是逐步逼近。
作者: 羅雲琦    时间: 2011-6-10 18:18
大笨象 发表于 2011-6-10 15:09
% c$ h) s4 h4 F可以用基本的加法器和移位寄存器实现三角函数,矩阵分解,傅里叶变换等。

( t" j0 [+ @5 s$ }5 s1 D謝謝,同學。
作者: wangluzhu    时间: 2011-6-10 23:42
NB啊!!膜拜中!!
作者: LoveDearDeer    时间: 2011-6-11 21:02
这就是一直我寻找的吗?
作者: 大笨象    时间: 2011-6-12 21:43
LoveDearDeer 发表于 2011-6-11 21:02
7 P/ t. W) e; s3 p( H' ]; X这就是一直我寻找的吗?

0 I( w/ @7 [+ D9 S* [, f可以探讨一下啊。现在正用软件自带的IP核cordic进行比较。
作者: 韦人长弓    时间: 2011-6-22 09:41
没体力,膜拜ing6 \5 e% j9 f% x  `* \" U

作者: 韦人长弓    时间: 2011-6-22 09:42
,这可正是是要找的,跪谢楼主!
作者: 大笨象    时间: 2011-6-26 10:49
韦人长弓 发表于 2011-6-22 09:42 5 O" j5 S2 B. P/ x
,这可正是是要找的,跪谢楼主!

5 o/ ^9 p) @5 ]* a咱们可以探讨,一起学习。
作者: 郑传赞    时间: 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
/ n# t# ^' {, G" J. E& m( a7 c有什麽用?求解

* \! z' j. @/ v( y. S, P1 m可以使用硬件实现啊。使用加法器和移位寄存器就可以计算三角函数。
作者: sdccumcm    时间: 2012-10-7 16:54
好的 学习一下!           
作者: Arbitrary1111    时间: 2013-8-22 22:33
thanks for giving
作者: Lsiten    时间: 2014-12-1 22:23
顶顶顶一下* t7 d; g* Y" c4 \+ q, L4 F

作者: 2740419624    时间: 2021-5-10 14:01
挺好的,作者台历好了怎么龙牙1 E  y/ A9 A- M4 n% U





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