网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  DSP中重要的傅立叶变换的源程序           ★★★ 【字体:
DSP中重要的傅立叶变换的源程序
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-25    
#include<stdio.h>
#include<math.h>
#include<float.h>
#include<malloc.h>
#include<stdlib.h>
void initial(int num_data, float* real, float* inm);
void enter_data(int num_data, float* data);
void wave_sin(int num_data, float* data);
void wave_cos(int num_data, float* data);
void decay(int num_data, float* data);
void random(int num_data, float* data);
void table(int num_data, char flag,
float* tablesin, float* tablecos);
void DFT(int num_data, char flag, float* real, float* img,
float* tablesin, float* tablecos);
float period;

void main()
{
int num_data;
int i;
char flag;
float *real, *img;
float *tablecos, *tablesin;
printf("PLEASE INPUT SAMPLE PERIOD(Second):");
scanf("%f", &period);
printf("PLEASE INPUT SAMPLE POINT NUMBER:");
scanf("%d", &num_data);
fflush(stdin);
printf("DFT OR IDFT (D/I):");
flag=getchar();
if(flag==‘d’) flag=‘D’;
if(flag==‘i’) flag=‘I’;
printf("\n");
real=(float*)malloc(sizeof(float)* num_data);
img=(float*)malloc(sizeof(float)* num_data);
tablesin=(float*)malloc(sizeof(float)* num_data);
tablecos=(float*)malloc(sizeof(float)* num_data);
initial(num_data, real, img);
table(num_data, flag, tablesin, tablecos);
DFT(num_data, flag, real, img, tablesin, tablecos);
for(i=0; i<num_data; i++)
printf("%8d real=%12.6f img=%12.6f\n",
i, real, img);
free(real);
free(img);
free(tablesin);
free(tablecos);
}

void initial(int num_data, float* real, float* img)
{
int n;
for(n=0; n<num_data; n++)
{
real[n]=0;
img[n]=0;
}
printf("INITIAL REAL DATA\n");
enter_data(num_data, real);
printf("\nINITIAL IMG DATA\n");
enter_data(num_data, img);
}

void enter_data(int num_data, float* data)
{
int selection;
printf("FUNCTION SELECTION\n");
printf("1-----AMPLITUDE*SIN(2*3.1415926
*FREQUENCY*PERIOD*T)\n");
printf(&

quot;2-----AMPLITUDE*COS(2*3.1415926
*FREQUENCY*PERIOD*T)\n");
printf("3-----AMPLITUDE*EXP(-PERIOD)\n");
printf("4-----DATA=0\n");
printf("5-----ENTER DATA\n");
printf("ENTER SELECTION---");
scanf("%d", &selection);
switch(selection)
{
case 1:wave_sin(num_data, data);break;
case 2:wave_cos(num_data, data);break;
case 3:decay(num_data, data);break;
case 4:break;
case 5:random(num_data, data);break;
}
}

void wave_sin(int num_data, float* data)
{
float amplitude, frequency, c;
int n;
printf("PLEASE INPUT AMPLITUDE OF WAVE:\n");
scanf("%f", &amplitude);
printf("PLEASE INPUT FREQUENCY OF WAVE(Hz):\n");
scanf("%f", &frequency);
for(n=0; n<num_data; n++)
{
c=2*3.1415926*frequency*period*n;
data[n]=(float)(amplitude*sin(c));
}
}

void wave_cos(int num_data, float* data)
{
float amplitude, frequency, c;
int n;
printf("PLEASE INPUT AMPLITUDE OF WAVE:\n");
scanf("%f", &amplitude);
printf("PLEASE INPUT FREQUENCY OF WAVE(Hz):\n");
scanf("%f", &frequency);
for(n=0; n<num_data; n++)
{
c=2*3.1415926*frequency*period*n;
data[n]=(float)(amplitude*cos(c));
}
}

void decay(int num_data, float* data)
{
float amplitude, c;
int n;
printf("PLEASE INPUT AMPLITUDE OF WAVE\n");
scanf("%f", &amplitude);
for(n=0; n<num_data; n++)
{
c=-period*n;
data[n]=(float)(amplitude*exp(c));
}
}

void random(int num_data, float* data)
{
int n;
for(n=0; n<num_data; n++)
{
printf("PLEASE INPUT DATA[%d]:", n);
scanf("%f", &data[n]);
}
}

void table(int num_data, char flag,
float* tablesin, float* tablecos)
{
float w, c;
int n;
w=(float)(8*atan(1)/num_data);
if(flag==‘D’) w=-w;
for(n=0; n<num_data; n++)
{

c=w*n;
tablecos[n]=(float)cos(c);
tablesin[n]=(float)sin(c);
}
}

void DFT(int num_data, char flag, float* img,
float* tablesin, float* tablecos)
{
int i, j, L;
float *result_r, *result_i;
result_r=(float*)malloc(sizeof(float)*num_data);
result_i=(float*)malloc(sizeof(float)*num_data);
for(i=0; i<num_data; i++)
{
result_r=0;
result_i=0;
for(j=0; j<num_data; j++)
{
L=i*j%num_data;
result_r=result_r+real[j]*tablecos[L]
+img[j]*tablesin[L];
result_i=result_i+img[j]*tablecos[L]
-real[j]*tablesin[L];
}
}
if(flag==‘D’)
{
for(i=0; i<num_data; i++)
{
real=result_r;
img=result_i;
}
}
else if(flag==‘I’)
{
for(i=0; i<num_data; i++)
{
real=result_r/num_data;
img=result_i/num_data;
}
}
free(result_r);
free(result_i);
}
               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    基于双DSP的雷场侦察图像实时…
    基于DSP的孤立词语音识别系统…
    基于DSP的电子节气门PID控制
    基于DSP的多路音/视频采集处…
    低功耗实时可编程DSP数字助听…
    基于DSP+CPLD的断路器智能控…
    基于DSP+CPLD的交流电机调速…
    基于DSP的分布式微机保护测控…
    基于DSP的语音实时变速系统设…
    以ARM和DSP嵌入式系统为核心…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号