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

📄 main.c

📁 数字信号处理实验
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define USAGE "usage: proc input-filename width height output-filename\n "

/*

$B:#EY$N1i=,$O%U!<%j%(JQ49$rMQ$$$?1i=,$G$9!#(B
$B$^$:!":G=i$K%U!<%j%(JQ49$r9T$$(B,
$B$=$N$^$^5UJQ49$r$*$3$J$$!"(B
$BI=<($7$F$_$^$7$g$&!#(B

$B%3%s%Q%$%k$O(B
Make
$B$G$G$-$^$9!#(B

$B<B9T$O(B
proc $BF~NO2hA|$N%U%!%$%kL>(B $BI}(B $B9b$5(B $B=PNO2hA|$N%U%!%$%kL>(B
$B$H$J$j$^$9!#(B

$B<B9TNc(B:
proc chest.raw 512 512 test.raw

$BI=<(Nc(B:
../x8view test.raw 512 512

*/


/*$B4X?t$N%W%m%H%?%$%W@k8@(B
$B>/$75,LO$,$*$*$-$/$J$C$F!"4X?t$,A}$($?$H$-$O$d$k$3$H(B*/

void get_args(int argc, char **argv);

void image_read_char(char *filename,int offset,
		     int width, int height,unsigned char *im);

void image_write_char(char *filename,
		      int w, int h,
		      unsigned char *im);


void FFT1(double *re_part, double *im_part,
	  int num_of_data, int flag);

void FFT2(double *redata, double *imdata,
	  int width, int height, int flag);


/*$B%0%m!<%P%kJQ?t(B*/
unsigned char *in, *out;
int width,height,header_size;


int main(int argc, char **argv)
{

  double *redata, *imdata;
  int i,j,mat_size;

  get_args(argc,argv);

  mat_size = width * height;

  /*$B2hA|$NJ]B8@h(B*/
  in  = malloc(mat_size * sizeof(char));
  out = malloc(mat_size * sizeof(char));

  /*
  $B%U!<%j%(JQ49$K$O(Bdouble$B7?$GJ#AG?t$NCM$,I,MW$K$J$k!#(B
  $B$=$N$?$a!"<B?tIt$NG[Ns$H5u?tIt$NG[Ns$rMQ0U$9$k!#(B
  $B2hAG?t$HF1$8!#J#AG?t$O<B?t$H5u?t$+$i$J$kCM!#(B
  $B$3$3$G$O!"<B?tIt$O(Bredata. $B5u?tIt$O(Bimdata$B$GI=$9!#(B
  */

  redata = malloc(mat_size * sizeof(double));
  imdata = malloc(mat_size * sizeof(double));

  /*$BJQ49$r9T$&2hA|$rFI$_9~$`(B*/
  image_read_char(argv[1],header_size,width, height,in);

  /*$B2hA|%G!<%?$r%@%V%k7?$NG[Ns$KF~$l$k!#(B
    $B$?$@$7!"<B?tIt$K$@$1F~$l$l$PNI$$!#(B
    $B5u?tIt$O#0$G$&$a$k!#<B:]$N:n6H$O(B
    char2double$B4X?t$K$^$+$;$k(B
    */
  char2double(in,redata,imdata,width*height);

  /*$B%U!<%j%(JQ49$N4X?t$KJ#AG?t(B,$B2hA|$NI}!"9b$5$rEO$9!#(B
    $B:G8e$N#1$O%U!<%j%(JQ49$r$7$a$9!#(B
    -1$B$N>l9g$O%U!<%j%(5UJQ49(B
    
    $BJQ498e$N%9%Z%/%H%k$OJ#AG?t$K$J$k$N$G(B,
    $B$=$l$O!"F~NOMQ$NG[Ns$K$O$$$C$FJV$C$F$/$k!#(B
    */

  FFT2(redata, imdata, width, height, 1);

  /*
    $B$3$N4V$O6u4V<~GH?tNN0h$K$J$k$N$G!"(B
    $B6u4V<~GH?tNN0h$G$N=hM}$r9T$&$H$-$K$O(B,
    redata, imdata$B$KBP$7$F=hM}$r$*$3$J$&$3$H$K$J$k!#(B

    $B$9$J$o$A!"(Bredata, imdata$B$+$i$J$kJ#AG?t$rA`:n$9$k$3$H$K$J$k(B

    $B$=$7$F!"$=$N=hM}$r$*$3$J$C$?J#AG?t$r5UJQ49$7$F(B
    $B6u4VNN0h$X$b$I$7$F$d$l$P!"$h$$(B
    */


  /*$B$J$K$b$7$J$$$G!":#EY$O5UJQ49$7$F$_$^$7$g$&(B
    $BF~NO$N2hA|$HF1$8$K$J$k$O$:$G$9(B

    $B5UJQ49$r9T$C$?7k2L$O<B?t$K$J$j(B,
    $BJ#AG?t$N<B?tItJ,$K$O$$$C$F$-$^$9(B
    
    */
  
  FFT2(redata, imdata, width, height, -1);

  double2char(out,redata,imdata,width*height);
  image_write_char(argv[4],width,height,out);

  return 0;
}


/*$B%3%^%s%I%i%$%s$NFI$_9~$_(B*/  
void get_args(int argc, char **argv)
{
  if(argc != 5)
    {
      fprintf(stderr, USAGE);
      exit(1);
    }
  width = atoi(argv[2]); printf("Image Size is W = %d,", width);
  height = atoi(argv[3]); printf("H = %d\n", height);
}


/*$B%U%!%$%k$NFI$_9~$_(B*/
void image_read_char(char *filename,
		     int offset, int w, int h,
		     unsigned char *im)
{
     FILE *fp;
     if ((fp=fopen(filename,"rb")) == NULL){
       printf("File Open Error Occured!\n");
       exit(-1);
     }
     fseek(fp,offset,0); 
     fread((unsigned char *)im,sizeof(char),w*h,fp);
     fclose(fp);
     printf("File Opening: %s\n",filename);
}


/*$B%U%!%$%k$N=q$-9~$_!#Bg$-$5$bEO$9;EMM(B*/
void image_write_char(char *filename,
		      int w, int h,
		      unsigned char *im)
{
    FILE *fp;
    if ((fp=fopen(filename,"wb")) == NULL){
        printf("File Open Error Occured!\n");
        exit(-1);
    }
    fwrite((unsigned char *)im, sizeof(char), w * h, fp);
    fclose(fp);
}

⌨️ 快捷键说明

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