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

📄 dsp中重要的傅立叶变换的源程序.txt

📁 DSP中
💻 TXT
字号:
DSP中重要的傅立叶变换的源程序  

      #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); 
      }

⌨️ 快捷键说明

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