xu ly so tin hieu SO LUONG DUY KHANH

4 434 0
xu ly so tin hieu SO LUONG DUY KHANH

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

Thông tin tài liệu

4.5 các thuật toán tính DFT nhanh (FFT) Tính trực tiếp DFT khi độ dài N lớn mất nhiều thời gian, ngay cả khi dùng máy tính. Để rút ngắn thời gian tính DFT, người ta xây dựng các thuật toán tính DFT nhanh, chúng được viết tắt theo tiếng Anh là FFT (Fast Fourier Transform). Có rất nhiều thuật toán FFT khác nhau, do hạn chế về thời lượng nên ở đây chỉ trình bầy thuật toán FFT phân chia theo thời gian. 4.5.1 Cơ sở của thuật toán FFT phân chia theo thời gian Cơ sở của thuật toán FFT phân chia theo thời gian là chia nhỏ dãy x(n) N có độ dài N thành hai dãy có độ dài nhỏ hơn bằng cách phân tích N thành tích của hai thừa số nguyên : N = M. L [4.5-1] Nếu độ dài N nhỏ hơn tích số đã chọn thì có thể thêm vào dãy x(n) N các mẫu có giá trị 0 để tăng N. Bằng cách như vậy, có thể chuyển việc lưu giữ trong bộ nhớ dãy x(n) N có N phần tử (hình 4.19), thành mảng x(m, l) có M cột và L hàng với M. L = N phần tử. Nếu xắp xếp dãy x(n) N trong mảng x(m, l) theo cột như trên hình 4.20 , thì chỉ số n tương ứng của dãy x(n) N sẽ là : n = l + mL [4.5-2] n = 0 1 2 (N –1) x[0] x[1] x[2] x[N -1] Hình 4.19 : Lưu giữ trong bộ nhớ dãy x(n) N . m = 0 1 2 (M –1) l = 0 x[0] x[L] x[2L] x[(M-1)L] 1 x[1] x[L+1] x[2L+1] x[(M-1) (L+1)] 2 x[2] x[L+2] x[2L +2] x[(M-1) (L+2)] . . . . . . . . . . . . . . . . . . (L-1) x[L -1] x[2L -1] x[3L -1] x[ML –1] Hình 4.20 : Mảng x(m, l) xắp xếp theo cột : n = l + mL. Tương tự như vậy, cũng lưu giữ dãy X(k) N bằng mảng X(p, q) , có M cột và L hàng với M. L = N phần tử. Khi dãy x(n) N đã được xắp xếp trong mảng x(m, l) theo cột như trên hình 4.20, thì dãy X(k) N phải được xắp xếp trong mảng X(p, q) theo hàng như trên hình 4.21, khi đó chỉ số k tương ứng của dãy X(k) N là : k = pM + q [4.5-3] p = 0 1 2 (M–1) q = 0 X[0] X[1] X[2] X[M-1] 1 X[M] X[M+1] X[M+2] X[2M-1] 2 X[2M] X[2M+1] X[2M+2] X[3M-1] . . . . . . . . . . . . . . . . . . (L-1) X[(L-1)M] X[(L-1) (M+1)] X[(L-1) (M+2)] X[LM-1] Hình 4.21 : Mảng X(p, q) xắp xếp theo hàng : k = pM + q. Do đó biểu thức của DFT có thể được biểu diễn như một tổng đúp trên các phần tử của hai mảng trên : ∑ ∑ − = − = ++− = 1 0 1 0 ).).(( 1 ).,(),( M m L l mLlqpMj emlxqp X ω [4.5-4] Thay N π ω 2 1 = , hệ số pha được tính cụ thể như sau : NNN M N M N jqmLjqlLjpmjplmLlqpMj eeeee πππππ 22222 .).).(( . −−−−++− = 178 Trong đó : l L jp jpl ee N M 2 2 π π − − = 1 2. . 22 === − −− π ππ jpm jpmLjpm eee N N N M mjq jqmL M N ee . 2 2 π π − − = Vậy : l L jp mjq ljqmLlqpMj eeee M NN ).).(( 2 2 22 π π ππ − − −++− = Do đó có thể viết lại [4.5-4] dưới dạng : ∑ ∑ − = − − = − −                 = 1 0 1 0 2 2 2 .).,(.),( L l l L jp m mjq ljq eemlxeqp M M N X π π π [4.5-5] Theo biểu thức [4.5-5] , thay vì phải tính DFT N điểm, cần tính các DFT M và L điểm, các bước thực hiện thuật toán FFT trên như sau : 1. Chuyển dãy x(n) N thành mảng x(m, l) xắp xếp theo cột, với kích thước mảng là M. L = N. 2. Tính L lần DFT M điểm cho các hàng x(m, l) , với l = 0 ÷ (L -1) để nhận được mảng F(l, q) : ∑ − = − = 1 0 . 2 ).,(),( M M m mjq emlxql F π [4.5-6] 3. Tính các phần tử của mảng G(l, q) : ljq N eqlql FG 2 ).,(),( π − = [4.5-7] 4. Tính M lần DFT L điểm cho các cột G(l, q), với q = 0 ÷ (M -1) để nhận được mảng X(p, q) : ∑ − = − = 1 0 2 ).,(),( L l l L jp eqlqp GX π [4.5-8] 5. Chuyển mảng X(p, q) thành dãy X(k) N xắp xếp theo hàng. Thoạt trông có cảm giác tính DFT theo thuật toán FFT như trên là phức tạp hơn. Tuy nhiên, hiệu quả của FFT sẽ chỉ thấy được khi so sánh số lượng các phép tính cần thực hiện. Chẳng hạn, so sánh trên số lượng các phép tính nhân và cộng số thực. Bước 2 cần tính L lần DFT M điểm, do đó cần thực hiện 2.L.M 2 phép nhân số thực , và 2.L.M.(M - 1) phép cộng số thực. Bước 3 cần thực hiện 2.L.M phép nhân số thực. Bước 4 cần phải tính M lần DFT L điểm, do đó cần thực hiện 2.M.L 2 phép nhân số thực , và 2.M.L.(L - 1) phép cộng số thực. Tổng cộng số lượng phép nhân và phép cộng của thuật toán FFT phân chia theo thời gian là : - Phép nhân : 2.L.M 2 + 2.L.M + 2.M.L 2 = 2.N. (M + L + 1) - Phép cộng : 2.L.M.(M - 1) + 2.M.L.(L - 1) = 2.N. (M + L - 2) Như vậy, so với tính trực tiếp DFT thì tính theo thuật toán FFT đã giảm số phép nhân từ 2.N 2 xuống còn 2.N. (M + L + 1), và số phép cộng thì giảm từ 2.N. (N - 1) xuống còn 2.N. (M + L - 2). Để thấy rõ hơn, hãy xem so sánh số lượng các phép nhân trên bảng 4.19. Bảng 4.19 : Số phép nhân khi tính trực tiếp DFT và tính theo FFT. N Số phép nhân khi tính trực tiếp FFT với M = N/2 FFT với M = N/4 Số phép nhân So với tính trực tiếp giảm còn Số phép nhân So với tính trực tiếp giảm còn 16 512 352 69 % 288 56 % 100 20000 10600 53 % 6.000 30 % 10000 200000000 100060000 50 % 50100000 25 % Bảng 4.19 cho thấy, khi độ dài N tính DFT càng tăng thì khối lượng tính DFT theo thuật toán FFT càng giảm. Hơn nữa, tính theo thuật toán FFT với M = N/4 thì khối lượng tính nhỏ hơn tính theo FFT với M = N/2. Tuy nhiên, khi N tăng rất lớn, thì mức lợi về khối lượng tính không tăng lớn tương ứng. Trên cơ sở của thuật toán FFT như trên, có thể tiếp tục phân chia thành các FFT nhỏ hơn, tức là tính FFT nhiều lớp. Khi số lớp tăng lên thì mức lợi về khối lượng tính toán cũng tăng. Để phân chia FFT thành nhiều lớp thì phải phân tích N thành tích của các thừa số nguyên tố dạng : r MMMMN . 321 = Trong trường hợp MMMMM r ===== . 321 , thì ta có : r MN = Khi M = 2 người ta gọi là thuật toán FFT cơ số hai, khi M = 4 người ta gọi là thuật toán FFT cơ số bốn, chúng đều có thể được thực hiện theo một lớp hoặc nhiều lớp. Từ nguyên tắc đã được trình bầy ở trên, người ta xây dựng các thuật toán FFT cơ số hai phân chia theo thời gian, thuật toán FFT cơ số bốn phân chia theo thời gian Mỗi thuật toán FFT cụ thể còn có những đặc điểm riêng khi đi sâu nghiên cứu chúng. Cũng theo nguyên tắc trên, nhưng thực hiện phân chia theo tần số, người ta xây dựng các thuật toán FFT cơ số hai phân chia theo tần số, thuật toán FFT cơ số bốn phân chia theo tần số. 179 Có thể tham khảo sâu hơn về các thuật toán FFT phân chia theo thời gian và FFT phân chia theo tần số ở các tài liệu tham khảo [6], [12]. 4.5.2 Thực hiện thuật toán FFT phân chia theo thời gian 4.5.2a Thực hiện thuật toán FFT cơ số hai phân chia theo thời gian Để thấy được trực quan thuật toán FFT cơ số hai, xét ví dụ sau. Ví dụ 4.21 : Hãy tính DFT 16 điểm của dãy x(n) 10 bằng thuật toán FFT cơ số hai phân chia theo thời gian. Giải : Để tính DFT 16 điểm, cần thêm 6 mẫu 0 vào cuối dãy x(n) 10 : { } 0000009876543210 )()()()()()()()()()( xxxxxxxxxx Với M = N/2 = 16/2 = 8 thì L = 2 , nghĩa là mảng x(m, l) có 8 cột và 2 hàng. - Bước một : Lưu giữ dãy x(n) 16 bằng mảng x(m, l) xắp xếp theo cột :       00097531 00086420 )()()()()( )()()()()( xxxxx xxxxx Khi chuyển sang chỉ số mảng hai chiều, nhận được mảng x(m, l) :       )()()()()()()()( )()()()()()()()( 7,16,15,14,13,12,11,10,1 7,06,05,04,03,02,01,00,0 xxxxxxxx xxxxxxxx Mỗi hàng có ba phần tử ở cuối bằng 0, và hàng có chỉ số l = 0 là các mẫu chẵn x(2n) 16 , còn hàng có chỉ số l = 1 là các mẫu lẻ x(2n+1) 16 - Bước hai : Tính hai DFT 8 điểm ứng với hai hàng và nhận được mảng F(l, q) : ∑ = − = 7 0 . 5 4 .),(),( 00 m mjq emxq F π và ∑ = − = 7 0 . 5 4 .),(),( 11 m mjq emxq F π       )()()()()()()()( )()()()()(),(),(),( 7,16,15,14,13,12,11,10,1 7,06,05,04,03,0201000 FFFFFFFF FFFFFFFF - Bước ba : Tính mảng ljq N eqlql FG 2 ).,(),( π − = :       )()()()()()()()( )()()()()(),(),(),( 7,16,15,14,13,12,11,10,1 7,06,05,04,03,0201000 GGGGGGGG GGGGGGGG - Bước bốn : Tính tám DFT 2 điểm ứng với tám cột của mảng G(l, q) và nhận được mảng X(p, q) : ∑ = − = 1 0 2 ).,(),( l ljp eqlqp GX π với q = 0 ÷ 7       )()()()()()()()( )()()()()(),(),(),( 7,16,15,14,13,12,11,10,1 7,06,05,04,03,0201000 XXXXXXXX XXXXXXXX - Bước năm : Chuyển mảng X(p, q) thành dãy X(k) N xắp xếp theo hàng :       )()()()()()()()( )()()()()()()()( 15141312111098 76543210 XXXXXXXX XXXXXXXX 4.5.2b Thực hiện thuật toán FFT cơ số bốn phân chia theo thời gian Để thấy được trực quan thuật toán FFT cơ số bốn, xét ví dụ sau. Ví dụ 4.22 : Hãy tính DFT 16 điểm của dãy x(n) 10 bằng thuật toán FFT cơ số bốn phân chia theo thời gian. Giải : Để tính , cần thêm 6 mẫu 0 vào cuối dãy x(n) 10 : { } 0000009876543210 )()()()()()()()()()( xxxxxxxxxx 180 Với M = N/4 = 16/4 = 4 thì L = 4 , mảng x(m, l) có 4 cột và 4 hàng. - Bước một : Lưu giữ dãy x(n) 16 bằng mảng x(m, l) xắp xếp theo cột :               0073 0062 0951 0840 )()( )()( )()()( )()()( xx xx xxx xxx ⇔               )()()()( )()()()( )()()()( )()()()( 3,32,31,30,3 3,22,21,20,2 3,12,11,10,1 3,02,01,00,0 xxxx xxxx xxxx xxxx Trong đó hai hàng đầu có một phần tử ở cuối bằng 0, hai hàng cuối có hai phần tử ở cuối bằng 0. - Bước hai : Tính bốn DFT 4 điểm ứng với bốn hàng của mảng x(m, l) và nhận được mảng F(l, q) : ∑ = − = 3 0 . 2 ).,(),( m mjq emlxql F π với l = 0 ÷ 3 - Bước ba : Tính mảng ljq N eqlql FG 2 ).,(),( π − = :               )()()()( )()()()( )()()()( )()()()( 3,32,31,30,3 3,22,21,20,2 3,12,11,10,1 3,02,01,00,0 FFFF FFFF FFFF FFFF ⇔               )()()()( )()()()( )()()()( )()()()( 3,32,31,30,3 3,22,21,20,2 3,12,11,10,1 3,02,01,00,0 GGGG GGGG GGGG GGGG - Bước bốn : Tính bốn DFT 4 điểm ứng với bốn cột của mảng G(l, q) và nhận được mảng X(p, q) : ∑ = − = 3 0 2 ).,(),( l ljp eqlqp GX π với q = 0 ÷ 3 - Bước năm : Chuyển mảng X(p, q) thành dãy X(k) N xắp xếp theo hàng : 181 . Tuy nhiên, hiệu quả của FFT sẽ chỉ thấy được khi so sánh số lượng các phép tính cần thực hiện. Chẳng hạn, so sánh trên số lượng các phép tính nhân và cộng. - 1) = 2.N. (M + L - 2) Như vậy, so với tính trực tiếp DFT thì tính theo thuật toán FFT đã giảm số phép nhân từ 2.N 2 xu ng còn 2.N. (M + L + 1), và số

Ngày đăng: 07/07/2013, 01:26

Từ khóa liên quan

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

Tài liệu liên quan