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

📄 fouriertrans.txt

📁 这是一个关于DSP中重要的傅立叶变换的源程序!
💻 TXT
字号:
#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[i], img[i]); 
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("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[i]=0; 
  result_i[i]=0; 
  for(j=0; j<num_data; j++) 
  { 
   L=i*j%num_data; 
   result_r[i]=result_r[i]+real[j]*tablecos[L] 
    +img[j]*tablesin[L]; 
   result_i[i]=result_i[i]+img[j]*tablecos[L] 
    -real[j]*tablesin[L]; 
  } 
} 
if(flag=='D') 
{ 
  for(i=0; i<num_data; i++) 
  { 
   real[i]=result_r[i]; 
   img[i]=result_i[i]; 
  } 
} 
else if(flag=='I') 
{ 
  for(i=0; i<num_data; i++) 
  { 
   real[i]=result_r[i]/num_data; 
   img[i]=result_i[i]/num_data; 
  } 
} 
free(result_r); 
free(result_i); 
}

⌨️ 快捷键说明

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