You are on page 1of 21

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA

֍֍֍

BÁO CÁO
ĐỀ TÀI: ỨNG DỤNG FOURIER VÀO
KHỬ NHIỄU ÂM THANH
STT HỌ VÀ TÊN MSSV

1 Nguyễn Huỳnh Thái Bảo 2210238

2 Lê Thanh Tuyển 2213836

3 Đỗ Thị Thùy Vân 2213921

4 Trần Đại Việt 2213951

5 Lê Văn Quang Vinh 2213965

6 Lâm Trường Vủ 2213988

7 Lưu Thanh Bảo 2210221

8 Trương Quốc Bình 2210337

Lớp L05 – Nhóm 10


GVHD: Th.s Nguyễn Hữu Hiệp

Thành phố Hồ Chí Minh, tháng 5 năm 2022


Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

Mụ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

2
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

I. MỤC ĐÍCH

Ứng dụng phép biến đổi Fourier hữu hạn vào khử nhiễu âm thanh thông qua
công cụ Matlab, qua đó biết cách xử lí âm thanh thành thục, cải thiện kỹ năng làm
việc nhóm và cách sử dụng công cụ Matlab để diễn tả các bài toán một cách cụ
thể, ngắn gọn, súc tích và dễ hiểu.

3
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

II. 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,...

4
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

2. 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


fm

5
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

[] [ ]
x1 y1
Ta có : [ x ] E= ¿ … và [ f (x ) ] F = ¿ …
xn ym

Nếu tồn tại ma trận A Mmn 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
n−1
mẫu thống nhất bởi: yk +1=∑ w x j+1
jk

j =0

* Ứ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

+ Vectơ Y = Fn. X có dạng Y = A +iB.


n −1
2 πt
+ Vectơ A chứa các hệ số α t trong ∑ α t cos
t =0 n
n −1
2 πt
+ Vectơ B chứa các hệ số β t trong ∑ β t sin
t =0 n

Như vậy dùng phép biến đổi Fourier rời rạc, ta chuyển tín hiệu X ở miền
2 πt 2 πt
thời gian thành tín hiệu ở miền tần số gồm tổng các hàm cos và sin
n n

6
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

n −1
2 πt 2 πt
Giả sử tín hiệu gốc có dạng ∑ α t cos + β t sin + nhiễu
t =0 n n

Sau khi phân tích Fourier rời rạc Y = Fn.X , so sánh với hình vẽ trước và
sau khi phân tích, ta có thể xác định tần số tín hiệu chính và tần số nhiễu.
Lọc bỏ tín hiệu nhiễu ,chỉ giữ lại tín hiệu chính, sau đó phân tích Fourier
ngược ta sẽ thu được tín hiệu đã khử nhiễu.

3. Ứ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

7
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.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’:
Y = fft(y);
Vẽ lại đồ thị tín hiệu âm thanh gốc đã qua biến đổi Fourier bằng màu
đỏ:
plot(abs(Y),'r');
- Giữ lại những thay đổi trên đồ thị:
hold on;
- 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));

8
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

- 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:
plot(abs(Ythresh),'b');
sound(ythresh, Fs);
3.1.3. Kết quả

Hình 1: Đồ thị khi chưa lọc nhiễu

9
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

Hì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)

10
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.2. Ví dụ 2
3.2.1. Code

11
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.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.

12
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

- 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ả

13
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.3. Ví dụ 3

3.3.1. Code

14
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.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
của lưới đồ thị và tham số thứ ba là vị trí của đồ thị con trong lưới đồ thị. Sau
đó, hàm plot được sử dụng để vẽ đồ thị tín hiệu âm thanh gố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 y.

15
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

- 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ị.

16
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

3.3.3. Kết quả

17
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

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
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

18
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

biế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
môn học.
19
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

20
Đại học Quốc gia Thành phố Hồ Chí Minh – Trường đại học Bách Khoa

Tà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.

21

You might also like