Hello All,

I had a code for implementing CORDIC algorithm. While I go through it there were lot of errors showing up. Can anyone please help me with this. Thanks in advance.

I'm attaching the code below.

`#define M_PI 3.1415926536897932384626`

#define K1 0.6072529350088812561694

int main(int argc, char **argv)

{

int i;

int bits = 32; // number of bits

int mul = (1<<(bits-2));

int n = bits; // number of elements.

int c;

println("//Cordic in %d bit signed fixed point math\n", bits);

println("//Function is valid for arguments in range -pi/2 -- pi/2\n");

println("//for values pi/2--pi: value = half_pi-(theta-half_pi) and similarly for values -pi---pi/2\n");

println("//\n");

println("// 1.0 = %d\n", mul);

println("// 1/k = 0.6072529350088812561694\n");

println("// pi = 3.1415926536897932384626\n");

println("//Constants\n");

println("#define cordic_1K 0x%08X\n", (int)(mul*K1));

println("#define half_pi 0x%08X\n", (int)(mul*(M_PI/2)));

println("#define MUL %f\n", (double)mul);

println("#define CORDIC_NTAB %d\n", n);

println("int cordic_ctab [] = {");

for(i=0;i<n;i++)

{

c = (atan(pow(2, -i)) * mul);

println("0x%08X, ", c);

}

println("};\n\n");

//Print the cordic function

println("void cordic(int theta, int *s, int *c, int n)\n{\n int k, d, tx, ty, tz;\n");

println(" int x=cordic_1K,y=0,z=theta;\n n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n;\n");

println(" for (k=0; k<n; ++k)\n {\n d = z>>%d;\n", (bits-1));

println(" //get sign. for other architectures, you might want to use the more portable version\n");

println(" //d = z>=0 ? 0 : -1;\n tx = x - (((y>>k) ^ d) - d);\n ty = y + (((x>>k) ^ d) - d);\n");

println(" tz = z - ((cordic_ctab[k] ^ d) - d);\n x = tx; y = ty; z = tz;\n } \n *c = x; *s = y;\n}\n");

}

cordic-32bit.h

`//Cordic in 32 bit signed fixed point math`

//Function is valid for arguments in range -pi/2 -- pi/2

//for values pi/2--pi: value = half_pi-(theta-half_pi) and similarly for values -pi---pi/2

//

// 1.0 = 1073741824

// 1/k = 0.6072529350088812561694

// pi = 3.1415926536897932384626

//Constants

#define cordic_1K 0x26DD3B6A

#define half_pi 0x6487ED51

#define MUL 1073741824.000000

#define CORDIC_NTAB 32

int cordic_ctab [] = {0x3243F6A8, 0x1DAC6705, 0x0FADBAFC, 0x07F56EA6, 0x03FEAB76, 0x01FFD55B,

0x00FFFAAA, 0x007FFF55, 0x003FFFEA, 0x001FFFFD, 0x000FFFFF, 0x0007FFFF, 0x0003FFFF,

0x0001FFFF, 0x0000FFFF, 0x00007FFF, 0x00003FFF, 0x00001FFF, 0x00000FFF, 0x000007FF,

0x000003FF, 0x000001FF, 0x000000FF, 0x0000007F, 0x0000003F, 0x0000001F, 0x0000000F,

0x00000008, 0x00000004, 0x00000002, 0x00000001, 0x00000000, };

void cordic(int theta, int *s, int *c, int n)

{

int k, d, tx, ty, tz;

int x=cordic_1K,y=0,z=theta;

n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n;

for (k=0; k<n; ++k)

{

d = z>>31;

//get sign. for other architectures, you might want to use the more portable version

//d = z>=0 ? 0 : -1;

tx = x - (((y>>k) ^ d) - d);

ty = y + (((x>>k) ^ d) - d);

tz = z - ((cordic_ctab[k] ^ d) - d);

x = tx; y = ty; z = tz;

}

*c = x; *s = y;

}

Moderator edit: [code] [/code] tags added.