Như chúng ta đã biết, trong thời đại mà sự phát triển của khoa học và công nghệ có những bước tiến rõ rệt, đến gần hơn với nhân loại, các bài toán kỹ thuật trở nên phức tạp và cần nhiều
Trang 1ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP LỚN
Môn: ĐẠI SỐ TUYẾN TÍNH
Đề tài: ỨNG DỤNG FOURIER VÀO NÉN DỮ LIỆU
GVHD: Th.s Nguyễn Hữu Hiệp
3 2113198 Nguyễn Minh Đông
4 2113258 Nguyễn Trường Giang
5 2210945 Nguyễn Trần Ngọc Hân
6 2210946 Phan Hoàng Gia Hân
7 2211020 Trần Trương Trung Hiếu
8 2113454 Dương Đang Huy
9 2111281 Đinh Gia Huy
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 1
CHƯƠNG 1: MỞ ĐẦU 2
1.1 Lí do chọn đề tài: 2
1.2 Yêu cầu: 2
1.3 Nhiệm vụ: 2
CHƯƠNG 2: CƠ SỞ LÍ THUYẾT 3
2.1 Định nghĩa ánh xạ tuyến tính: 3
2.2 Nhân và ảnh của ánh xạ tuyển tính: 3
2.2.1 Định nghĩa nhân của ánh xạ tuyến tính: 3
2.2.2 Định nghĩa ảnh của ánh xạ tuyến tính: 4
2.2.3 Định lí: 4
2.2.4 Mệnh đề: 4
2.2.5 Các bước tìm ảnh của ánh xạ tuyến tính: 4
2.3 Biểu diễn ma trận của ánh xạ tuyến tính: 5
2.3.1 Định nghĩa ma trận của ánh xạ tuyến tính: 5
2.3.2 Định lí: 5
2.3.3 Ma trận chuyển cơ sở, đồng dạng: 5
CHƯƠNG 3: GIỚI THIỆU KHAI TRIỂN FOURIER RỜI RẠC 8
3.1 Một số khái niệm cơ bản: 8
3.2 DFT cho tín hiệu một chiều: 9
3.2.1 Định nghĩa : 9
3.2.2 Một số tính chất của DFT: 9
3.3 DFT hai chiều: 11
3.3.1 Định nghĩa: 11
3.3.2 Tính chất: 11
CHƯƠNG 4: ỨNG DỤNG CỦA KHAI TRIỂN FOURIER RỜI RẠC TRONG NÉN DỮ LIỆU 13
CHƯƠNG 5: GIỚI THIỆU VỀ MATLAB 15
5.1 Tổng quan về Matlab: 15
5.2 Các hàm thường dùng trong Matlab: 15
CHƯƠNG 6: CODE MATLAB VÀ HƯỚNG DẪN ÁP DỤNG PHÉP BIẾN ĐỔI FOURIER VÀO NÉN DỮ LIỆU 16
6.1 Các bước áp dụng phép biến đổi Fourier vào nén dữ liệu: 16
6.2 Code Matlab và diễn giải: 16
6.2.1 Đoạn code: 16
6.2.2 Các hàm được sử dụng: 17
6.2.3 Giải thích code: 18
KẾT LUẬN 19
LỜI CÁM ƠN 20
TÀI LIỆU THAM KHẢO 21
Trang 3LỜI MỞ ĐẦU
Đại số tuyến tính là một nhánh của toán học nghiên cứu về không gian vector, ma trận
và hệ phương trình tuyến tính Các khái niệm cơ bản trong đại số tuyến tính bao gồm không gian vector, ma trận, định thức, vector riêng và giá trị riêng, phân tích giảm số chiều, phương pháp Gram-Schmidt và Singular Value Decomposition (SVD) Toàn bộ những kiến thức này đều được áp dụng rộng rãi trong các ngành công nghiệp và nghiên cứu khoa học hiện đại
Như chúng ta đã biết, trong thời đại mà sự phát triển của khoa học và công nghệ có những bước tiến rõ rệt, đến gần hơn với nhân loại, các bài toán kỹ thuật trở nên phức tạp và cần nhiều thời gian để nghiên cứu làm rõ hơn, từ đó các ứng dụng tính toán thông minh ngày càng được ứng dụng để giải quyết các bài toán này Matlab là một môi trường tính toán số và lập trình cho phép tính toán số với ma trận, vẽ đồ thị hàm
số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác Với thư viện Toolbox, Matlab cho phép mô phỏng tính toán, thực nghiệm nhiều mô hình trong thực
tế và kỹ thuật
Trong bài báo cáo này, dưới sự hướng dẫn của thầy Nguyễn Hữu Hiệp, chúng em có
cơ hội tìm hiểu về phép biến đổi Fourier rời rạc (Discrete Fourier Transform, viết tắt
là DFT), thuật toán biến đổi Fourier nhanh (Fast Fourier Transform, viết tắt là FFT) và một trong những ứng dụng quan trọng của nó là nén dữ liệu
Trang 4CHƯƠNG 1: MỞ ĐẦU
1.1 Lí do chọn đề tài:
Hiện nay, mạng Internet nói riêng và những thành tựu trong lĩnh vực công nghệ thông tin ngày càng phát triển kèm theo đó là nhu cầu của người dùng về tốc độ truyền dữ liệu ngày càng tăng Qua đó đòi hỏi chúng ta phải nén dữ liệu để giảm độ dư thừa trong dữ liệu gốc xuống nhưng vẫn cung cấp đầy đủ thông tin Vì lẽ đó mà chúng em
đã quyết định chọn đề tài “Ứng dụng của Fourier vào nén dữ liệu”, các thuật toán
nén dữ liệu sử dụng phép biến đổi Fourier để phân tích các thông tin tần số của tín hiệu và giảm thiểu kích thước của dữ liệu bằng cách loại bỏ các thành phần tần số không quan trọng Ví dụ các thuật toán nén dữ liệu như MP3 và JPEG sử dụng phép biến đổi Fourier để mã hóa tính hiệu âm thanh và hình ảnh
1.2 Yêu cầu:
- Hiểu các khái niệm cơ bản và các tính chất về phép biến đổi Fourier rời rạc (Discrete Fourier Transform, viết tắt là DFT), thuật toán biến đổi Fourier nhanh (Fast Fourier Transform, viết tắt là FFT)
- Nghiên cứu về các ứng dụng của phép biến đổi Fourier đặc biệt là trong việc nén dữ liệu để hiểu rõ hơn về tầm quan trọng của thuật toán này trong việc phát triển khoa học kỹ thuật
- Tìm hiểu về các công cụ xử lý tính hiệu số như Matlab để áp dụng các thuật toán phép biến đổi Fourier vào phân tích và nén dữ liệu
1.3 Nhiệm vụ:
- Xây dựng chương trình Matlab
- Nhập các giá trị ban đầu (những đại lượng để cho)
- Thiết lập các phương trình tương ứng, sử dụng các lệnh symbolic để giải hệ phương trình
- Vẽ hình, sử dụng các lệnh trong Matlab để vẽ
Trang 5: W
f V →
CHƯƠNG 2: CƠ SỞ LÍ THUYẾT
2.1 Định nghĩa ánh xạ tuyến tính:
Cho V và W là hai không gian véctơ trên cùng tập số K
Ánh xạ tuyến tính giữa hai không gian véctơ V, W là một ánh xạ thỏa mãn hai điều kiện sau:
Lưu ý: Đối với ánh xạ tuyến tính, nếu biết được ảnh của một tập sinh của V
thì có thể tính được ảnh của mọi véctơ của V
Cho là ánh xạ tuyến tính
Cho E ={e1, e2, …, en} là tập sinh của V
Giả sử biết f(e1), f(e2), …, f(en)
2.2 Nhân và ảnh của ánh xạ tuyển tính:
2.2.1 Định nghĩa nhân của ánh xạ tuyến tính:
| ( ) =0
= x V f x Kerf
Trang 62.2.2 Định nghĩa ảnh của ánh xạ tuyến tính:
• Nhân của ánh xạ tuyến tính f là không gian con của V
• Ảnh của ánh xạ tuyến tính f là không gian con của W
• dim(Kerf) +dim(Imf) = dim (V)
Trang 72.3 Biểu diễn ma trận của ánh xạ tuyến tính:
2.3.1 Định nghĩa ma trận của ánh xạ tuyến tính:
Khi đó tồn tại duy nhất một ma trận AE,F cở mxn sao cho:
với E và F là hai cơ sở trong V và W tương ứng
tồn tại duy nhất một ánh xạ tuyến tính thỏa
2.3.3 Ma trận chuyển cơ sở, đồng dạng:
Cho ánh xạ tuyến tính:
Cho hai cơ sở của V: E và E’
Cho hai cơ sở của W: F và F’
f K →K
W V
f : →
,[ f x ( )]F = AE F[ ] x E
f : →
Trang 8Giả sử P là ma trận chuyển cơ sở từ E vào E’
Q là ma trận chuyển cơ sở từ F vào F’
A là ma trận của ánh xạ tuyến tính f trong cặp cơ sở E và F
Khi đó là ma trận của f trong cặp cơ sở E’ và F’.
Trường hợp đặc biệt:
Cho ánh xạ tuyến tính:
Cho hai cơ sở V: E và E’
Giả sử P là ma trận chuyển cơ sở từ E vào E’za
A là ma trận của ánh xạ tuyến tính f trong cơ sở E
f V →
1
P AP−
Trang 9- Định nghĩa hai ma trận đồng dạng:
Cho hai ma trận vuông A và B cấp n trên cùng trường K A và B được gọi là đồng dạng nếu tồn tại ma trận khả nghịch P sao cho P-1 A P = B
- Hệ quả: Cho ánh xạ tuyến tính:
A là ma trận của ánh xạ tuyến tính f trong cặp cơ sở E, E
B là ma trận của ánh xạ tuyến tính f trong cặp cơ sở F, F
Khi đó A và B là hai ma trận đồng dạng
V :
f V →
Trang 10CHƯƠNG 3: GIỚI THIỆU KHAI TRIỂN FOURIER
RỜI RẠC
Phép biến đổi Fourier rời rạc (DFT), đôi khi còn được gọi là biến đổi Fourier hữu hạn,
là một biến đổi trong giải tích Fourier cho các tín hiệu thời gian rời rạc Đầu vào của biến đổi này là một chuỗi hữu hạn các số thực hoặc số phức, làm biến đổi này là một công cụ lí tưởng để xử lí thông tin trên các máy tính Đặc biệt, biến đổi này được xử dụng rộng rãi trong xử lí tín hiệu và các ngành liên quan đến phân tích tần số chứa trong một tín hiệu, để giải phương trình đạo hàm riêng và làm các phép tính như tích chập Biến đổi này có thể được tính nhanh bởi thuật toán biến đổi Fourier nhanh (FFT)
3.1 Một số khái niệm cơ bản:
DFT đối với tín hiệu tương tự:
Với một hàm liên tục một biến F(t), phép biến đổi Fourier F(f) được định nghĩa là:
Và biến đổi ngược
Với: j là căn bậc hai của -1, e biểu thị số mũ tự nhiên 𝑒𝑗𝜔= cos( 𝜔) + 𝑗𝑠𝑖𝑛(𝜔)
DFT với tín hiệu rời rạc:
Giả sử một chuỗi phức X(k) với phép lấy mẫu gồm N mẫu: x1,x2,x3,…,xk,…xN-1
Với x là số phức
Phép biến đổi Fourier của chuỗi này được biểu thị X(k) gồm N mẫu
Phép biến đổi thuận được định nghĩa:
Phép biến đổi ngược:
Với N là độ dài của một chu kì
Chuỗi số thực tương tự phần ảo bằng 0
Trang 113.2 DFT cho tín hiệu một chiều:
3.2.1 Định nghĩa :
Biến đổi Fourier 1-D cho tín hiệu thời gian rời rạc f(kT) tính theo công thức
Hay chúng ta có thể viết gọn lại dưới dạng
Với f(k) = f(kT)
WN = 𝑒−𝑗2𝜋𝑁 gọi là hạt nhân của phép biến đổi
Tổng quát F(n) có dạng F(n) = A(n)𝑒𝑗∅(𝑛)
Kí hiệu A(n),∅(n) gọi là phổ khuếch đại và phổ pha của F(n)
Biến đổi ngược DFT
Hàm f(k) là biến đổi ngược DFT của F(n) theo biểu thức
Khi f(k) có thể rút ra từ F(n) và ngược lại, chúng gọi là cặp biến đổi và có dạng f(k) ⇔ F(n)
Mặc dù f(k) được xác định trên miền k ∈ [ 0, N], nó vẫn là tín hiệu tuần hoàn với chu
𝐹3(𝑛) = 𝑎𝐹1(𝑛) + 𝑏𝐹2(𝑛) Với a,b là hằng số
Trang 12Biểu thức trên biểu diễn tích chập của hai tín hiệu tuần hoàn Chú ý rằng biểu thức chỉ
áp dụng cho hai dãy có chung một chu kỳ, và chiều dài của dãy tính theo biểu thức trên là 2N-1 Kết quả này chứng minh rằng trong DFT, tín hiệu số mẫu lớn hơn N sẽ được biến đổi thành dãy tuần hoàn có chu kỳ N
Trang 14- Tính chất 4: Biến đổi nhanh
Vì DFT hai chiều là tách được, biến đổi tương đương với 2N phép DFT một chiều với
độ phức tạp tính toán O (N log2 𝑁) theo cách tính FFT Do vậy độ phức tạp tính toán tổng là: O (𝑁2log2 𝑁)
Với ℎ(m,n)c = h (m module N, n module N)
Trang 15CHƯƠNG 4: ỨNG DỤNG CỦA KHAI TRIỂN
FOURIER RỜI RẠC TRONG NÉN DỮ LIỆU
Hình 1 Hình 2
Mặt khác, nếu bạn có hình ảnh của một hàng rào picket (hình 2), thì các giá trị của các pixel sẽ thay đổi liên tục khi bạn đi từ trái sang phải
Vì vậy, trong miền Fourier, bạn có tần số cao theo hướng X, nhưng không theo hướng
Y
Cuối cùng, nếu bạn có hình ảnh của một bàn cờ (hình 3), thì các giá trị pixel thay đổi rất nhiều theo cả hai hướng Do đó, biến đổi Fourier của hình ảnh sẽ có tần số cao ở cả
X và Y
Trang 16Hình 3
Vì biến đổi Fourier cho bạn biết những gì đang xảy ra trong hình ảnh của bạn, nên việc mô tả các hoạt động xử lý hình ảnh theo những gì chúng làm với tần số có trong hình ảnh thường rất thuận tiện Ví dụ, loại bỏ tần số cao làm mờ hình ảnh Loại
bỏ tần số thấp mang lại cho bạn các cạnh Và tăng cường tần số cao trong khi vẫn giữ tần số thấp làm sắc nét hình ảnh
Nén ảnh bằng DFT là một cách nén mất dữ liệu Khi chúng ta dùng DFT để nén dữ liệu thì ta sẽ loại bỏ một số hệ số và khi xuất ta sẽ tái tạo lại bằng cách thay thế các hệ số đã bị loại bỏ thành các số 0 và thực hiện DFT nghịch đảo Vì thế nên khi nén ảnh bằng DFT thì ảnh sẽ bị mờ tùy thuộc vào mức độ chúng ta nén, và đó cũng chính
là hạn chế của DFT Phần sau chúng ta sẽ thấy rõ hơn về việc này
Trang 17CHƯƠNG 5: GIỚI THIỆU VỀ MATLAB
5.1 Tổng quan về Matlab:
• Matlab (viết tắt của matrix laborary) là một ngôn ngữ lập trình bậc cao bốn thế hệ, môi trường để tính toán số học, trực quan và lập trình Được phát triển bởi MathWorks
• Matlab cho phép thao tác với ma trận, vẽ biểu đồ với hàm và số liệu, hiện thực thuật toán, tạo ra giao diện người dùng, bao gồm C,C++, Java
và Fortran; phân tích dữ liệu, phát triển thuật toán, tạo các kiểu mẫu
và ứng dụng
• Matlab có rất nhiều lệnh và hàm toán học nhằm hỗ trợ đắc lực cho bạn trong việc tính toán, vẽ các hình vẽ, biểu đồ thông dụng và thực thi các phương pháp tính toán
5.2 Các hàm thường dùng trong Matlab:
Input x=input(‘tên biến’) Hiển thị dấu nhắc lệnh và chờ đầu vào
Plot plot(x,y) Tạo đồ thị xy
Title title(‘tên đồ thị’) Tựa đề đồ thị
Legend legend(‘vị trí’) Thêm chú giải vào đồ thị
Label xlabel(‘tên’)
yabel(‘tên’)
Thêm nhãn vào trục x Thêm nhãn vào trục y Double Double(‘tên’) Chuyển đổi số thập phân với độ chính xác kép
Trang 18CHƯƠNG 6: CODE MATLAB VÀ HƯỚNG DẪN ÁP DỤNG PHÉP BIẾN ĐỔI FOURIER VÀO NÉN DỮ LIỆU
6.1 Các bước áp dụng phép biến đổi Fourier vào nén dữ liệu:
Bước 1: Đọc ghi file hình ảnh vào
Bước 2: Áp dụng phép biến đổi Fourier 2 chiều vào từng ô trong ma trận
Bước 3: Lấy giá trị tuyệt đối các phần tử và sắp xếp các phần tử
theo chiều giảm dần
Bước 4: Chọn ngưỡng để lọc các giá trị
Bước 5: Tạo ra ma trận lưu giá trị ma trận để thực hiện lọc các chi
tiết để giảm dung lượng file hình
Bước 6: Đối với các giá trị nhỏ hơn giá trị ngưỡng sẽ tự động đặt là 0
Bước 7: Thực hiện phép biến đổi Fourier ngược để khôi phục lại hình
6.2 Code Matlab và diễn giải:
Trang 19Kết quả sau khi mô phỏng:
6.2.2 Các hàm được sử dụng:
màu đen và giá trị tối đa là màu trắng
Trang 206.2.3 Giải thích code:
A=imread( 'z4227721378424_bbc94a333140ad8676df24e3b6f5be37.jpg' ); % đọc file ảnh thành 1 ma trận và gán vào biến A
B=rgb2gray(A); % chuyển đổi ảnh ban đầu thành ảnh trắng đen và gán vào B
imagesc(A) % hiển thị hình ảnh trên các trục đồ thị với 2 màu đen trắng
%%FFT
f=fft2(B); %tính toán theo fourier
%%Fast Fourier Transform
fs=sort(abs(f(:)));
% sắp xếp lại các giá trị của hệ số fourier về ma trận n hàng 1 cột theo thứ tự từ giá trị lớn nhất đến giá trị nhỏ nhất
counter=1;
for keep=[.80 5 02 005]; % giữ lại x% của ảnh gốc
subplot(2,2,counter) % hiển thị trên 1 bảng 2 hàng 2 cột và couter
là vị trí của đồ thị hiện tại trong lưới đồ thị, đếm từ trái sang phải, từ trên xuống dưới
T = fs(floor((1-keep)*length(fs))); % loại bỏ thông tin tấm ảnh
ind=abs(f)>T; % tạo ma trận mới cùng kích cỡ với ma trận f chỉ có
số 0 và 1 nếu độ lớn hệ số fourier bé hơn thresh là số 0 và lớn hơn là số 1
A1=f.*ind; % lấy ma trận C nhân ma trận ind sẽ loại bỏ hết số 0
A2 = ifft2(A1) % nén tấm ảnh bằng cách fft ngược
imshow(A2,[]) % tái tạo lại ảnh
title([ '' ,num2str(keep*100), '%' ], 'Fontsize' ,12) % tạo tiêu đề cho ảnh xuất ra
counter = counter+1 % Tăng giá trị counter để hiển thị hình được nén ở 4 vị trí 1, 2, 3, 4 ứng theo thứ từ từ trái qua phải, từ trên xuống dưới
end
Trang 21KẾT LUẬN
Thông qua đề tài này, chúng em đã tìm hiểu về khái niệm và các tính chất của Fourier rời rạc (DFT) - một công cụ quan trọng trong xử lý tín hiệu số, là một phương pháp tính toán để biến đổi một tín hiệu thời gian liên tục thành một chuỗi các giá trị tần số rời rạc và nghiên cứu về Fourier nhanh (FFT) - một thuật toán cho phép chúng ta tính toán biến đổi Fourier nhanh hơn so với phương pháp truyền thống, giúp giảm thiểu thời gian tính toán và tăng hiệu suất Ngoài ra, chúng em còn biết được tầm quan trọng của ứng dụng nén dữ liệu của DFT, từ đó nghiên cứu kỹ lưỡng và đưa ra ví dụ liên quan bằng sự trợ giúp của phần mềm MatLab Với sự phân công cẩn thận, cố gắng chuẩn bị kiến thức để hoàn thành đề tài sớm nhất có thể, nhóm đã hoàn thành nhiệm vụ được giao và sử dụng MatLab để minh họa những ví dụ cũng đã cho ra kết quả như mong muốn Tuy vẫn còn nhiều hạn chế về mặt kiến thức, nhưng cũng nhờ quá trình làm việc nhóm, chúng em đã tiếp thu được nhiều bài học kỹ năng bổ ích và kinh nghiệm cần thiết
Trang 22LỜI CÁM ƠN
Lời đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến trường Đại học Bách Khoa
- ĐHQG Thành phố Hồ Chí Minh đã cho chúng em cơ hội để tìm hiểu và nghiên cứu môn học “Đại số tuyến tính” Tiếp đó, chúng em xin gửi lời tri ân sâu sắc đến thầy Nguyễn Hữu Hiệp - giảng viên môn học “Đại số tuyến tính”, người đã tận tình giảng dạy và đồng hành với chúng em trong suốt học kì vừa qua và cung cấp rất nhiều tri thức bổ ích cho nhiều thế hệ sinh viên Bên cạnh đó, qua báo cáo lần này, chúng em học hỏi được nhiều kinh nghiệm, kỹ năng và cách thức để cùng nhau làm việc nhóm một cách tối ưu và hiệu quả nhất Do lượng kiến thức của chúng em còn nhiều hạn chế, chưa thực sự hiểu sâu về môn học nên dù có cố gắng hoàn thiện đề tài qua tham khảo tài liệu, trao đổi và tiếp thu ý kiến đóng góp nhưng cũng không thể tránh khỏi thiếu sót Chúng em rất mong nhận được sự đóng góp từ thầy để từ đó có thể rút kinh nghiệm, hoàn thiện hơn trong những lần làm đề tài sau này
Chúng em xin chân thành cảm ơn !