1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo đề tài ứng dụng fourier vào khử nhiễu âm thanh

21 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng dụng Fourier vào khử nhiễu âm thanh
Tác giả Nguyễn Huỳnh Thái Bảo, Lê Thanh Tuyển, Đỗ Thị Thùy Vân, Trần Đại Việt, Lê Văn Quang Vinh, Lâm Trường Vủ, Lưu Thanh Bảo, Trương Quốc Bình
Người hướng dẫn Th.s Nguyễn Hữu Hiệp
Trường học Đại học Quốc gia Thành phố Hồ Chí Minh - Trường đại học Bách Khoa
Chuyên ngành Xử lý tín hiệu
Thể loại Báo cáo đề tài
Năm xuất bản 2022
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 21
Dung lượng 427,85 KB

Nội dung

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 1

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

Trang 2

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

Trang 4

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,

Trang 5

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

Trang 6

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

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 7

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

Trang 8

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

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

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)

Trang 11

3.2 Ví dụ 2

3.2.1 Code

Trang 12

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

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 14

3.3 Ví dụ 3 3.3.1 Code

Trang 15

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

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 17

3.3.3 Kết quả

Trang 18

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

Trang 19

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

Trang 21

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

Ngày đăng: 05/03/2024, 09:47

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w