/*------------------------------------------------ Á¦ÀÛ : Á¤¿ë½Â(naldoli@hanmail.net) ------------------------------------------------*/ #include #include #include #include #define fc 20000f #define fs 200000f #define kf 3000f #define pi 3.141592f /*ÇÔ¼ö ¼±¾ð*/ void lpfmake(float lfc, float lfs, int m, float *lpfdata); void conv( short int data1[], float data2[], int data1num, int data2num); float lpfdata[31]; /*lpfÀÇ µ¥ÀÌÅÍ*/ short int data[22050]; /*¿À¸®Áö³Î »ç¿îµå µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¹è¿­*/ void main() { /*ÇÁ·Î±×·¥¿¡ »ç¿ëÇÒ º¯¼ö ¼±¾ð.*/ FILE *wfp1, *wfp2; /*ÆÄÀÏÀÇ ÁÖ¼Ò ¼±¾ð*/ float i,n; float xT1, yT1, xT2, yT2; /*½ÅÈ£ÀÇ ÃàÀÇ ´ÜÀ§*/ int data_max; /*¿À¸®Áö³Î ½ÅÈ£ÀÇ yÃà ÃÖ´ë°ª*/ float Adata, float_data, theta, FMOUT; /*ZOH, theta, OUT º¯¼ö*/ int k, k1; int drive, mode; /*±×·¡ÇÈ ¸ðµå»ç¿ëÀ» À§ÇÑ º¯¼ö ¼±¾ð*/ drive = VGA; mode = VGAHI; data_max = 0; wfp1 = fopen("name1.wav", "rb"); /*name.wav¸¦ ÀÌÁø¸ðµå·Î ¿­¾î Æ÷ÀÎÅÍ¿¡ ÁÖ¼ÒÀúÀå*/ fseek(wfp1, 44, SEEK_SET); /*ÆÄÀÏ Æ÷ÀÎÅÍ À§Ä¡¸¦ µ¥ÀÌÅÍ·Î ¹Ù²Û´Ù.*/ /*Æ÷ÀÎÅ͸¦ ¹ÙÅÁÀ¸·Î µ¥ÀÌÅ͸¦ ¹è¿­·Î ºÒ·¯µå¸°´Ù.*/ for(i=0; i<22050; i++) { fread(&data[i], 2, 1, wfp1); if(abs(data[i]) > data_max) data_max = abs(data[i]); } fclose(wfp1); /*lpfµ¥ÀÌÅ͸¦ »ý¼ºÇÑ´Ù.*/ lpfmake(3000f, 44100f, 31, lpfdata); /*ÆÄÇü°ú lpfµ¥ÀÌÅ͸¦ convolutionÇÑ´Ù.*/ conv(data, lpfdata, 22050, 31); /*±×·¡ÇÈ ¸ðµå º¯È¯*/ initgraph(&drive, &mode, ""); outtextxy(0,220,"This is the original WAVE!"); outtextxy(0,440,"This is the modulation WAVE!"); /*¿øÆÄÇüÀ» ±×¸°´Ù.*/ xT1 = (640f/22050f); yT1 = 120f/data_max/4; moveto(0, 120); for(i=0; i<22050; i++) { lineto(xT1*i, -1*yT1*data[i]+120); } /*¸ðµâ·¹À̼Ç*/ k = 0, k1 =0, theta = 0; wfp1 = fopen("CONDATA.dat", "rb"); wfp2 = fopen("FMOUT.dat", "wb"); /*¸ðµâ·¹ÀÌ¼Ç µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ÆÄÀÏ¿ÀÇÂ*/ moveto(0, 360); for(n=0; n<100000; n++) { /*ZOH¸¦ ½ÃÅ´*/ k = (double)n * (44.1f/200f); if(k!=k1) { fread(&Adata, 4, 1, wfp1); float_data = Adata/data_max; k1 = k; } /*¸ðµâ·¹ÀÌ¼Ç ½Ã۰í FMOUT.dat¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÑÈÄ ±×·¡ÇÁ¸¦ ±×¸²*/ theta = theta + 2*pi*fc/fs + 2*pi*kf/fs*float_data; FMOUT = cos(theta); fwrite(&FMOUT, 4, 1, wfp2); xT2 = 640f/2000f; yT2 = 120f/4; lineto(xT2*n, -1*yT2*FMOUT+360); moveto(xT2*n, -1*yT2*FMOUT+360); } fclose(wfp2); getch(); closegraph(); } /*fs¿Í fc¿Í ÇÊ¿äÇÑ µ¥ÀÌÅÍ °¹¼ö¸¦ ¹Þ¾Æ¼­ ¹è¿­¿¡ ÀúÀåÇÏ´Â ÇÔ¼ö*/ void lpfmake(float lfc, float lfs, int m, float *lpfdata) { int i; float nt; float sinc; for(i=0 ; i= 0) && ((i-(data2num-1)+t1) < data1num) ) { outdata += (float)(data2[data2num-1-j]*(float)data1[i-(data2num-1)+t1]); } t1++; } fwrite(&outdata, 4, 1, confp); outdata = 0; } fclose(confp); }