Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.67 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int main()
  6. {
  7.     double data_in1[128],data_in2[128],data_in3[128];
  8.     double data_out1[128],data_out2[128],data_out3[128],data_out4[128],data_out5[128],data_out6[128];
  9.     double data_out7[128],data_out8[128],data_out9[128],data_out10[128],data_out11[128],data_out12[128];
  10.     double data_out13[128],data_out14[128],data_out15[128],data_out16[128],data_out17[128],data_out18[128];
  11.     int k,N=128,n,an,bn;
  12.     double sum1=0,sum2=0;
  13.     double sita,pi;
  14.     double data_powerspectrum[128],sum_real[128],sum_imag[128];
  15.     int i=128;
  16.     FILE *fp1;
  17.  
  18.     pi=3.14159265358979;
  19.    
  20.  
  21.     if((fp1=fopen("data_sin_noise.txt","r"))==NULL){
  22.         printf("Cannot open the file %s \n");
  23.     }
  24.     for(i=0;i<128;i++){
  25.         fscanf(fp1,"%lf\n",&data_in1[i]);
  26.         printf("[%d]=%f\n",i,data_in1[i]);
  27.     }
  28.     fclose(fp1);
  29.     //data_inへsinの数値(データ)を入力
  30.  
  31.  
  32.     for(k=0;k<N;k++){
  33.         sum1=0;sum2=0;
  34.         for(n=0;n<128;n++){
  35.             sita=-1*(2*pi*k*n)/N;
  36.  
  37.             an=data_in1[n];
  38.             bn=0;//フーリエの時はbnは0でいい。しかし逆フーリエの時は0ではない。jは無視していい。
  39.            
  40.             sum1+=an*cos(sita)-bn*sin(sita);
  41.             sum2+=an*sin(sita)+bn*cos(sita);
  42.         }
  43.         data_out1[k]=sum1;
  44.         data_out2[k]=sum2;
  45.     }
  46.    
  47.     for(i=0;i<N;i++){
  48.         data_out3[i]=sqrt(data_out1[i]*data_out1[i]+data_out2[i]*data_out2[i]);//正弦波パワースペクトル
  49.     }
  50.  
  51.     for (k=0;k<N;k++){
  52.         if(20<k&&k<128-20){
  53.             data_out1[k]=0;           //フィルタ処理
  54.             data_out2[k]=0;
  55.         }
  56.     }
  57.  
  58.     for(k=0;k<N;k++){
  59.         data_out4[k]=sqrt(data_out1[k]*data_out1[k]+data_out2[k]*data_out2[k]);//処理後のパワースペクトル
  60.     }
  61.  
  62.     for(i=0;i<N;i++){
  63.         sum_real[i]=0;sum_imag[i]=0;
  64.         for(n=0;n<N;n++){
  65.             sita=(2*pi*k*n)/N;
  66.  
  67.             sum_real[i]+=(data_out1[n]*cos(sita))+(-1*data_out2[n]*sin(sita));
  68.             sum_imag[i]+=(data_out2[n]*cos(sita))+(data_out1[n]*sin(sita));
  69.         }
  70.         data_out5[i]=sum_real[i]/N;//逆離散フーリエ変換
  71.         data_out6[i]=sum_imag[i]/N;
  72.     }
  73.  
  74.     if((fp1=fopen("data_out3.txt","w")) == NULL){  //正弦波のパワースペクトルの出力
  75.         printf("Cannot open the file %s \n");
  76.     }
  77.     for(i=0; i<128; i++){
  78.         fprintf(fp1,"%f\n",data_out3[i]);
  79.         printf("[%d]=%f\n",i,data_out3[i]);
  80.     }
  81.     fclose(fp1);
  82.    
  83.     if((fp1=fopen("data_out4.txt","w")) == NULL){  //フィルタ処理後の正弦波のパワースペクトルの出力
  84.         printf("Cannot open the file %s \n");
  85.     }
  86.     for(i=0; i<128; i++){
  87.         fprintf(fp1,"%f\n",data_out4[i]);
  88.         printf("[%d]=%f\n",i,data_out4[i]);
  89.     }
  90.     fclose(fp1);
  91.  
  92.     if((fp1=fopen("data_out5.txt","w")) == NULL){  //処理後に出力した正弦波信号の出力
  93.         printf("Cannot open the file %s \n");
  94.     }
  95.     for(i=0; i<128; i++){
  96.         fprintf(fp1,"%f\n",data_out5[i]);
  97.         printf("[%d]=%f\n",i,data_out3[i]);
  98.     }
  99.     fclose(fp1);
  100.  
  101.     if((fp1=fopen("data_out6.txt","w")) == NULL){  //処理後に出力した正弦波出力の出力
  102.         printf("Cannot open the file %s \n");
  103.     }
  104.     for(i=0; i<128; i++){
  105.         fprintf(fp1,"%f\n",data_out6[i]);
  106.         printf("[%d]=%f\n",i,data_out6[i]);
  107.     }
  108.     fclose(fp1);
  109.  
  110.  
  111.  
  112.     if( ( fp1=fopen("data_square_noise.txt","r") ) == NULL ){
  113.         printf ( "Cannot open the file %s \n" );
  114.     }
  115.     for(i=0; i<128; i++){
  116.         fscanf(fp1,"%lf\n", &data_in2[i]);
  117.         printf("[%d]=%f\n", i, data_in2[i]);
  118.     }
  119.     fclose( fp1 );
  120.     //data_inへsquareの数値(データ)を入力
  121.  
  122.  
  123.  
  124.     for(k=0;k<N;k++){
  125.         sum1=0;sum2=0;
  126.         for(n=0;n<128;n++){
  127.             sita=-1*(2*pi*k*n)/N;
  128.  
  129.             an=data_in2[n];
  130.             bn=0;//フーリエの時はbnは0でいい。しかし逆フーリエの時は0ではない。jは無視していい。
  131.            
  132.             sum1+=an*cos(sita)-bn*sin(sita);
  133.             sum2+=an*sin(sita)+bn*cos(sita);
  134.         }
  135.         data_out7[k]=sum1;
  136.         data_out8[k]=sum2;
  137.     }
  138.    
  139.     for(i=0;i<N;i++){
  140.         data_out9[i]=sqrt(data_out7[i]*data_out7[i]+data_out8[i]*data_out8[i]);
  141.     }
  142.     for (k=0;k<N;k++){
  143.         if(20<k&&k<128-20){
  144.             data_out7[k]=0;
  145.             data_out8[k]=0;
  146.         }
  147.     }
  148.     for(k=0;k<N;k++){
  149.         data_out10[k]=sqrt(data_out7[k]*data_out7[k]+data_out8[k]*data_out8[k]);
  150.     }
  151.  
  152.     for(i=0;i<N;i++){
  153.         sum_real[i]=0;sum_imag[i]=0;
  154.         for(n=0;n<N;n++){
  155.             sita=(2*pi*k*n)/N;
  156.  
  157.             sum_real[i]+=(data_out7[n]*cos(sita))+(-1*data_out7[n]*sin(sita));
  158.             sum_imag[i]+=(data_out8[n]*cos(sita))+(data_out8[n]*sin(sita));
  159.         }
  160.         data_out11[i]=sum_real[i]/N;
  161.         data_out12[i]=sum_imag[i]/N;
  162.     }
  163.  
  164.     if((fp1=fopen("data_out9.txt","w")) == NULL){  //矩形波のパワースペクトルの出力
  165.         printf("Cannot open the file %s \n");
  166.     }
  167.     for(i=0; i<128; i++){
  168.         fprintf(fp1,"%f\n",data_out3[i]);
  169.         printf("[%d]=%f\n",i,data_out3[i]);
  170.     }
  171.     fclose(fp1);
  172.  
  173.     if((fp1=fopen("data_out10.txt","w")) == NULL){  //フィルタ処理後の矩形波のパワースペクトルの出力
  174.         printf("Cannot open the file %s \n");
  175.     }
  176.     for(i=0; i<128; i++){
  177.         fprintf(fp1,"%f\n",data_out3[i]);
  178.         printf("[%d]=%f\n",i,data_out3[i]);
  179.     }
  180.     fclose(fp1);
  181.  
  182.     if((fp1=fopen("data_out11.txt","w")) == NULL){  //処理後に出力した矩形波信号の出力
  183.         printf("Cannot open the file %s \n");
  184.     }
  185.     for(i=0; i<128; i++){
  186.         fprintf(fp1,"%f\n",data_out9[i]);
  187.         printf("[%d]=%f\n",i,data_out9[i]);
  188.     }
  189.  
  190.     if((fp1=fopen("data_out12.txt","w")) == NULL){  //処理後に出力した矩形波信号の出力
  191.         printf("Cannot open the file %s \n");
  192.     }
  193.     for(i=0; i<128; i++){
  194.         fprintf(fp1,"%f\n",data_out9[i]);
  195.         printf("[%d]=%f\n",i,data_out9[i]);
  196.     }
  197.  
  198.     fclose(fp1);
  199.    
  200.  
  201.  
  202.     if( ( fp1=fopen("data_triangle_noise.txt","r") ) == NULL ){
  203.         printf ( "Cannot open the file %s \n" );
  204.     }
  205.     for(i=0; i<128; i++){
  206.         fscanf(fp1,"%lf\n", &data_in3[i]);
  207.         printf("[%d]=%f\n", i, data_in3[i]);
  208.     }
  209.     fclose( fp1 );
  210.     //data_inへtriangleの数値(データ)を入力
  211.  
  212.  
  213.  
  214.  
  215.     for(k=0;k<N;k++){
  216.         sum1=0;sum2=0;
  217.         for(n=0;n<128;n++){
  218.             sita=-1*(2*pi*k*n)/N;
  219.  
  220.             an=data_in1[n];
  221.             bn=0;//フーリエの時はbnは0でいい。しかし逆フーリエの時は0ではない。jは無視していい。
  222.            
  223.             sum1+=an*cos(sita)-bn*sin(sita);
  224.             sum2+=an*sin(sita)+bn*cos(sita);
  225.         }
  226.         data_out13[k]=sum1;
  227.         data_out14[k]=sum2;
  228.     }
  229.    
  230.  
  231.     for(i=0;i<N;i++){
  232.         data_out15[i]=sqrt(data_out13[i]*data_out13[i]+data_out14[i]*data_out14[i]);
  233.     }
  234.  
  235.  
  236.     for (k=0;k<N;k++){
  237.         if(20<k&&k<128-20){
  238.             data_out1[k]=0;
  239.             data_out2[i]=0;
  240.         }
  241.     }
  242.  
  243.     for(k=0;k<N;k++){
  244.         data_out16[k]=sqrt(data_out13[k]*data_out13[k]+data_out14[k]*data_out14[k]);//√(real*real+img*img)
  245.     }
  246.  
  247.  
  248.     for(i=0;i<N;i++){
  249.         sum_real[i]=0;sum_imag[i]=0;
  250.         for(n=0;n<N;n++){
  251.             sita=(2*pi*k*n)/N;
  252.  
  253.             sum_real[i]+=(data_out1[n]*cos(sita))+(-1*data_out2[n]*sin(sita));
  254.             sum_imag[i]+=(data_out2[n]*cos(sita))+(data_out1[n]*sin(sita));
  255.         }
  256.         data_out17[i]=sum_real[i]/N;
  257.         data_out18[i]=sum_imag[i]/N;
  258.     }
  259.  
  260.     if((fp1=fopen("data_out15.txt","w")) == NULL){  //三角波のパワースペクトルの出力
  261.         printf("Cannot open the file %s \n");
  262.     }
  263.     for(i=0; i<128; i++){
  264.         fprintf(fp1,"%f\n",data_out15[i]);
  265.         printf("[%d]=%f\n",i,data_out15[i]);
  266.     }
  267.     fclose(fp1);
  268.  
  269.     if((fp1=fopen("data_out16.txt","w")) == NULL){  //フィルタ処理後の三角波のパワースペクトルの出力
  270.         printf("Cannot open the file %s \n");
  271.     }
  272.     for(i=0; i<128; i++){
  273.         fprintf(fp1,"%f\n",data_out16[i]);
  274.         printf("[%d]=%f\n",i,data_out16[i]);
  275.     }
  276.     fclose(fp1);
  277.  
  278.     if((fp1=fopen("data_out17.txt","w")) == NULL){  //処理後に出力した三角波信号の出力
  279.         printf("Cannot open the file %s \n");
  280.     }
  281.     for(i=0; i<128; i++){
  282.         fprintf(fp1,"%f\n",data_out17[i]);
  283.         printf("[%d]=%f\n",i,data_out17[i]);
  284.     }
  285.  
  286.     if((fp1=fopen("data_out18.txt","w")) == NULL){  //処理後に出力した三角波信号の出力
  287.         printf("Cannot open the file %s \n");
  288.     }
  289.     for(i=0; i<128; i++){
  290.         fprintf(fp1,"%f\n",data_out18[i]);
  291.         printf("[%d]=%f\n",i,data_out18[i]);
  292.     }
  293.  
  294.     fclose(fp1);
  295.  
  296.  
  297.  
  298.    
  299.  
  300.     return 0;
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement