Giáo trình xử lý ảnh y tế Tập 1b P16 ppsx

8 252 1
Giáo trình xử lý ảnh y tế Tập 1b P16 ppsx

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

Thông tin tài liệu

100 { for(j=0; j<N; j+=incr) { i=i+ip; Tr=xr[i]; Ti=xi[i]; xr[i]=xr[j]-Tr; xi[i]=xi[j]-Ti; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } for(k=1;k<ip; k++) { l=k*kk-1; for(j=k; j<N; j+=incr) { i=j+ip; Tr=xr[j]+xr[i]; Ti=xi[j]+xi[i]; diffr=xr[j]-xr[i]; diffi=xi[j]-xi[i]; xr[j]=Tr; xi[j]=Ti ; Tr=diffr*wr[1]-diffi*wi[1]; Ti=diffr*wi[1]+diffi*wr[1]; xr[i]=Tr; xi[i]=Ti ; } } kk<<=1; ip>>=1 ; incr>>=1; } } 6.3.3 FFT giảm lược Vấn đề có thể bắt đầu từ: cho 2 M điểm dữ liệu, chúng ta sẽ phải làm thế nào tính toán nhanh nhất khi dùng FFT có 2 L điểm ra với M  L? Nếu M < L, có một số bướm sẽ bị giảm lược (xem hình 6.8). Một giải thuật dựa trên tính toán các phần tử của bướm khi việc tính toán tất cả các phép tính là không cần thiết trong 101 trường hợp M < L gọi là giải thuật giảm lược đầu vào FFT. Trong trường hợp M > L thuật toán gọi là thuật toán giảm lược đầu ra FFT. Thuật toán giảm lược đầu vào FFT. Trường hợp này sẽ làm hoàn thiện hơn thuật toán phân chia tần số. Hình 6.8 giới thiệu trường hợp M = 1 và L = 4. Từ hình 6.8 chúng ta nhận thấy (L-M) bước đầu tiên có các phần tử bướm và L bước cuối cùng có toàn bộ các bướm. Sơ đồ này giúp chúng ta thay đổi chương trình 6.2 thành chương trình 6.3. Chương trình 6.3 "FFTIP.C". Giảm lược đầu vào FFT. /**************************** * Program developed by: * * M.A.Sid-Ahmed. * * ver. 1.0 1992. * * @ 1994 * ***************************/ /* FFT - input pruning routine. */ void bit_reversal(unsigned int *, int , int); void WTS(float *, float *, int, int); void FFTP(float *xr, float *xi, float *, float *, int,int,int, int); void FFTP(float *xr, float *xi, float *wr, float *wi, int m_output, int N_output, int m_input, int N_input ) { /* FFT pruning algorithm. Deimation-in-frequency algorithm. Note: 1. Noutput=2 to the power of m_output. N_output=Number of samples in the output sequence. M_input=Number of samples in the input sequence. This should also be a multiple of 2. 2. The output arrays are left in bit-reverse order. You will need to use routine "bit-reversal" to place them in normal ascending order. 102 3. The twiddle factors are assumed to be stored in LUT's wr[I and wi[I. You will need to use routine LUT for calculating and storing twiddle factors. */ int ip,k,kk,l,inc r,iter,j,i; float Tr,Ti,diffr,diffi; ip=N_output>>1; kk=l ; incr=N_output; for(iter=0; iter<(m_output-m_input); iter++) { for(j=0; j<N_output; j+=incr) { i=i+ip ; xr[i]=xr[j]; xi[i]=xi[j]; } for(k=l; k<N_input; k++) { l =k*kk- 1 ; for(j=k; j<N_output; j+=incr) { i=j+ip ; xr[i]=xr[j]*wr[l]-xi[j]*wi[l]; xi[i]=xr[j]*wi[l]+xi[j]*wr[l]; } } kk<<=1; ip>>=1; incr>>=1; } 0 1 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 4 8 12 2 6 10 14 1 5 9 13 3 7 11 15 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 W - n W - 6n W - 4n W - 2n 103 Hình 6.8 Lưu đồ thuật toán giảm lược đầu vào, N=4 for(iter=(m_output-m_input);iter<m_output;iter++) { for(j=0; j<N_output; j+=incr) { i=j+ip ; Tr=xr [i]; Ti =xi [i] ; xr[i]=xr[j]-Tr; xi[i]=xi[j]-Ti; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } for(k=l; k<ip; k++) { l=k*kk-1; for(j=k; j<N_output; j+=incr) { i=j+ip; Tr=xr[j]+xr[i]; Ti=xi[j]+xi[i]; diffr=xr[j]-xr[i]; diffi=xi[j]-xi[i]; xr[j]=Tr; xi[j]=Ti ; Tr=diffr*wr[l]-diffi*wi[l]; Ti=diffr*wi[l]+diffi*wr[l]; xr[i]=Tr; xi[i]=Ti; } 104 } kk<<=l; ip>>=l; incr>>=l; } } Bài tập 6.3 1.Cho dãy đầu vào : x(k) = 1 k = 0,1,2, , 31. x(k) = 0 các trường hợp còn lại. Tính 1024 điểm trong phổ tần số dùng chương trình giảm lược đầu vào FFT. 2. Thêm các giá trị 0 vào dãy để làm cho chiều dài dãy thành 1024. Bây giờ tính FFT scủa dãy dùng chương trình FFT phân chia tần số không giảm lược. So sánh thời gian xử lý của phần 1 và 2. Thuật toán FFT giảm lược đầu ra. Giải thuật phân chia miền thời gian thì thích hợp cho thuật toán giảm lược đầu ra hơn là giải thuật phân chia miền tần số. Lý do là đầu ra trong giải thuật phân chia miền thời gian không phải sắp xếp lại. Hình 6.9 giới thiệu trường hợp với M=4 và L=1. Hình 6.9 Lưu đồ cho giảm lược đầu ra FFT, N = 4. 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 0 4 8 12 2 6 10 14 1 5 9 13 3 7 11 15 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15 0 1 W n=0 đến 7 W n=0 đến 3 W n=0 đến 1 W n=0 105 Chương trình 6.4 “FFTOP.C” Giảm lược đầu ra FFT. /***************************** * Program developed by: * * M.A.Sid-Ahmed. * * ver. 1.0 1992. * * @ 1994 * *****************************/ /* FFT - output pruning using Decimation-in-time routine. */ # define pi 3.141592654 void bit_reversal(unsigned int *, int , int); void WTS(float *, float *, int, int); void FFTP(float *xr, float *xi, float *, float *,int, int, int, int); void FFTP(float *xr, float *xi, float *wr, float *wi, int m, int N, int m_output, int N_output) { /* FFT output pruning algorithm using Decimation-in-time. Note : 1. N=number of input samples =2 to the power m. N-output = number of output samples =2 to the power motput. 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,j,i; float Tr,Ti; 106 ip=1; kk=(N>>1 ); incr=2; for(iter=0; iter<m_output; iter++) { for(j=0; j<N; j+=incr) { i=j+ip; Tr=xr[i]; Ti=xi[i]; xr[i]=xr[i]-Tr; xi[i]=xi[i]-Ti; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } if(iter!=0) { for(k=1;k<ip; k++) { l=k*kk-1 ; for(j=k; j<N; j+=incr) { i =j+ip; Tr=xr[i]*wr[l]-xi[i]*wi[l]; Ti=xr[i]*wi[l]+xi[i]*wr[l]; xr[i]=xr[j]-Tr; xi[i]=xi[j]-Ti; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } } } kk>>=1; ip<<=1; incr<<=1; } for(iter=m_output; iter<m; iter++) { for(j=0; j<N; j+=incr) { 107 i=j+ip; xr[j]=xr[j]+xr[i]; xi[j]=xi[j]+xi[i]; } for(k=1; k<N_output; k++) { l=k*kk-1 ; for(j=k; j<N; j+=incr) { i=j+ip ; Tr=xr[i]*wr[l]-xi[i]*wi[l]; Ti=xr[i]*wi[l]+xi[i]*wr[i]; xr[j]=xr[j]+Tr; xi[j]=xi[j]+Ti; } } kk>>=1; ip<<=1; incr<<=1; } } Bài tập 6.4 Cho một bộ lọc thông cao Butterword: 2 2 0 )12( 1 1 )(      H ở đây  0 = 0.3, phát triển một chương trình C tính ra 1024 mẫu của đặc tuyến tần số trên các khoảng bằng nhau của tần số  từ 0 đến . Dùng các mẫu này tính năm mẫu đầu tiên của đáp ứng xung dùng FFT giảm lược. 6.4 2-D FFT Một DFT hai chiều của tín hiệu lấy mẫu hai chiều h(k 1 ,k 2 ) cho bởi )},({ ),(),( 21 1 0 1 0 ).(/2 2121 1 2 2211 kkhDFT ekkhnnH N k N k knknNj           (6.41) ở đây n 1 = 0,1,2 , , N-1 . Thêm các giá trị 0 vào d y để làm cho chiều dài d y thành 1024. B y giờ tính FFT scủa d y dùng chương trình FFT phân chia tần số không giảm lược. So sánh thời gian xử lý của phần 1 và 2. Thuật. n y giúp chúng ta thay đổi chương trình 6.2 thành chương trình 6.3. Chương trình 6.3 "FFTIP.C". Giảm lược đầu vào FFT. /**************************** * Program developed by:. incr<<=1; } } Bài tập 6.4 Cho một bộ lọc thông cao Butterword: 2 2 0 )12( 1 1 )(      H ở đ y  0 = 0.3, phát triển một chương trình C tính ra 1024 mẫu của đặc tuyến tần số trên các

Ngày đăng: 10/07/2014, 22:20

Từ khóa liên quan

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

Tài liệu liên quan