You are on page 1of 9

BÀI 2: BIẾN ĐỔI DFT VÀ GIẢI THUẬT FFT

1. MỤC ĐÍCH THÍ NGHIỆM

- Hiểu rõ giải thuật thực hiện FFT.


- Hệ thống lại các lý thuyết đã học

2. THIẾT BỊ THÍ NGHIỆM

STT Tên thiết bị/Phần mềm Số lượng

01 Máy vi tính cá nhân có cài đặt phần mềm Matlab® 01

3. CƠ SỞ LÝ THUYẾT

Biến đổi Fourier nhanh (FFT) là một thuật toán cực kì hiệu quả để chuyển đổi một tín hiệu rời
rạc miền thời gian sang miền tần số dựa trên biến đổi Fourier rời rạc (DFT). Phép biến đổi DFT
phân tích một dãy các số thành các thành phần ở các tần số khác nhau. Nó được ứng dụng trong
nhiều lĩnh vực khác nhau nhưng tính toán trực tiếp từ định nghĩa thường quá chậm trong thực tế.
Biến đổi FFT là một cách để đạt được cùng kết quả như DFT nhưng nhanh hơn nhiều. Cụ thể, để

tính DFT của N điểm trực tiếp theo định nghĩa đòi hỏi
 
O N2
phép tính, trong khi FFT tính ra

O  N log 2  N  
cùng kết quả đó trong phép tính.

Thuật toán FFT phổ biến nhất là thuật toán FFT Cooley-Tukey. Đây là một thuật toán chia để

trị dùng đệ quy để chia bài toán tính DFT có kích thước N  N 1 N 2 , thành nhiều bài toán tính

DFT nhỏ hơn có kích thước N 1 và N 2 . Dạng phổ biến nhất của thuật toán Cooley-Tukey là chia

biến đổi thành hai nửa kích thước N / 2 ở mỗi bước (vì vậy chỉ dùng được cho kích thước là lũy
thừa của 2, còn gọi là thuật toán cơ số 2), nhưng bất kì cách phân tích ra thừa số nào cũng đều có
thể dùng được. Mặc dù ý tưởng cơ bản là đệ quy, khi lập trình, người ta thường sắp xếp lại thuật
toán để tránh đệ quy.

3.1. BIẾN ĐỔI FOURIER RỜI RẠC (DFT)

x  n    x 0 , x1 , , x N 1 
Phép biến đổi Fourier rời rạc - DFT của một tín hiệu rời rạc cho trước
được cho bởi biểu thức sau

N 1 N 1 2 nk
j
X  k    x nW Nnk   x n e N , k  0, , N  1,
n0 n0
2 nk
j

trong đó j là đơn vị phức và hệ số quay W N  e


nk N
. Tính toán biến đổi DFT nêu trên có độ

phức tạp tính toán là


O N2  . Một ví dụ về DFT- 8 điểm được tính toán như sau:
X  0   x  0  W80  x  1 W80  x  2  W80  x  3 W80  x  4  W80  x  5  W80  x  6  W80  x  7  W80 ,
X  1  x  0  W80  x  1 W81  x  2  W82  x  3 W83  x  4  W84  x  5  W85  x  6  W86  x  7  W87 ,
X  2   x  0  W80  x  1 W82  x  2  W84  x  3 W86  x  4  W88  x  5  W810  x  6  W812  x  7  W814 ,
X  3  x  0  W80  x  1 W83  x  2  W86  x  3 W89  x  4  W812  x  5  W815  x  6  W818  x  7  W821 ,
X  4   x  0  W80  x  1 W84  x  2  W88  x  3 W812  x  4  W816  x  5  W820  x  6  W824  x  7  W828 ,
X  5   x  0  W80  x  1 W85  x  2  W810  x  3 W815  x  4  W820  x  5  W825  x  6  W830  x  7  W835 ,
X  6   x  0  W80  x  1 W86  x  2  W812  x  3 W818  x  4  W824  x  5  W830  x  6  W836  x  7  W842 ,
X  7   x  0  W80  x  1 W87  x  2  W814  x  3 W821  x  4  W828  x  5  W835  x  6  W842  x  7  W849 .

Có thể thấy rằng, độ phức tạp cho phép tính DFT 8 điểm cũng là rất lớn. Độ phức tạp tính tians
sẽ tăng theo cấp số mũ đối với độ dài DFT. Để giảm bớt mức độ phức tạp trong tính toán chúng
ta cùng đi vào giải thuật biến đổi Fourier nhanh (FFT).

3.2. BIẾN ĐỔI FOURIER NHANH (FFT)

Có nhiều giải thuật FFT đã được phát triển để giảm độ phức tạp tính toán DFT như giải thuật
hệ số Prime, giải thuật Winograd và giải thuật Cooley-Tukey. Trong đó giải thuật phổ biến nhất
nk
là Cooley-Tukey. FFT tận dụng tính chất tuần hoàn và đối xứng của hệ số quay W N , cụ thể là

W Nk  N  W Nk  N , W Nk  N /2  W Nk ,
để giảm đáng kể các phép tính. Do đó độ phức tạp tính toán của FFT được xác định bằng

O  N log 2  N  
.

Thực hiện FFT có thể thực hiện theo hai phương pháp: Giải thuật phân chia miền thời gian và
giải thuật phân chia miền tần số. Giải thuật FFT cơ số 2 có đơn vị xử lý nhỏ nhất là FFT-2 điểm,
thường được gọi là sơ đồ cánh bướm có dạng như sau:

Hình: Sơ đồ giải thuật FFT 2 điểm.

Giải thuật FFT 8 điểm sử dụng phương pháp phân chia miền thời gian được cho bởi sơ đồ sau
Hình: Giải thuật FFT-8 điểm phân chia miền thời gian.

Giải thuật FFT 8 điểm sử dụng phương pháp phân chia miền tần số được cho bởi sơ đồ sau
Hình: Giải thuật FFT-8 điểm phân chia miền tần số.

3.3. BIẾN ĐỔI FOURIER THỜI GIAN NGẮN (STFT)

Phép biến đổi Fourier thời gian ngắn (STFT) được sử dụng để phân tích thành phần tần số của
tín hiệu không tĩnh thay đổi như thế nào theo thời gian.

STFT của tín hiệu được tính bằng cách trượt cửa sổ phân tích có độ dài M lên tín hiệu và tính
toán biến đổi DFT của dữ liệu đã trượt được. Cửa sổ nhảy qua tín hiệu ban đầu tại các khoảng
thời gian của R mẫu. Hầu hết các hàm cửa sổ giảm dần ở các cạnh để tránh hiện tượng phổ vành.
Nếu độ dài chồng chéo là L, việc thêm chồng chéo các phân đoạn có cửa sổ sẽ bù cho sự suy
giảm tín hiệu ở các cạnh cửa sổ. DFT của mỗi đoạn cửa sổ được thêm vào một ma trận chứa biên
độ và pha cho mỗi điểm theo thời gian và tần số. Số hàng trong ma trận STFT bằng số điểm DFT
và số cột được cho bởi

N L
k x ,
 M L 
x  n a 
Trong đó N x là độ dài của chuỗi và hàm   cho giá trị nguyên gần nhất và nhỏ hơn
a.

X  f    X 1  f  , X 2  f  , , X k  f  
Ma trận STFT được định nghĩa là với


Xm f    x  n  g  n  mR  e  j 2 fn ,
n 

g  n
với là hàm của sổ có độ dài M. Một ví dụ của STFT được mô tả như trong hình sau:

Hình: Một ví dụ về biến đổi STFT.


Trong đó, tín hiệu x  n  được lấy DFT tại các khoảng thời gian xét khác nhau. Kết quả thu
được là các thành phần tín hiệu có tần số khác nhau trong các khoảng thời gian khác nhau đó.

Một số hàm cửa số và cách lệnh gọi trong Matlab được cho trong bảng sau:

Loại của sổ Mô tả
Hamming Tạo cửa sổ Hamming độ dài M: hamming(M)
Blackman-Harris Tạo cửa sổ Hamming độ dài M: blackman(M)
Hann Tạo cửa sổ Hamming độ dài M: hann(M)
Gaussian Tạo cửa sổ Hamming độ dài M: gausswin(M) hoặc gausswin(M,α)
Độ rộng cửa sổ tỷ lệ nghịch với α, và giá trị mặc định là 2.5.

4. CHUẨN BỊ LÝ THUYẾT THÍ NGHIỆM

1. Cho một tín hiệu rời rạc x(n) = [1; -2; -3; -4].
a. Viết biểu thức hàm truyền (biến đổi Z) và DTFT của tín hiệu x(n)? Vẽ phổ biên độ-
tần số và pha-tần số của tín hiệu trên?
b. Tính DTF-4 điểm của tín hiệu x(n)? Vẽ biên độ và pha của DTF-4 điểm của tín hiệu
trên? Nhận xét?
c. Tính DTF-8 điểm của tín hiệu x(n)? Vẽ biên độ và pha của DTF-8 điểm của tín hiệu
trên? Nhận xét?
d. Vẽ sơ đồ và thực hiện tính FFT-8 điểm dùng giải thuật phân chia miền thời gian?
e. Vẽ sơ đồ và thực hiện tính FFT-8 điểm dùng giải thuật phân chia miền tần số?
2. Khảo sát và vẽ đồ thị (dạng rời rạc) của các hàm cửa sổ Gaussian, Hamming với các thông
số độ dài 64, 128 và giá trị = 1, 2, 5 đối với cửa sổ Gaussian.
3. Viết một file-M, lưu với tên Bai2_NHOMx_STFT_CB.m, để thực hiện chương trình biến

đổi STFT với các yêu cầu sau: tín hiệu x  n  được lấy mẫu với tần số f s  500 Hz trong

khoảng thời gian t = 0 đến t = 3 s, và được cho bởi x  t   cos  50 t  khi 0  t  0.1 ,

x  t   cos  50 t   cos  100 t 


, 0.1  t  0.2 và x  t   cos  50 t   cos  100 t   cos  150 t 
khi 0.2  t  0.3 . Sử dụng cửa số Gaussian có độ dài là 128 và độ dài chồng chéo là 30. Vẽ
đồ thị biên độ của ma trận STFT vừa tìm được? Nêu nhận xét?
5. TIẾN HÀNH THÍ NGHIỆM

Trong bài thí nghiệm này sinh viên thực hiện 2 nội dung sau:
1. Thực hiện FFT-N điểm trên tín hiệu sine để khảo sát đặc điểm biên độ trong miền tần số
với các giá trị N khác nhau.
2. Thực hiện STFT cho tín hiệu giọng nói để khảo sát đặc điểm tần số trong các khoảng thời
gian khác nhau.
5.1. THỰC HIỆN FFT-N ĐIỂM

1. Tạo một mẫu tín hiệu sine có các thành phần tần số 200 Hz và 3000 Hz trong khoảng thời
gian t = 0 đến t = 0.1 s, với tần số lấy mẫu Fs = 8 kHz từ chương trình Matlab và lưu vào
biến giá trị xn:
a. Viết chương trình thực hiện tìm biến đổi DFT của tín hiệu trên và vẽ đồ thị phổ biên độ
miền tần số.
b. Viết chương trình thực hiện tìm biến đổi FFT-128 điểm của tín hiệu trên và vẽ đồ thị phổ
biên độ miền tần số.
c. Viết chương trình thực hiện tìm biến đổi FFT-256 điểm của tín hiệu trên và vẽ đồ thị phổ
biên độ miền tần số.
d. Nhận xét và giải thích các đồ thị trên.

Lưu lại chương trình trên với tên Bai_2_NHOMx_DFT_vs_FFT.m


5.2. THỰC HIỆN STFT

2. Tạo một mẫu tín hiệu âm thanh có định dạng .wav từ chương trình Matlab hoặc các ứng
dụng khác và lưu vào biến giá trị xn:
a. Viết chương trình thực hiện tìm biến đổi STFT của tín hiệu âm thanh trên với cửa sổ
Gaussian độ dài 256, độ dài chồng lấn 30. Sau đó vẽ đồ thị phổ biên độ miền tần số của
biến đổi STFT trên.
b. Nhận xét và giải thích đồ thị trên.

You might also like