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

10 302 0
Biến đổi fourier rời rạc part 2 pptx

Đang tải... (xem toàn văn)

Thông tin tài liệu

85 (n)FW (n)F (n)F 37 -4n 163623 (6.35) (n)FW - (n)F 2)(nF 37 -4n 163623 (6.36) ở đây F n f k W nk k 30 30 2 0 1 ( ) ( ) (6.37) F n f k W nk k 31 31 2 0 3 ( ) ( ) (6.38) , vv. Các biểu thức từ (6.29) đến (6.36) cho kết quả trong bớc thứ ba của thuật toán và biểu diễn trong lu đồ hình 6.4.Mỗi phần tử từ F 30 (n) đến F 37 (n) có thể chia tiếp thành hai phần tử nữa và bớc này tạo thành sơ đồ cuối cùng (bớc đầu tiên) trong lu đồ. 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 F 20 (n) 2 F 21 (n) 4 6 F 22 (n) 0 F 23 (n) 4 2 6 F 10 (n) F 11 (n) X(k) X(k) W - 2n Hệ số xoay n=0 đến 3 86 H×nh 6.3 Bíc thø hai sau bíc cuèi cïng trong thuËt to¸n FFT. 87 Hình 6.4 Bớc đầu tiên của lu đồ FFT. Hình 6.5 giới thiệu sơ đồ thuật toán FFT cho N = 16. Chú ý rằng do yêu cầu ban đầu của chơng trình mà dãy vào đợc sắp xếp lại và chứa ở X(k), ví dụ x(q) X(k) k = 0 đến 15 Bạn sẽ chú ý trên sơ đồ rằng q là giá trị bit của k. Cho N = 2 4 = 16 chúng ta phải có bốn bớc trong lu đồ. Trong mỗi bớc cần phải có tám bớm. Trong mỗi bớm chỉ có một phép nhân phức, hai phép cộng hoặc trừ phức. Tổng số phép nhân phức là 8/2 . 4. Tổng quát cho N = 2 r số phép nhân phức là (N/2) . r = (N/2 ) log 2 N và số phép cộng là Nlog 2 N. Chú ý, thực tế số phép nhân sẽ giảm xuống một ít, vì trong bớc đầu tiên hệ số xoay W 0 = 1 và trong các bớc còn lại chúng ta cũng có các bớm với hệ số xoay = 1. 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 F 30 (n) F 31 (n) F 32 (n) F 33 (n) F 34 (n) F 35 (n) F 36 (n) F 37 (n) X(k) X(k) Dãy đầu vào đã đợc sắp xếp lại 88 Xem xét trờng hợp N = 1024 = 2 10 . Số phép nhân cần dùng cho FFT là (N/2).10 = 1024 5 = 5120 so với 1 triệu phép nhân cho tính trực tiếp biến đổi DFT, đây là phơng pháp tiết kiệm thực sự cho tính toán. Bây giờ, chúng ta sẽ vạch ra thuật toán FFT. Đó không đơn thuần chỉ là sự phát triển một chơng trình từ lu đồ. Tuy nhiên, chúng ta có thể nghiên cứu lu đồ và vạch ra các bớc có thể dùng để phát triển một chơng trình. Từ lu đồ của hình 6.5 chúng ta có thể viết: Bớc thứ nhất. Trong bớc này ta có tám bớm với trọng lợng (hệ số xoay) W 0 = 1. Chúng ta có thể viết (xem hình 6.6) for (j=0 đến 15 với bớc tăng 2) { T=X(j+1); X(j+1)=X(j) - T; X(j)=X(j) + T; } Bớc thứ hai. Chúng ta có: 1.Bốn bớm với trọng lợng bằng 1. for (j=0 đến 15 với bớc tăng 4) { T=X(j); X(j+2)=X(j) - T; X(j)=X(j) + T; } 2. Bốn bớm với trọng lợng W 4 = W(3). Chú ý rằng chúng ta coi rằng các hệ số xoay W, W 2 , , W 7 đã đợc tính và đợc chứa trong W(0), W(1), W(6). for (j=0 đến 15 với bớc tăng 4) { T=X(j)W(3);X(j+2)=X(j) - T; X(j)=X(j) + T; } Bớc thứ ba. Chúng ta có : 89 1. Hai bớm với trọng lợng bằng 1. for (j=0 đến 15 với bớc tăng 8) { T=X(j); X(j+4)=X(j) - T; X(j)=X(j) + T; } Hình 6.5 Lu đồ thuật toán thuật toán phân chia miền thời gian. 0 1 2 3 4 5 6 7 0 2 4 6 0 2 4 6 0 4 0 4 0 4 0 4 0 0 0 0 0 0 0 0 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 4 8 12 2 6 12 14 1 5 9 13 3 7 11 15 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 n=0 n=0 đến 1 n=0 đến 3 n=0 đến 7 n W 8 n W 4 n W 2 n W Bậc của dãy vào biểu diễn dạng nhị phân Bậc của dãy ra biểu diễn dạng nhị phân bớc 0 bớc 1 bớc 2 bớc 3 90 2. Hai bớm với trọng lợng bằng W (1) = W 2 . for (j=1 đến 15 với bớc tăng 8) { T=X(j)W(1); X(j+4)=X(j) - T; X(j)=X(j) + T; } 3. Hai bớm với trọng lợng bằng W(3) = W 4 . for (j=2 đến 15 với bớc tăng 8) { T=X(j)W(3); X(j+4)=X(j) - T; X(j)=X(j) + T; } Hình 6.6 (a) Bớm cho thuật toán phân chia miền tần số;(b) Một bớm đơn giản. 4. Hai bớm với trọng lợng bằng W (5) = W 6 . for (j=3 đến 15 với bớc tăng 8) { T=X(j)W(5); X(j+4)=X(j) - T; F(2n) F(2n+1) )( 10 kf )( 11 kf (a) F(2n) F(2n+1) )( 10 kf )( 11 kf (b) 91 X(j)=X(j) + T; } Bớc thứ t và là bớc cuối cùng. 1.Một bớm với trọng lợng bằng 1. T = X(0) X(8)= X(0) - T X(0) = X(8) +T 2. Một bớm với trọng lợng bằng W (0) = W. T = X(1)W(0) X(1+8)= X(1) - T X(1) = X(1) +T 3. Một bớm với trọng lợng bằng W (1) = W 2 . T = X(1)W(1) X(2+8)= X(0) - T X(2) = X(2) +T . . . 8. Một bớm với trọng lợng bằng W (6) = W 7 . T = X(7)W(6) X(7+8)= X(7)-T X(7) = X(7) +T Các bớc dẫn chúng ta đến thuật toán với N = 16. Thuật toán ip=1 kk=8 incr=2 cho iter=0 đến 3 trong các bớc của 1 { cho j=0 đến 15 trong các bớc của incr 92 { i = j + ip T = X(j) X(i) = X(j) - T X(j) = X(j) +T nếu (iter không bằng 0) thì { cho k=1 đến ip-1 trong các bớc của 1 { r = k*kk - 1 cho j=k đến 15 trong các bớc của 15 { i=j+ip T=X(i)*W(r) X(i)=X(j)-1 X(j)=X(j)+T } } } kk=kk/2 ip= ip*2 inc=inc*2 } Thuật toán trên có thể dễ dàng mở rộng cho tất cả các trờng hợp của N. Chỉ có một lĩnh vực còn lại cần phải giải thích là sự sắp xếp lại các dãy dữ liệu đầu vào. Điều này có thể tạo ra dễ dàng nếu chúng ta tạo ra một bảng (LUT) L(i), L(i) là các giá trị đảo ngợc bit của i. Nếu dữ liệu đợc đọc từ một file thì tất cả các việc mà chúng ta phải làm là chuyển địa chỉ vùng của chúng trong file qua bảng LUT và lu các dữ liệu này trong địa chỉ chứa kết quả trong dãy đầu vào, X. Bớc này có thể chuyển sang ngôn ngữ C nh sau: for (i=0; i<N; i++) fscanf (fptr, %f , &X[L[i]]); Kết quả của LUT đợc chuyển thẳng và đợc cung cấp với chơng trình của thuật toán tính FFT trong Listing 6.1 dới dạng modun con dới tên bit_reversal( ). 93 Ch¬ng tr×nh 6.1 FFTDT.C FFT 1-D ThËp ph©n trong miÒn thêi gian. /*********************************** * Program developed by: * * M.A.Sid-Ahmed. * * ver. 1.0 1992. * * @ 1994 * *********************************/ /* FFT - Decimation-in-time routine with examplemain programing proper usage. */ #define pi 3.141592654 #include <stdio.h> #include <math.h> #include <alloc.h> #include <stdlib.h> void bit_reversal(unsigned int *, int , int); void WTS(float *, float *, int, int); void FFT(float *xr, float *xi, float *, float *, int , int); void main() { int i,k,m,N,n2,sign; unsigned int *L; float *wr,*wi,*xr,*xi; char file_name[14]; FILE *fptr; printf("\nEnter name of file containing data points-> "); scanf("%s",file_name); if((fptr=fopen(file_name,"rb"))==NULL) { printf("file %s does not exist."); exit(1); 94 } printf("Enter # of data points to be read >"); scanf("%d",&N); m=(int)(log10((double)N)/log10((double)2.0)); k=1; for(i=0;i<m;i++) k<<=1 ; if (k!=N) { printf("n Length of file has to be multiples of 2. "); exit(1); } /* Allocating memory for bit reversal LUT. */ L=(unsigned int *)malloc(N*sizeof(unsigned int)); /* Generate Look-up table for bit reversal. */ bit_reversal(L,m,N); /* Allocating memory for FFT arrays ( real and imag.) */ xr=(float *)malloc(N*sizeof(float)); xi=(float *)malloc(N*sizeof(float)); /* Setting-up the data in real and imag. arrays.*/ for(i=0;i<N;i++) { k=L[i] ; xr[k]=(float)getc(fptr); xi[k]=0.0 ; } fclose(fptr); /* Allocating memory for twiddle factors. */ n2=(N>>1)-1; wr=(float *)malloc(n2*sizeof(float)); wi=(float *)malloc(n2*sizeof(float)); /*Generating LUT for twiddle factors. */ WTS(wr,wi,N,-1); . 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 F 20 (n) 2 F 21 (n) 4 6 F 22 (n) 0 F 23 (n) . 0 1 2 3 4 5 6 7 0 2 4 6 0 2 4 6 0 4 0 4 0 4 0 4 0 0 0 0 0 0 0 0 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 4 8 12 2 6 12 14 1 5 9 13 3 7 11 15 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 . 0 1 2 3 4 5 6 7 0 2 4 6 0 2 4 6 0 4 0 4 0 4 0 4 0 0 0 0 0 0 0 0 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 4 8 12 2 6 12 14 1 5 9 13 3 7 11 15 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Ngày đăng: 29/07/2014, 04:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan