⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cordic.c

📁 cordic implementation in vhdl&c
💻 C
字号:
//-------------+--------------------------------------------------------------// Description | Evaluation of sin & cos using cordic algorithm.//// History     |//##############################################################################// Author : Aviral Mittal// avimit@yahoo.com//###############################################################################define NULL (0)#include <stdio.h>#include <string.h>#include <math.h>float str2float(char * argv[]);void PrintHelpMess();void HandleArgs(int argc);float msin(float angle);int main (int argc, char * argv[]){  float angle;  float sinval;  float cosval;  HandleArgs(argc);  angle = str2float(argv);  if(angle <0 || angle>90)  {    printf("ERROR! Input(%f) out of bounds, should be >=0 and <=90\n",angle);    exit(-1);  }  sinval = msin(angle);  printf("cos eval\n");  //cosval = msin(90-angle);  printf("Input Angle is %f,%f(rad), sinval = %f, cosval = %f\n",angle,(angle*3.141592)/180,sinval,cosval);  printf("Input Angle is %f,%f(rad), sinval = %f, cosval = %f\n",angle,(angle*3.141592)/180,sin((angle*3.141592)/180),cos((angle*3.141592)/180));}// int main (int argc, char * argv[])float str2float(char * argv[]){char whole[32];char *pwhole;char deci[32];char *pdeci;int wend = 0;int ww;int wd;int ii;int re = 1;int co = 0;float ff;        wend = 0;        ww = 0;        wd = 0;        pwhole = &whole[0];        pdeci = &deci[0];        ff = 0.0;        while(*argv[1])         {          if(*argv[1] == 46)//look for decimal i.e a dot '.'          {            wend = 1;          }          else          {            if(wend)            {              *pdeci = *argv[1]-48;              //printf("%d\n",*pdeci);              pdeci++;              wd++;            }            else            {              *pwhole = *argv[1]-48;              //printf("%d\n",*pwhole);              pwhole++;              ww++;            }          }          argv[1]++;        }// while(*argv[1])         *pwhole = '\0';        *pdeci = '\0';        pwhole--;        for(ii=0;ii<ww;ii++)        {          //printf("%d\n",*pwhole);          ff = ff + *pwhole*pow(10,ii);          pwhole--;        }        pdeci = pdeci - wd;        for(ii=1;ii<wd+1;ii++)        {          //printf("%d\n",*pdeci);          ff = ff + *pdeci*pow(10,-ii);          pdeci++;        }        return ff;}// float str2float(char * argv[])void PrintHelpMess(){  printf("ERROR! No Input. One expected\n");  printf("Usage> a.out <angle between 0 and 90>\n");  printf("Example> a.out 54\n");}void HandleArgs(int argc){switch(argc)  {    case 1 :      {        PrintHelpMess();        exit(-1);      }// case 1 :    case 2 :      {        break;      }// case 2 :    default:      {        printf("ERROR! Too many args at command line. Exiting....\n");        exit(-1);      }  }// switch(argc)}// void HandleArgs(int argc)float msin(float angle){  int itt = 5;  float re = 0.60725;  //float re = 1.0;  float im = 0;  float new_re;  float new_im;  float mag;  float angles[13];  float accum;  angles[0] = 45.0;  angles[1] = 26.56505;  angles[2] = 14.03624;  angles[3] = 7.12502;  angles[4] = 3.57633;  angles[5] = 1.78991;  angles[6] = 0.89517;  angles[7] = 0.44761;  angles[8] = 0.22381;  angles[9] = 0.111905;  angles[10] = 0.055953;  angles[11] = 0.027976;  angles[12] = .0139882;  accum = 0;  for(itt=0;itt<13;itt++)  {    if(angle > accum)    {      accum = accum + angles[itt];      new_re = re-im/pow(2,itt);      new_im = im+re/pow(2,itt);      printf("accum = %f,pow=%f\n",accum,pow(2,itt));    }    else     {      accum = accum - angles[itt];      new_re = re+im/pow(2,itt);      new_im = im-re/pow(2,itt);      printf("accum2 = %f,pow=%f\n",accum,pow(2,itt));    }    re=new_re;    im=new_im;    mag = pow((pow(new_re,2) + pow(new_im,2)),0.5);    printf("new_re = %f,new_im=%f,mag=%f,angle = %f\n",new_re,new_im,mag,angles[itt]);  }  //printf("cos = %f,sin=%f,angle(rad) = %f\n",new_re,new_im,(angle*3.141592)/180);  return(new_im);  }// float msin(float angle)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -