DFT-isa


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

情報工学基礎演習 波長もとめる?

C言語 ソースコード
--------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>

void datascan(double data[],int n);
void dataprint(double data[],int m);
void sin_kesan(double data[],double save[],int m,int n);
void cos_kesan(double data[],double save[],int m,int n);
void ru_ta(double save[],double save_c[],double save_r[],double save_ta[],double save_ta2[],int m);

int main(){
  int i,j,n,m;/* n,n1=入力ようデータの個数  m=保存ようデータの個数*/
  double data[100];
  double save[50],save_c[50],save_r[50],save_ta[50],save_ta2[50];/* 結果保存用 */
  printf("dataの個数を入力下さい\n");
  scanf("%d",&n);
  m=n/2;
  for(i=0;i<=m;i++){
    save[i]=0;
    save_c[i]=0;
    save_r[i]=0;
    save_ta[i]=0;
    save_ta2[i]=0;
  }
  datascan(data,n);
  sin_kesan(save,data,n,m);
  cos_kesan(save_c,data,n,m);
  ru_ta(save,save_c,save_r,save_ta,save_ta2,m);
  printf("sinの値\n");
  dataprint(save,m);
  printf("cosの値\n");
  dataprint(save_c,m);
  printf("atanの値\n");
  dataprint(save_ta2,m);
  printf("ruto\n");
  dataprint(save_r,m);
  printf("pusai\n");
  dataprint(save_ta,m);
}

void datascan(double data[],int n){
  int i;
  printf("dataを入力して下さい");
  for(i=0;i<n;i++)scanf("%lf",&data[i]);
}

void dataprint(double save[],int m){
  int i;
  for(i=0;i<m;i++)printf("%d番 %f \n",i+1,save[i]);
}

void sin_kesan(double save[],double data[],int n,int m){
  double n1=n,m1=m;
  int i,j;
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      save[i]+=(sin((i+1)*j/n1 * 2 * M_PI)) * data[j];
    }
    save[i]=save[i]/m1;
  }
}

void cos_kesan(double save[],double data[],int n,int m){
  double n1=n,m1=m;
  int i,j;
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      save[i]+=(cos((i+1)*j/n1 * 2 * M_PI)) * data[j];
    }
    save[i]=save[i]/m1;
  }
}

void ru_ta(double save[],double save_c[],double save_r[],double save_ta[],double save_ta2[],int m){
  int k;
  for(k=0;k<m;k++){
    save_r[k]=sqrt(save[k]*save[k]+save_c[k]*save_c[k]);
    if(save[k]==0){
      if(save_c[k]>=0){save[k]=M_PI/2;}
      else{save[k]=3*M_PI/2;}
    }else if(save[k]>0){
      save_ta[k]=atan(save_c[k]/save[k]);
      if(save_ta[k]< 0 ){save_ta[k]=2*M_PI+save_ta[k];}
    }else{save_ta[k]=atan(save_c[k]/save[k])+M_PI;
    }
    save_ta2[k]=atan(save_c[k]/save[k]);
  }
}

------------------------------------------------------------------------------------------------------------------
使用マニュアル
 まず、データの個数を入力し(おそらく12個だと思われる)
次に、グラフから求めたデータを0/12から順に入力すると、sinとの内積、など授業に必要な値が出力される