intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Biến đổi fourier rời rạc part 6

Chia sẻ: Asg Ahsva | Ngày: | Loại File: PDF | Số trang:10

82
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'biến đổi fourier rời rạc part 6', khoa học tự nhiên, toán học phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Biến đổi fourier rời rạc part 6

  1. wr=(float *)malloc(n2*sizeof(float)); wi=(float *)malloc(n2*sizeof(float)); /*Generating LUT for twiddle factors. */ WTS(wr,wi,N,-1); FFT2D(fptr,fptro,wr,wi,L,N,m,-1); } void FFT2D(FILE *fptr, FILE *fptro, float *wr, float *wi, unsigned int *L, int N, int m, int sign) { /* 2-D FFT Algorithm. */ /* fptr=file pointer to input file. fptro=file pointer to output file. Note: fptr, fptro should be opened in the main routine. They are closed before return to @he main routine. wr[1,wj[I input arrays for twiddle factors, calculated by calling procedure WTS. L[I look-up table for bit reversal. N input array size ( NxN words.) =2 to the power m. sign =-1 for 2-D FFT, =1 for 2-D IFFT. For FFT (sign= 1) the input data is assumed to be real. The result of the FFT has its origin shifted to (N/2,N/2).*/ int N2,i,j,k,kk; long loc,NB; float *xr,*xi,*buff; N2=N
  2. gotoxy(1,3); printf(" First stage. "); for(j=0;j
  3. gotoxy(1,5); printf(" Transposing of intermediate file. "); rewind(fptro); transpose(fptro,N,m); rewind(fptro); /* Second stage. */ printf("\n Second stage."); for(j=0;j
  4. perror("\n fseek failed.\n"); exit(1) ; } fwrite(buff,NB,1,fptro); } fclose(fptro); } void FFT (float *xr, float *xi, float *wr, float *wi, int m, int N) { /* FFT algorithm. Decimation-in-time algorithm. Note: 1. N=2 to the power of m. 2. The input arrays are assumed to be rearranged in bit-reverse order. You will need to use routine "bit-reversal" for that purpose. 3. The twiddle factors are assumed to be stored in LUT's wr[] and wi[]. You will need to use routine LUT for calculating and storing twiddle factors. */ int ip,k,kk,l,incr,iter,i,j; float Tr,Ti; ip=1; kk=(N>>1); incr=2 ; for(iter=0; iter
  5. xi[i]=xi[j]-Ti; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } if(iter!=0) { for(k=1; k=1 ; ip
  6. }; void transpose(FILE *fptr, int N, int n) /* Algorithm */ { int N1 , inc ; int iter,i,k; int k1,inc1; int k2,j,k3,k4,NS; struct COMPLEX *buff1,*buff2,tmp; long loc,NT; NS=sizeof(struct COMPLEX); NT=N*NS ; buff1=(struct COMPLEX *)malloc(NT); buff2=(struct COMPLEX *)malloc(NT); N1=N/2 ; inc=1 ; inc1=2 ; for(iter=0;iter
  7. { perror("fseek failed"); exit(1) ; } else fread(buff2,NT,1,fptr); k3=0 ; for(k2=0;k2
  8. N1/=2 ; } } Bµi tËp 6.5 Cho c¸c m¶ng 2-D 1 1 1 1 1 1     vµ X  1 1 1 Y  1 1 0 0 0 0 1 0 0     Ph¸t triÓn mét ch­¬ng tr×nh C thùc hiÖn Ph¸t triÓn ch­¬ng tr×nh C tÝnh tÝch chËp tuÇn hoµn gi÷a hai d·y trong 1. miÒn kh«ng gian. Ph¸t triÓn ch­¬ng tr×nh C mµ sÏ thªm c¸c ®iÓm 0 ®Ó mçi chiÒu cña 2. m¶ng cã ®é dµi Ýt nhÊt lµ 3 + 3 – 1 = 5 vµ ®Þnh d¹ng tÝch chËp tuÇn hoµn qua DFT. Dïng ch­¬ng tr×nh 6.6 ®Ó ®­a ra tÝch chËp tuÇn hoµn qua 2-D FFT. 3. 6.6 HiÓn thÞ FFT NÕu FFT cña mét ¶nh trong tr­êng hîp tæng qu¸t lµ mét m¶ng cña c¸c sè phøc ®Çy ®ñ, ng­êi ta th­êng biÓu diÔn biªn ®é vµ pha cña tÇn sè cña ¶nh. Hai yÕu tè nµy biÓu diÔn tÝnh chÊt cña ¶nh. Th«ng th­êng biªn ®é tÇn sè ®­îc biÓu diÔn riªng lÎ vµ gäi lµ phæ biªn ®é. MÆc dï vËy, nh­ chóng ta ®· nghiªn cøu, pha ®ãng vai trß quan träng trong xö lý ¶nh, vµ hîp kh«ng hîp lý khi chØ biÓu diÔn phæ biªn ®é cña ¶nh. §Ó biÓu diÔn phæ d­íi d¹ng ¶nh, tÊt c¶ c¸c viÖc chóng ta cÇn ph¶i lµm lµ chia biªn ®é cña FFT thµnh c¸c gi¸ trÞ tõ 0 ®Õn 255 (cho ¶nh 8 bit). Dï thÕ nµo ®i ch¨ng n÷a th× phæ cña ¶nh còng bÞ suy gi¶m rÊt nhanh khi tÇn sè t¨ng lªn. V× vËy mµ vïng tÇn sè cao sÏ trë nªn lu mê khi biÓu diÔn phæ d­íi d¹ng ¶nh. §Ó gi¶i quyÕt vÊn ®Ò nµy chóng ta cÇn xö lý biªn ®é phæ mét chót b»ng hµm log. Hµm logarit sÏ söa ®é khuÕch ®¹i, vµ thay thÕ cho hiÓn thÞ phæ |H(u,v)| chóng ta hiÓn thÞ: D(u,v) = log10(1+|H(u,v)|) (6.67) BiÓu thøc nµy cho ta gi¸ trÞ zero khi D(u,v) = 0 hay |H(u,v)| = 0 vµ nh­ vËy D(u,v) lu«n lu«n cã gi¸ trÞ d­¬ng. Mét ch­¬ng tr×nh dïng ®Ó chuyÓn ®æi phæ thµnh d¹ng ¶nh ®­îc cho ë ch­¬ng tr×nh 6.7. H×nh 6.13 giíi thiÖu 132
  9. phæ cña ¶nh "IKRAM.IMG" trong h×nh 3.2a sau khi ®­îc chuyÓn ®æi dïng biÓu thøc (6.67). §iÓm tÇn sè (0,0) n»m ë trung t©m mµn h×nh. Chó ý phæ ¶nh gi¶m xuèng rÊt nhanh chãng khi tÇn sè t¨ng lªn. Ch­¬ng tr×nh 6.7 " DISP_FFT.C" Ch­¬ng tr×nh dïng ®Ó ®­a ra mét file chøa phæ tÇn sè trong d¹ng ¶nh cã thÓ hiÓn thÞ ®­îc. /************************ * Program developed by: * * M.A.Sid-Ahmed. * * ver.1.0 1992. * *************************/ /**************************************************** Program for calculating the magnitude of the 2-D FFT given a file containing the complex values of the FFT of an image. The result is placed in a form suitable for display in image form and stored in an external file. The mapping function D(u,v)=log10(1+ |(F(u,v)|) is used. ******************************************************/ #include #include #include #include #include #include void main() { int i,j,k,N,NB1,NB2; FILE *fptri, *fptro,*fptrt; double nsq; float max,min,xr,xi,scale; float *buffi,*bufft; char *buffo; char file_name[14]; 133
  10. H×nh 6.13 Phæ cña "IKRAM.IMG" clrscr(); printf(""Enter name of file containing FFT data ---> "); scanf("%s",file_name); fptri=fopen(file_name,"rb"); printf("Enter name of file for storing magnitude data -> "); scanf("%s",file_name); fptro=fopen(file_name,wb"); fptrt=fopen("temp.img","wb+"); nsq=(double)(filelength(fileno(fptri))/(2*sizeof(float))); N=(int)(sprt(nsq)); max=0.0; min=1.0e9; NB1=(N1; buffi=(float *)malloc(NB1); bufft=(float *)malloc(NB2); buffo(char *)malloc(N*sizeof(char)); 134
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2