Phương pháp SVD đã được phát triển dựa trên những tính chất của ma trận trực giao và ma trận đường chéo để tìm ra một ma trận xấp xỉ với ma trận gốc.. Điều đặc biệt của ma trận đường ché
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
KHOA KHOA HỌC & ỨNG DỤNG
BỘ MÔN TOÁN ỨNG DỤNG
BÁO CÁO BÀI TẬP LỚN ĐẠI SỐ TUYẾN TÍNH
CHỦ ĐỀ 8:
ỨNG DỤNG SVD
ĐỂ KHỬ NHIỄU ÂM THANH
LỚP L08 _ NHÓM 8
GV HƯỚNG DẪN: NGUYỄN ANH THI
NGUYỄN XUÂN MỸ
TP.HCM, Ngày 6 tháng 12 năm 2021
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
KHOA KHOA HỌC & ỨNG DỤNG
BỘ MÔN TOÁN ỨNG DỤNG
BÁO CÁO BÀI TẬP LỚN ĐẠI SỐ TUYẾN TÍNH
CHỦ ĐỀ 8:
ỨNG DỤNG SVD ĐỂ KHỬ NHIỄU ÂM THANH
Danh sách thành viên:
TP.HCM, ngày 6 tháng 12 năm 2021
2113940 Nguyễn Thành Long Tìm thông tin
2114063 Nguyễn Trần Thái Minh Coder
2110504 Nguyễn Thanh Sang Tìm Thông tin
2115057 Đào Nguyễn Nam Trân Tìm thông tin
Trang 3LỜI CẢM ƠN
Để hoàn thành đề tài bài tập lớn lần này, trước hết nhóm chúng em xin chân thành cảm ơn sự hướng dẫn, giúp đỡ, quan tâm từ quý thầy cô, bạn
bè trong lớp
Đặc biệt, nhóm xin gửi đến cô Nguyễn Anh Thi (lý thuyết) và cô
Nguyễn Xuân Mỹ (bài tập) đã ra sức truyền đạt, chỉ dẫn chúng em đề tài báo cáo lần này lời cảm ơn sâu sắc nhất.
Không thể không nhắc tới sự hợp tác, đoàn kết của các thành viên trong nhóm, xin cảm ơn mọi người đã cùng góp sức, góp lực để hoàn thành bài báo cáo này.
Vì còn tồn tại những hạn chế về mặt kiến thức, trong quá trình trao đổi, hoàn thành bài project cuối kì , chúng em không tránh khỏi những sai sót, kính mong nhận được sự đóng góp từ quý thầy, cô Những góp ý từ thầy
cô sẽ là động lực để chúng em hoàn thiện hơn Một lần nữa, nhóm 8_ L08 xin gửi lời biết ơn chân thành đến thầy, cô vì đã giúp chúng em đạt được kết quả này.
Nhóm thực hiện đề tài
Nhóm 8 - Lớp L08
3
Trang 4LỜI MỞ ĐẦU MÔN HỌC
Đại số tuyến tính là môn học có tầm quan trọng không chỉ đối với sinh viên trường đại học Bách Khoa Thành phố Hồ Chí Minh nói riêng mà còn đối với sinh viên ngành khoa học kỹ thuật, công nghệ nói chung
Đại số tuyến tính nói chung có rất nhiều ứng dụng trong hầu hết các lĩnh vực trong khoa học: kinh tế, môi trường, công nghệ máy tính, xử lí tín hiệu, đồ họa,… Một phần nhỏ trong số đó phải nhắc đến là phương pháp
phân tích SVD trong nhiều bài toán khác nhau Phương pháp phân tích
suy biến (singular value decomposition) được viết tắt là SVD là một trong
những phương pháp thuộc nhóm matrix factorization được phát triển lần đầu bởi những nhà hình học vi phân Ban đầu mục đích của phương pháp này là tìm ra một phép xoay không gian sao cho tích vô hướng của các vector không thay đổi Từ mối liên hệ này khái niệm về ma trận trực giao
đã hình thành để tạo ra các phép xoay đặc biệt Phương pháp SVD đã được phát triển dựa trên những tính chất của ma trận trực giao và ma trận đường chéo để tìm ra một ma trận xấp xỉ với ma trận gốc Phương pháp này sau đó đã được ứng dụng rộng rãi trong các lĩnh vực như hình học vi phân, hồi qui tuyến tính, xử lý hình ảnh, cluaxstering, các thuật toán nèn
và giảm chiều dữ liệu, khử nhiễu âm thanh….
MỤC LỤC
4
Trang 5LỜI CẢM ƠN
1
MỞ ĐẦU MỞ HỌC VÀ SƠ LƯỢC BTL
2
Chương 1: CƠ SỞ LÍ THUYẾT CỦA PHÂN TÍCH SVD
4
Chương 2: ỨNG DỤNG CỦA SVD TRONG KHỬ NHIỄU
ÂM THANH 9
Chương 1: CHƯƠNG TRÌNH MATLAB
13
3.1 Các câu lệnh được sử dụng
13
3.2 Đoạn code
14
DANH MỤC CÁC TÀI LIỆU THAM KHẢO
15
5
Trang 6CƠ SỞ LÍ THUYẾT CỦA PHÂN TÍCH SVD:
Mục tiêu của phân tích suy biến SVD
Phương pháp SVD sẽ tìm ra một lớp các ma trận xấp xỉ tốt nhất với một ma trận cho trước dựa trên khoảng cách norm Frobenios giữa 2 ma trận Người ta
đã chứng minh được rằng ma trận xấp xỉ tốt nhất được biểu diễn dưới dạng tích của 3 ma trận rất đặc biệt bao gồm 2 ma trận trực giao (orthogonal matrix) và
1 ma trận đường chéo (diagonal matrix) Quá trình nhân ma trận thực chất là
quá trình biến đổi các điểm dữ liệu của ma trận gốc thông qua những phép
xoay trục (rotation) và phép thay đổi độ lớn (scaling) và từ đó tạo ra những
điểm dữ liệu mới trong không gian mới Điều đặc biệt của ma trận đường chéo
đó là các phần tử của nó chính là những giá trị riêng của ma trận gốc Những điểm dữ liệu trong không gian mới có thể giữ được 100% thông tin ban đầu hoặc chỉ giữ một phần lớn thông tin của dữ liệu ban đầu thông qua các phép truncate SVD Bằng cách sắp xếp các trị riêng theo thứ tự giảm dần trên đường chéo chính thuật toán SVD có thể thu được ma trận xấp xỉ tốt nhất mà vẫn đảm bảo giảm được hạng của ma trận sau biến đổi và kích thước các ma trận nhân
tử nằm trong giới hạn cho phép Do đó nó tiết kiệm được thời gian và chi phí tính toán và đồng thời cũng tìm ra được một giá trị dự báo cho ma trận gốc với mức độ chính xác cao
Do đó, để tiếp cận được thuật toán phân tích SVD, chúng ta cần phải nắm những kiến thức cơ bản về cơ sở tạo nên nó Gọi tắt là Cơ sở lí thuyết của việc phân tích SVD Chúng ta có thể tham khảo thêm những khái niệm, tính chất định lí liên quan đến những vấn đề dưới đây qua quyển: “Đặng Văn Vinh, Giáo trình Đại số tuyến tính, NXB ĐHQG 2020)
- Ma trận, Định thức
- Trị riêng và vecto riêng
- Khái niệm về Họ trực giao và trực chuẩn Trực giao hóa Gram-Schmidt.
- Chéo hóa ma trận, chéo hóa trực giao và những tính chất của chúng.
6
Trang 7Quá trình phân tích SVD của một ma trận dựa trên cơ
sở lí thuyết đã nêu trên:
Singular Value Decomposition là ứng dụng nổi bật trong Đại số tuyến tính Bất
kỳ một ma trận A nào với cấp mxn (không nhất thiết phải là ma trận vuông), ta đều có thể phân tích thành dạng:
(!)
Trong đó Q và P là các ma trận trực giao; và Σ là ma trận chéo không vuông
(cấp mxn) với các phần tử trên đường chéo , mặc dù Σ không phải ma trận vuông nhưng, ta vẫn có thể coi nó là ma trận chéo miễn là các phần tử khác 0 của nó chỉ nằm trên đường chéo (tức là tại các vị trí có chỉ số hàng và chỉ số cột như nhau); r là Rank(A) bằng số lượng phần tử khác 0 trong ma trận đường chéo Σ
*Chú ý rằng cách biểu diễn (!) không là duy nhất, vì ta chỉ cần đổi dấu Q và P
thì vẫn thỏa mãn
• Biểu diễn SVD qua các trường hợp của ma trận A:
+TH1:
+TH2:
7
Trang 8(H1: SVD cho ma trận A khi: (hình trên), và (hình dưới) Σ là một ma trận đường chéo với các phần tử trên đó giảm dần và không âm Màu đỏ càng đậm thể hiện giá trị càng cao Các ô màu trắng trên ma trận này thể hiện giá trị 0.)
NGUỒN GỐC SVD
Cho A là một ma trận thực mxn Ta chứng minh rằng tập hợp các trị riêng khác không của và là trùng nhau Thật vậy, giả sử là một trị riêng (eigenvalue)
khác 0 của và là vector riêng (eigenvector) của tương ứng Khi đó :
➪ Suy ra:
Điều này tương đương với Vì khác 0 nên khác 0 Suy ra là trị riêng của và
là vector riêng của
Vì ma trận và là 2 ma trận đối xứng, nên chúng chéo hóa trực giao được Khi đó:
(vì , là ma trận đơn vị)
(vì , là ma trận đơn vị)
Suy ra
- Các cột của ma trận là những cơ sở của các không gian con riêng của ma
- Các cột của ma trận là những cơ sở của các không gian con riêng của ma trận
của sau khi trực giao hóa Gram - Schmidt và các là các trị riêng khác 0 của
- là ma trận chéo với trị riêng tương ứng của và là Ta sắp xếp các sao cho (hình A1)
COMPACT SVD ( SVD gọn nhẹ hơn)
Gọi
8
Trang 9Viết lại biểu thức (!) dưới dạng tổng với Rank (A) = 1
Với mỗi là một ma trận có hạng bằng 1
Rõ ràng với cách phân tích này, ta nhận thấy rằng ma trận phụ thuộc vào r cột đầu tiên của và r phần tử khác không trên đường chéo Ta có phân tích gọn hơn của gọi là Compact SVD :
Với và là các ma trận được tạo nên từ các cột của và tương ứng, là ma trận con được tạo bởi hàng đầu tiên và cột đầu tiên của Nếu ma trận có rank nhỏ hơn rất nhiều so với số hàng và số cột , ta sẽ được lợi nhiều về việc lưu trữ Dưới đây là ví dụ minh hoạ với
(H2: Biểu diễn SVD dạng thu gọn và biểu diễn ma trận dưới dạng tổng các
ma trận có rank bằng 1.)
Sau đây, ta sẽ xét một số ví dụ về phân tích SVD của một ma trận bất kì:
9
Trang 10Bước 1 : Xác định ma trận A(cỡ bao nhiêu) để tiến hành phân tích SVD
Bước 2 : Thực hiện chéo hóa trực giao :
2.1 : Viết phương trình đặc trưng của Từ đó chúng ta sẽ tính được các giá trị riêng của Viết được ma trận đường chéo có các phần tử là những giá trị riêng, ta vừa tìm được.(Lưu ý phải sắp xếp nó theo thứ tự giảm dần) 2.2 : Tìm vecto riêng của Sau đó trục giao hóa Gram - Schmidt những cơ
sở của không gian con riêng đó Từ đó ta tính được ma trận , các cột của là các vecto riêng của
Bước 3 : Thực hiện chéo hóa trực giao
Tương tự các bước 2.1, 2.2 ta tính được và
Bước 4: Chọn bằng cách chọn ma trận cỡ tương ứng phù hợp với hay Sau đó lấy căn bậc 2 của tất cả những phần tử trên đường chéo
Bước 5:Vậy phân tích SVD của ma trận A sẽ là :
Giả sử phân tích SVD một ma trận vuông cấp 2, ta thực hiện như sau :
ma trận Quá quá trình chéo hóa trực giao ma trận và ma trận chuyển vị của nó, chúng ta được phân tích SVD Trên cơ sở đó, ta có thể dễ dàng ứng dụng chúng vào nhiều lĩnh vực khác nhau trong khoa học
ỨNG DỤNG CỦA PHÂN TÍCH SVD
TRONG VIỆC KHỬ NHIỄU
ÂM THANH
Đặt vấn đề:
10
Trang 11Trong cuộc sống hiện nay, chúng ta bắt gặp được rất nhiều loại âm thanh khác nhau trong từng hoàn cảnh khác nhau Chẳng hạn như: âm thanh trong một buổi hòa nhạc, tiếng trẻ con nô đùa với nhau, tiếng xe cộ chạy trên đường…
Đôi khi chúng ta muốn ghi lại những âm thanh,
những khoảng khắc bất chợt nào đó, ta có thể sử
dụng nhiều phương tiện khác như như điện
thoại, máy ghi âm Hay ta muốn nghe lại một
bản nhạc nhẹ nhàng Nhưng một điều chắc chắn
không thể tránh khỏi đó là những tập tin âm
thanh đó luôn chứa đầy tạp âm(tiếng ồn, tiếng
gió hú ríu rít,…) khiến cho chất lượng âm thanh
giảm đáng kể gây khó chịu cho người nghe
Lấy một ví dụ điển hình là một bạn học sinh muốn ghi
âm lại lời thầy giáo giảng bài trên lớp, nếu như đó là file ghi âm nguyên thủy ( file gốc chưa qua xử lí) thì cậu ấy sẽ rất khó chịu do có quá nhiều tạp âm xung quanh, như vậy sẽ ảnh hưởng đến việc tiếp thu bài của bạn học sinh đó
Như vậy, một vấn đề cần đặt ra rằng làm sao để khử nhiễu được một tập tin âm thanh mà chúng ta mong muốn?
Về mặt ý nghĩa: Nếu như, chúng ta có thể xử lí tốt một tập tin âm thanh theo các tiêu chí (trọng tâm, chính xác , hiệu quả và tiết kiệm thời gian) thì việc đó sẽ giúp ích cho ta rất nhiều Trong nghiên cứu về âm thanh,
sẽ giúp ta tiết kiệm thời gian hơn Còn trong doanh nghiệp chuyên về lĩnh vực truyền thông đa phương tiện, nếu xử lí tốt file âm thanh, sẽ tiết kiệm được rất nhiều chi phí trong việc thiết kế một phần mềm nào đó, hay chỉ đơn giản là tăng chất lượng âm thanh trong quá trình edit video chuyên nghiệp Từ đó nó sẽ hướng đến nhiều đối tượng khách hàng hơn
11
Trang 12với một trải nghiệm về chất lượng âm thanh tuyệt vời, chân thật và đặt biệt không còn tạp âm nữa
Chẳng hạn như các tập đoàn công nghệ hàng đầu lớn trên thế giới luôn chạy đua, cạnh tranh gay gắt với nhau về việc thu và phát âm thanh trên các thiết bị điện thoại thông minh, ti vi thông minh… làm sao cho tối ưu
và hiệu quả nhất Điều đó đồng nghĩa với việc sẽ tạo điều kiện mở rộng
cơ hội việc làm trong lĩnh vực âm thanh nói chung và công nghệ số nói riêng Nắm bắt được xu thế, nắm bắt được công nghệ chính là nắm lấy thành công
Khử nhiễu âm thanh qua thuật toán phân tích SVD
a. Về ứng dụng hỗ trợ: Hiện tại có rất nhiều ứng dụng hỗ trợ xử lí
âm thanh, đặc biệt là khử nhiễu dễ sử dụng và tiếp cận với người dùng một cách nhanh chóng Có thể kể đến như: Audio Editor, Ringtone Editor, WavePad Sound Editor, AudioDroid,
Điểm chung của tất cả các phần mềm này chúng đều được viết dựa trên những đoạn Code xử lí âm thanh trong C++, C#, Pascal, Python, Matlab….Chúng ta
sẽ nghiên cứu cách xử lí âm thanh từ những ngôn ngữ lập trình này Trên phương diện khảo sát của nhóm, chúng ta sẽ thực hiện khử nhiễu âm thanh trên Matlab bởi lẽ: nó là một phần mềm cung cấp một môi trường hoàn hảo về công
cụ tính toán cũng như lập trình Người sử dụng có thể thực hiện phép tính toán với ma trận , vẽ đồ thị, hàm số và tạo ra những thuật toán riêng cho mình Đồng thời matlab cũng liên kết với nhiều ngôn ngữ lập trình khác thuận tiện cho người sử dụng
b. Về thuật toán
Trong Matlab, có rất nhiều phương pháp khác nhau để khử nhiễu âm thanh như phép biến đổi Fourier hữu hạn, phân tích SVD, phân tích thành phần chính PCA…
Như đã trình bày ở phần 1.1, việc khử nhiễu bằng phân tích SVD sẽ có nhiều
ưu điểm thuận lợi, thông qua việc biến đổi những điểm dữ liệu mới trong không gian, mà vẫn đảm bảo được hạng của ma trận và kích thước các nhân tử của ma trận trong một giới hạn cho phép Như vậy, nhờ thuật toán đó chúng ta cod thể xóa bỏ những “vết nhiễu” của âm thanh từ đó giúp đầu ra của âm thanh được chất lượng hơn
Quá trình khử nhiễu âm thanh bằnh SVD thông qua Matlab:
Quá trình phân tích SVD cho một file âm thanh trên matlab trải qua các bước
cơ bản như sau
Bước 1: Giả sử, ta có một file âm thanh trong máy (đuôi có thể ở dạng wav,
mp3…) ta chèn nó vào matlab Bằng lệnh “audioread”
Bước 2: Chúng ta chọn giá trị mẫu(y) và tần số của mẫu(Fs, đơn vị Hz), sau
đó thông qua lệnh “sound”, chúng ta có thể kiểm tra file âm thanh vừa mới nạp
vào matlab
12
Trang 13Bước 3: Qua câu lệnh “plot(y)” hay plot the sound, chúng ta có thể thấy được
file âm thanh đó trực quan trên biểu đồ, giả sử sau khi chèn được file âm thanh,
ta có biểu đồ như sau: ( với những phần đánh dấu x màu xanh là những đoạn
âm thanh có nhiễu với tần số xuất hiện cao, chúng ta cần phải loại bỏ chúng)
Thông qua câu lệnh “Zoom plot(y)” ta có thể quan sát kĩ hơn phần bị nhiễu
trong đoạn âm thanh đó:
Bước 4: Chúng ta tiến hành phân tích SVD để khử đoạn âm thanh bị nhiễu đó,
trên nguyên tắc mã hóa thành một ma trận gồm các nhân tử để chương trình matlab có thể nhận dạnng được, từ đó bắt đầu phân tích SVD để khử nhiễu nó
a) Chuyển sound về ma trận A
b) Phân tích SVD ma trận A bởi lệnh [U,S,V]= svd(A)
Ta nhập các dữ liệu U,S,V để tiến hành phân tích SVD Với U và V là những
ma trận trực giao và S là ma trận đường chéo.(Như hình minh họa các giá trị U,S,V )
Bước 5: Trải qua quá trình phân tích ma trận A thành SVD, chọn các điểm
trong không gian chính là những đoạn bị tạp âm, để xử lí.Sau khi xử lí hoàn
tất, ta dùng câu lệnh “figure, subplot” để hiển thị đoạn âm thanh mà ta vừa
xử lí, để đối chiếu so sánh
13
Trang 14Dùng lệnh “zoom plot”để ta có thể quan sát kĩ hơn, phần đã bị loại bỏ trong
quá trình khử nhiễu do phân tích SVD:
Như vậy qua 5 thao tác trên kết hợp với cơ sở lí thuyết, chúng ta đã có
thể:
1. Hiểu được bản chất của SVD
2. Các quá trình của việc phân tích SVD của ma trận A
3. Ý nghĩa, tầm qua trọng của việc khử nhiễu âm thanh nói chung và phân tích SVD thông qua chương trình Matlab nói riêng
4. Nắm sơ lược cáv thao tác cơ bản, bước đầu làm quen với giao diện Matlab
CHƯƠNG TRÌNH MATLAB:
1 Các câu lệnh được sử dụng
-Clear all: Xóa các biến, dữ liệu trước đó
14
Trang 15-Audioread(‘Tên file’): Mở 1 file âm thanh cần khử nhiễu có sẵn trong máy tính
-Reshape: Sắp xếp thứ tự các số hạng trong 1 ma trận hay tạo ra nhiều mảng trong ma trận đó
-[U,S,V] = svd (A) : phân tích SVD ma trận A
-Sigmas= diag(S): gán các giá trị trên đường chéo chính của ma trận S -plot: Vẽ đồ thị
-rank= [1000] : Đặt giá trị k để file xuất ra âm thanh không bị nhiễu
-for i=1:length(rank) approx_sigmas = sigmas : loại bỏ các trị riêng thấp -approx_S = S : gắn trị riêng đã xử lí vào ma trận S
-Figure: đặt tên file đồ thị
-Xlebel, ylebel: đặt tên trục x, trục y
- Sound: Lệnh phát âm thanh
- Pause: Thực hiện câu lệnh sau 20s
- Diag: Lấy các giá trị trên đường chéo
- Reduction_diagonal_line(80:end) = 0: Khử các giá trị đường chéo từ hàng 80 trở đi
về giá trị 0
- Fillmissing: Điền vào các giá trị trống vào các giá trị đứng trước đó
2 Đoạn code
%% BTL NHÓM 8 ĐẠI SỐ TUYẾN TÍNH GV : NGUYỄN ANH THI , NGUYỄN XUÂN MỸ
clc; clear;
%% CODE
% Đọc file âm thanh
[Y,Hz] = audioread( 'amthanh.wav' );
X = reshape(Y,[],768);
[U,S,V] = svd(X);
t = 0:1/Hz:(length(Y)-1)/Hz;
figure( 'name' , 'File đồ thị âm thanh ban đầu' );
15