Giới thiệu khái quát về phép biến đổi Fourier hữu hạn- Biến đổi Fourier là một trong những kỹ thuật được sử dụng rộng rãi nhất trong toán học ứng dụng, chẳng hạn như trong lĩnh vực xử lý
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
֍֍֍
BÁO CÁO
ĐỀ TÀI: ỨNG DỤNG FOURIER VÀO
KHỬ NHIỄU ÂM THANH
Trang 2Mục Lục
I MỤC ĐÍCH 3
II.NỘI DUNG 4
2 Cơ sở lý thuyết 4
2.1 Định nghĩa ánh xạ tuyến tính 4
2.2 Nhân và ả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.4 Biến đổi Fourier hữu hạn 5
3 Ứng dụng biến đổi Fourier hữu hạn để khử nhiễu âm thanh trong Matlab 7
3.1 Ví dụ 1 7
3.2 Ví dụ 2 9
3.3 Ví dụ 3 11
4 Kết luận 14
Tài liệu tham khảo 15
Trang 4II NỘI DUNG
1 Giới thiệu khái quát về phép biến đổi Fourier hữu hạn
- Biến đổi Fourier là một trong những kỹ thuật được sử dụng rộng rãi nhất trong toán học ứng dụng, chẳng hạn như trong lĩnh vực xử lý tín hiệu và nén dữ liệu, biến đổi Fourier dựa trên ý tưởng các hàm có tính chất phù hợp có thể được biểu diễn bằng tổ hợp tuyến tính của các hàm lượng giác Công việc ban đầu của biến đổi Fourier là việc sử dụng các hàm lượng giác trong giải tích bắt nguồn từ các công trình của nhà toán học Leonhard Euler (1707-1783), Alexis-Claude Clairaut (1713-1765) và Joseph Louis Lagrange (1736-1813)
- Euler là người đầu tiên đưa ra công thức cho các hệ số của chuỗi Fourier Dựa trên các nghiên cứu của Euler, Clairaut đã công bố công thức đầu tiên cho phép biến đổi Fourier rời rạc (DFT) vào năm 1754 là cái chúng ta hiện biết Năm
1805, Carl Friendrich Gauss (1777-1855) đã công bố công thức cho DFT
- Năm 1822, Joseph Fourier (1768-1830) đưa ra công trình về dòng nhiệt cung cấp nền tảng cho phép biến đổi Fourier và nguồn gốc tên gọi của nó Năm
1965, James Cooley và John Tukey, đã phát minh ra thuật toán biến đổi Fourier nhanh (FFT), thuật toán này đã cho phép một loạt các ứng dụng số trong thời đại
kỹ thuật số ra đời Các ứng dụng này bao gồm nén dữ liệu JPEG, phân tích cấu trúc tinh thể, giải phương trình vi phân từng phần, xử lí tín hiệu nhiễu,
Trang 52 Cơ sở lý thuyết
2.1 Định nghĩa ánh xạ tuyến tính
Cho X, Y là hai tập hợp khác rỗng tùy ý Ánh xạ f giữa X và Y là quy tắc tương ứng mỗi phần tử x X một và chỉ một phần tử y Y Hay f : X Y là ánh xạ, nếu x X , ! y Y, y f (x)
2.2 Nhân và ảnh của ánh xạ tuyến tính
Cho ánh xạ tuyến tính f : X Y
Nhân (Ker) của f được định nghĩa là: Kerf x X | f (x) 0
Ảnh (Im) của f được định nghĩa là: Imf y Y | x X , y f (x)
* Ghi chú: Kerf là nghiệm của phương trình f
Imf là tập các ảnh của f (trong hàm số gọi là tập giá trị)
Tính chất: Cho ánh xạ tuyến tính f : X Y
+ Nhân (Ker) của f là không gian con của X + Ảnh (Im) của f là không gian con của Y.
+ dim(Kerf ) dim(Imf ) dim(X )
2.3 Biểu diễn ma trận của ánh xạ tuyến tính
* Định nghĩa: Cho V là không gian vector n chiều, W là không gian
vector m chiều, E e1, e2 , , en là một cơ sở của V, F f1, f2 , , fm là một cơ sở của W và f :V W xác định bởi x f (x) là ánh xạ tuyến tính
Vì x V và f (x) W nên theo tính chất của không gian vector thì x luôn biểu thị tuyến tính được qua cơ sở E trong V và f (x) luôn biểu thị
được qua cơ sở F trong W
Giả sử: x x1e1 x2e2 xnen và f (x) y1 f1 y2 f2 ym
Trang 6Nếu tồn tại ma trận A Mmn sao cho A[x]E=[f (x)]F với mọi x V thì
A được gọi là ma trận của ánh xạ tuyến tính f đối với cơ sở E trong V và
F trong W
2.4 Biến đổi Fourier hữu hạn
Trong toán họ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
Mục đích của biến đổi Fourier là tách tín hiệu dạng sóng thành các tần
số riêng lẻ tạo ra nó Cụ thể hơn, biến đổi Fourier tách hàm số thành tổng các hàm sin và cos, mỗi hàm có tần số khác nhau
Biến đổi Fourier được xác định cho một vecto x với n các điểm được lấy
mẫu thống nhất bởi: yk+1=∑
j=0
n−1
w jk x j+1
* Ứng dụng biến đổi Fourier hữu hạn trong khử nhiễu âm thanh
Phép biến đổi Y = Fn X được gọi là phép biến đổi fourier rời rạc của vectơ X
Trang 73 Ứng dụng biến đổi Fourier hữu hạn để khử nhiễu âm thanh trong Matlab
Dưới đây là một số ví dụ sử dụng biến đổi Fourier hữu hạn trong khử nhiễu âm thanh với Matlab:
3.1 Ví dụ 1
3.1.1 Code
Trang 83.1.2 Giải thích Code
- đọc tín hiệu âm thanh đầu vào bằng hàm audioread và lưu trữ trong
biến ‘y’ Tần số lấy mẫu của tín hiệu được lưu trữ trong biến ‘Fs’:
[y, Fs] = audioread('1.wav')
- Nghe âm thanh gốc được đưa vào biến ‘y’ và tần số mẫu tại biến
‘Fs’ bằng hàm sound:
sound(y, Fs)
- Sử dụng hàm ‘fft’ để biến đổi Fourier của tín hiệu âm thanh gốc và
lưu nó vào biến ‘Y’:
- Sử dụng hàm pause để dừng chương trình trong giây lát để ta có thể
nghe được sự khác biệt giữa hai đoạn âm thanh chưa được lọc nhiễu và
đã được lọc nhiễu:
pause(5)
- Tính giá trị tuyệt đối của tín hiệu âm thanh gốc sau khi qua biến đổi
Fourier bằng hàm ‘abs( )’ và tìm ra giá trị lớn nhất bằng hàm ‘max( )’ và
sau đó lưu vào biến ‘M’
- Tạo ra một ma trận ‘Ythresh’ để lưu các giá trị được tính theo công thức ‘(abs(Y)>thresh*M).*Y’ để chỉ giữ lại các thành phần tần số lớn
hơn ngưỡng xác định
Ythresh=(abs(Y)>thresh*M).*Y;
- Sử dụng hàm ‘ifft’ để biến đổi Fourier ngược để chuyển đổi ma trận ‘Ythresh’ thành tín hiệu âm thanh đã được khử nhiễu và lưu trong biến ‘ythresh’:
ythresh=real(ifft(Ythresh));
Trang 9- Vẽ lại đồ thị tín hiệu âm thanh đã qua lọc nhiễu được lưu ở
‘Ythresh’ bằng màu xanh để so sánh được sự khác nhau với đồ thị tín
hiệu ban đầu sau đó nghe âm thanh này để so sánh với âm thanh gốc khi chưa được lọc nhiễu:
Trang 10Hình 2: Đồ thị khi đã lọc nhiễu
Hình 3: Đồ thị khi chưa lọc nhiễu (màu đỏ) và đồ thị khi đã lọc nhiễu (màu xanh)
Trang 113.2 Ví dụ 2
3.2.1 Code
Trang 123.2.2 Giải thích Code
- audioread('1.wav'): Hàm này được sử dụng để đọc tín hiệu âm thanh từ file 1.wav và
trả về hai đối số là tín hiệu âm thanh x và tần số lấy mẫu fs
- fir1(30,Wn): Hàm này được sử dụng để thiết kế bộ lọc FIR thông thấp với 30 mẫu và
tần số cắt fc được tính dựa trên tần số lấy mẫu fs
- filter(b,1,x): Hàm này được sử dụng để áp dụng bộ lọc FIR b vào tín hiệu âm thanh x,
trả về tín hiệu âm thanh đã được lọc y
- audiowrite('2.wav', y, fs): Hàm này được sử dụng để xuất tín hiệu âm thanh đã được
lọc y ra file mới có tên là ten_file_sau_khi_loc.wav với tần số lấy mẫu fs
- subplot(2,1,1): Hàm này được sử dụng để chia bố cục của biểu đồ, tạo ra một hình
ảnh chứa hai đồ thị cùng một cửa sổ Đoạn code này chọn vị trí đồ thị thứ nhất
- plot(x): Hàm này được sử dụng để vẽ biểu đồ tín hiệu âm thanh ban đầu x.
- title('Tín hiệu âm thanh ban đầu'): Hàm này được sử dụng để đặt tiêu đề cho đồ thị.
- sound(x, fs): Hàm này được sử dụng để phát tín hiệu âm thanh ban đầu x thông qua
loa máy tính với tần số lấy mẫu fs
- pause(length(x)/fs): Hàm này được sử dụng để tạm dừng chương trình trong một
khoảng thời gian bằng với độ dài của tín hiệu âm thanh ban đầu x chia cho tần số lấy mẫu fs
- subplot(2,1,2): Hàm này được sử dụng để chia bố cục của biểu đồ, tạo ra một hình
ảnh chứa hai đồ thị cùng một cửa sổ Đoạn code này chọn vị trí đồ thị thứ hai
- plot(y): Hàm này được sử dụng để vẽ biểu đồ tín hiệu âm thanh đã được lọc y.
- title('Tín hiệu âm thanh đã được lọc'): Hàm này được sử dụng để đặt tiêu đề cho đồ
thị
- sound(y, fs): Hàm này được sử dụng để phát tín hiệu âm thanh đã được lọc y thông
qua loa máy tính với tần số lấy mẫu fs
Trang 13- pause(length(y)/fs): Hàm này được sử dụng để tạm dừng chương trình trong một
khoảng thời gian bằng với độ dài của tín hiệu âm thanh đã được lọc y chia cho tần số lấy mẫu fs
3.2.3 Kết quả
Trang 143.3 Ví dụ 3 3.3.1 Code
Trang 153.3.2 Giải thích Code
- audioread('noisy_audio.wav') : Hàm audioread được sử dụng để đọc file âm
thanh có tên là noisy_audio.wav, trả về dữ liệu âm thanh và tần số lấy mẫu của
tín hiệu đó
- Fs = Fs/2; : Giảm tần số lấy mẫu xuống một nửa.
- Y = fft(y); : thực hiện phép biến đổi Fourier cho tín hiệu âm thanh Kết quả của
phép biến đổi Fourier là một mảng phức gồm các phần tử là giá trị phức của hệ
số Fourier tương ứng với các tần số trong tín hiệu âm thanh
- Pyy = Y.*conj(Y)/n; : tính toán số phức đối của các phần tử trong mảng Y, sau
đó nhân với chính nó để tính toán mô đun bình phương của từng phần tử Cuối
cùng, giá trị này được chia cho số mẫu n để tính toán một ước lượng của mật
độ năng lượng phổ của tín hiệu
- cutoff_idx = find(f > cutoff, 1); : tìm vị trí đầu tiên trong mảng tần số f mà giá
trị của phần tử lớn hơn giá trị của biến cutoff Vị trí này được lưu trữ trong biến cutoff_idx và sẽ được sử dụng để chuyển tất cả các phần tử trong mảng Y
có chỉ số lớn hơn cutoff_idx thành 0.
- Y(cutoff_idx:end) = 0; : Tất cả các phần tử trong mảng Y có chỉ số lớn hơn cutoff_idx được chuyển thành 0 để loại bỏ các tần số cao hơn tần số cắt.
- y_filtered = real(ifft(Y)); : thực hiện phép biến đổi Fourier ngược để lấy lại tín
hiệu âm thanh đã lọc Kết quả của phép biến đổi Fourier ngược là một mảng phức gồm các phần tử là giá trị phức của tín hiệu âm thanh Để lấy phần thực
của kết quả, hàm real được sử dụng.
- subplot(2,2,1); plot(t,y); : tạo ra một khu vực đồ thị chứa 4 đồ thị con Tham số
đầu tiên của hàm subplot là số hàng của lưới đồ thị, tham số thứ hai là số cột
Trang 16- subplot(2,2,2); plot(f(1:n/2),Pyy(1:n/2)); : hàm subplot được sử dụng để tạo
ra đồ thị thứ hai trong khu vực đồ thị Hàm plot được sử dụng để vẽ đồ thị phổ của tín hiệu âm thanh gốc với trục x là tần số f và trục y là mật độ năng lượng phổ Pyy Ở đây, chỉ có nửa phần tử đầu tiên của mảng Pyy được sử dụng để vẽ
đồ thị
- subplot(2,2,3); plot(t,y_filtered); : Hàm subplot được sử dụng để tạo ra đồ thị
thứ ba trong khu vực đồ thị Hàm plot được sử dụng để vẽ đồ thị tín hiệu âm thanh đã lọc với trục x là thời gian t và trục y là giá trị của tín hiệu âm thanh đã lọc y_filtered.
- Y_filtered = fft(y_filtered); : thực hiện phép biến đổi Fourier cho tín hiệu âm
thanh đã lọc Kết quả của phép biến đổi Fourier được lưu trữ trong mảng
Y_filtered.
- Pyy_filtered = Y_filtered.* conj(Y_filtered) / n; : Sau khi có được kết quả của
phép biến đổi Fourier cho tín hiệu âm thanh đã lọc, hàm conj được sử dụng để tính toán số phức liên hợp của các phần tử trong mảng Y_filtered, sau đó sử dụng toán tử * để thực hiện tính toán các phần tử của mảng Y_filtered và mảng số phức liên hợp của Y_filtered Kết quả cuối cùng được chia cho n để
tính toán mật độ năng lượng phổ của tín hiệu âm thanh đã lọc và lưu trữ trong
mảng Pyy_filtered.
- subplot(2,2,4); plot(f(n/2),Pyy_filtered(1:n/2)); : Cuối cùng, hàm subplot
được sử dụng để tạo ra đồ thị thứ tư trong khu vực đồ thị Hàm plot được sử dụng để vẽ đồ thị phổ của tín hiệu âm thanh đã lọc với trục x là tần số f và trục
y là mật độ năng lượng phổ Pyy_filtered Như ở đồ thị thứ hai, chỉ có nửa phần
tử đầu tiên của mảng Pyy_filtered được sử dụng để vẽ đồ thị.
Trang 173.3.3 Kết quả
Trang 18Biết cách lọc nhiễu một file
âm thanh bất kỳ trên
MATLAB.
➔ Hiểu biết rõ hơn về các ứng dụng của môn học.
➔ Trau dồi kỹ năng học tập
và làm việc nhóm hiệu quả.
➔ Nâng cao tình đoàn kết của các thành viên trong
nhóm.
➔ Có sự hứng thú đối với môn học
4 Kết luận
Với đề tài được giao, nhóm đã lên kế hoạch làm việc và phân chia công việc cụ thể cho từng thành viên, các thành viên trong nhóm với tinh thần đầy trách nhiệm đã hoàn thành được bài báo cáo này Qua bài báo cáo nhóm đã củng cố các kiến thức về ánh xạ tuyến tính cũng như hiểu về phép
Trang 19biến đổi Fourier và ứng dụng vào khử nhiễu âm thanh bất kì với công cụ hỗtrợ là Matlab, qua đó củng cố kiến thức cơ bản và học được những kiến thức mới về lập trình trên Matlab
➔ Biết cách lọc nhiễu một file âm thanh bất kỳ trên
MATLAB.
➔ Hiểu biết rõ hơn về các ứng dụng của môn học.
➔ Trau dồi kỹ năng học tập
và làm việc nhóm hiệu quả.
➔ Nâng cao tình đoàn kết của các thành viên trong
nhóm.
➔ Có sự hứng thú đối với
Trang 21Tài liệu tham khảo
[1] Đặng Văn Vinh, (2021) Giáo trình Đại số tuyến tính, Trường Đại học Bách khoa,ĐHQG.HCM - NXB Đại học Quốc gia Thành phố Hồ Chí Minh
[2] Wikipedia, (2021) Biến đổi Fourier rời rạc, Bách khoa toàn thư mở Wikipedia