大笨象 发表于 2011-6-7 11:12

CORDIC算法的matlab实现

本帖最后由 大笨象 于 2011-6-7 12:26 编辑

不知道有木有人研究这个,比较偏向于硬件描述。
今天先发一个sine cose函数的实现。
有兴趣的可以看一下,m文件见附件。
function v=f_cordic(beta,n)
if beta < -pi/2 || beta > pi/2
    if beta < 0
        v=f_cordic(beta + pi,n);
    else
        v=f_cordic(beta - pi,n);
    end
    v = -v;% flip the sign for second or third quadrant
    return
end
% Initialization of tables of constants used by CORDIC
% need a table of arctangents of negative powers of two, in radians:
% angles = atan(2.^-(0:27));
angles =  [  ...
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
% and a table of products of reciprocal lengths of vectors :
Kvalues = [ ...
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
Kn = Kvalues(min(n, length(Kvalues)));

% Initialize loop variables:
v = ; % start with 2-vector cosine and sine of zero
poweroftwo = 1;
% Iterations
for j = 1:n;
    if beta < 0
        sigma = -1;
    else
        sigma = 1;
    end
    % update the angle from table, or eventually by just dividing by two
    if j <= length(angles)
        angle = angles(j);
    else
        angle = angle/2;
    end
    factor = sigma * poweroftwo;
    R = ;
    v = R * v; % 2-by-2 mtrix multiply
    beta = beta - sigma * angle; % update the remaining angle
    poweroftwo = poweroftwo / 2;
end
% Adjust length of output vector to be :
v = v * Kn;
return

使用20位寄存器,仿真波形如下:

杨帆 发表于 2011-6-8 19:27

我表示学习了

zhangjichang 发表于 2011-6-8 22:31

这是什么算法?第一次听说{:3_41:}

赛才 发表于 2011-6-9 15:01

我表示很给力

大笨象 发表于 2011-6-9 19:52

zhangjichang 发表于 2011-6-8 22:31 static/image/common/back.gif
这是什么算法?第一次听说

这个,就是那个。感兴趣的话你还是自己搜搜吧。

大笨象 发表于 2011-6-9 19:54

赛才 发表于 2011-6-9 15:01 static/image/common/back.gif
我表示很给力

给力就好。呵呵

魅影骑士 发表于 2011-6-9 20:08

顶一下!{:soso_e100:}

yingzhen 发表于 2011-6-9 21:15

费解。。。。。。。。。。。。。。。。

羅雲琦 发表于 2011-6-9 22:32

有什麽用?求解

jt202010 发表于 2011-6-10 10:21

{:3_41:}{:3_41:}{:3_41:}
页: [1] 2 3 4
查看完整版本: CORDIC算法的matlab实现