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

Báo Cáo Bài Tập Lớn Môn Phương Pháp Tính Đề Tài Phương Pháp Số Cho Dft Để Khử Nhiễu Âm Thanh

18 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Phương Pháp Số Cho DFT Để Khử Nhiễu Âm Thanh
Tác giả Nguyễn Phùng Linh Ngọc, Nguyễn Thị Thanh Hằng, Trần Triệu Ngân, Bùi Quốc Bình Minh, Lê Nguyễn Anh Văn, Trịnh Anh Khoa
Người hướng dẫn Ths. Lê Thị Yến Nhi
Trường học Đại Học Quốc Gia Tp. Hồ Chí Minh
Chuyên ngành Phương Pháp Tính
Thể loại báo cáo bài tập lớn
Năm xuất bản 2024
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 18
Dung lượng 356,64 KB

Nội dung

1.1 Giới thiệu đề tài Đề tài: "Phương pháp số cho DFT để khử nhiễu âm thanh" Đề tài tập trung nghiên cứu và ứng dụng Biến đổi Fourier rời rạc DFT trong lĩnh vực xử lý tín hiệu âm thanh,

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

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

BÁO CÁO BÀI TẬP LỚN MÔN PHƯƠNG PHÁP TÍNH

ĐỀ TÀI PHƯƠNG PHÁP SỐ CHO DFT ĐỂ KHỬ NHIỄU ÂM THANH

Thành phố Hồ Chí Minh, tháng 12/2024

Trang 2

BẢNG PHÂN CÔNG CÁC THÀNH VIÊN TRONG NHÓM

Nguyễn Phùng Linh Ngọc 2312313 Kiểm tra và hướng phát triển Nguyễn Thị Thanh Hằng 2310903 Thuyết trình

Trần Triệu Ngân 2312241 Cơ sở lý thuyết

Bùi Quốc Bình Minh 2312047 Code

Lê Nguyễn Anh Văn 2313860 Cơ sở lý thuyết

Trịnh Anh Khoa 2211655 Code

Trang 3

MỤC LỤC

1 MỞ ĐẦU

1.1 Giới thiệu đề tài

1.2 Mục tiêu

1.3 Cách tiếp cận xử lý

2 CƠ SỞ LÝ THUYẾT

2.1 Đặt vấn đề

2.2 Cơ sở lý thuyết

2.2.1 Định nghĩa của ánh xạ tuyến tính

2.2.2 Nhân của ánh xạ tuyến tính

2.2.3 Ánh xạ tuyến tính

2.2.4 Biến đổi Fourier

3 VÍ DỤ SỐ

3.1 Mô tả lệnh code Mathlab

3.2 Lệnh code Mathlab

3.3 Kết quả sau khi chạy code

3.3.1 Tín hiệu gốc

3.3.2 Tín hiệu sau lọc với cutoff = 3500 Hz

3.3.3 Tín hiệu sau lọc với cutoff = 100 Hz

4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

4.1 Kết luận

4.2 Hướng phát triển

TÀI LIỆU THAM KHẢO

1 MỞ ĐẦU

Bài báo cáo của nhóm 13 chúng em sẽ gồm những nội dung liên quan đến việc sử dụng phương pháp số DFT để khử nhiễu âm thanh Bài báo cáo sẽ chỉ ra cách biến

Trang 4

đổi Fourier cũng như các bước lập trình code trong việc khử nhiễu âm thanh Từ đó, hiểu biết thêm về cách xử lí các tạp âm để cho ra một sản phẩm âm thanh hoàn chỉnh nhất

1.1 Giới thiệu đề tài

Đề tài: "Phương pháp số cho DFT để khử nhiễu âm thanh"

Đề tài tập trung nghiên cứu và ứng dụng Biến đổi Fourier rời rạc (DFT) trong lĩnh vực xử lý tín hiệu âm thanh, nhằm mục đích khử nhiễu và nâng cao chất lượng âm thanh Dựa trên khả năng phân tích phổ tần số của DFT, phương pháp số được xây dựng để tách biệt các thành phần tín hiệu hữu ích và loại bỏ nhiễu không mong muốn

Nghiên cứu này không chỉ trình bày nền tảng lý thuyết về DFT và các thuật toán

xử lý, mà còn triển khai thực nghiệm trên các mẫu tín hiệu thực tế để kiểm chứng hiệu quả Kết quả đạt được sẽ được đánh giá và định hướng ứng dụng trong các lĩnh vực như truyền thông, thu âm, sản xuất âm nhạc và các hệ thống xử lý âm thanh thời gian thực

Đề tài đóng góp vào việc phát triển các giải pháp công nghệ hiện đại, đặc biệt trong bối cảnh nhu cầu cải thiện chất lượng âm thanh ngày càng tăng cao

1.2 Mục tiêu

Mục tiêu chính của nghiên cứu là phát triển một thuật toán khử nhiễu âm thanh hiệu quả dựa trên biến đổi Fourier rời rạc (DFT), nhằm nâng cao chất lượng âm thanh và mở rộng ứng dụng của các công nghệ xử lý tín hiệu số trong thực tế

Cụ thể, nghiên cứu sẽ tập trung vào các mục tiêu sau:

 Phân tích sâu: Nghiên cứu chi tiết các loại nhiễu thường gặp trong tín hiệu âm thanh, bao gồm nhiễu trắng, màu, xung, và nhiễu hài hòa Đánh giá ảnh hưởng của từng loại nhiễu đến chất lượng âm thanh và khả năng nghe hiểu

 Thiết kế thuật toán: Xây dựng một thuật toán khử nhiễu DFT linh hoạt, có khả năng thích ứng với các loại nhiễu khác nhau và các điều kiện làm việc đa dạng Thuật toán sẽ bao gồm các bước tiền xử lý, phân tích phổ, thiết kế bộ lọc thích ứng, tổng hợp lại tín hiệu và hậu xử lý

 Đánh giá hiệu quả: Đánh giá hiệu quả của thuật toán thông qua các chỉ số chất lượng âm thanh tiêu chuẩn như PSNR, SNR, và các phép đo chủ quan bằng cách

so sánh âm thanh gốc và âm thanh sau khi khử nhiễu

Trang 5

 Tối ưu hóa: Tìm kiếm các phương pháp tối ưu hóa thuật toán để giảm độ phức tạp tính toán, tăng tốc độ xử lý và giảm thiểu độ trễ, nhằm đáp ứng yêu cầu thực thời của các ứng dụng

1.3 Cách tiếp cận xử lý

Discrete Fourier Transform (DFT): Tìm hiểu về nguyên lý biến đổi Fourier rời rạc (DFT), vai trò của nó trong việc phân tích tín hiệu, và cách nó chuyển đổi tín hiệu từ miền thời gian sang miền tần số

Nhiễu âm thanh: Phân loại các loại nhiễu phổ biến trong âm thanh (nhiễu trắng, nhiễu tần số thấp, nhiễu công suất điện, v.v.)

Mục tiêu khử nhiễu: Đảm bảo rằng tín hiệu âm thanh sạch nhưng không làm mất đi các thông tin quan trọng hoặc làm biến dạng tín hiệu

Chuyển tín hiệu sang miền tần số: Sử dụng DFT để phân tích tín hiệu âm thanh thành các thành phần tần số

Phát hiện và lọc nhiễu: Tìm các tần số không mong muốn (nhiễu) và loại bỏ hoặc giảm chúng bằng cách áp dụng ngưỡng lọc

Chuyển lại về miền thời gian: Dùng Inverse DFT (IDFT) để tái tạo tín hiệu âm thanh

đã khử nhiễu

Kiểm tra kết quả: Đánh giá chất lượng tín hiệu âm thanh sau khi khử nhiễu qua các chỉ số như SNR và nghe thử

Báo cáo và kết luận: Tổng hợp các kết quả thử nghiệm, so sánh phương pháp Đưa ra các hạn chế của phương pháp hiện tại và hướng phát triển tương lai

2 CƠ SỞ LÝ THUYẾT

2.1 Đặt vấn đề

Trang 6

Trong quá trình hình thành và phát triển của con người, âm thanh là một thứ đóng vai trò vô cùng quan trọng và thiết yếu đối với mỗi cá nhân con người Âm thanh là khởi nguồn của những giai điệu, cảm xúc để từ đó hình thành nên những bản nhạc bất hủ qua từng thế kỉ Nó giúp truyền đạt thông tin, cảm xúc, tạo ra môi trường và không gian cũng như niềm vui và sự thư giản, làm tăng sự hưng phấn cho cuộc sống Do đó để có được những buổi xem phim đầy cảm xúc, những chiếc loa phát nhạc du dương, thì tất cả đã được qua xử lí Vì trong quá trình tạo ra nhưng âm thanh đó thì luôn có những tạp âm không cần thiết làm giảm đi chất lượng âm thanh chính, nên ta cần loại bỏ đi những tạp âm này hay nói cách khác là khử nhiễu âm thanh Và một trong những cách để khử nhiễu phổ biến hiện nay là phép biến đổi Fourier Đây chính là phép biển đổi mà nhóm chúng em muốn trình bày trong bài báo cáo này

2.2 Cơ sở lý thuyết

2.2.1 Định nghĩa của ánh xạ tuyến tính

Ánh xạ giữa hai tập hợp X và Y là một quy tắc sao cho mỗi x thuộc X tồn tại duy nhất một y thuộc Y để y = f(x):

f : X → Y ; ∀x ∈ X ; ∃ ! y ∈ Y : y = f (x)

Cho V và W là hai không gian vecto trên cùng trường số K Ánh xạ tuyến tính f: V

→ W giữa hai không gian vecto V, W là một ánh xạ thỏa:

• (∀v1, v2 ∈ V ): f (v1 + v2) = f (v1) + f (v2)

• (∀α ∈ K , ∀v ∈ V ) : f (αv) = αf (v)

2.2.2 Nhân của ánh xạ tuyến tính

Nhân của ánh xạ tuyến tính

Cho ánh xạ tuyến tính: f : V → W, ta có nhân của ánh xạ tuyến tính f là tập

hợp tất cả các vecto x của không gian vecto V, sao cho f(x) = 0:

Kerf = {x ∈ V | f (x) = 0}

Trang 7

Ảnh của ánh xạ tuyến tính

Cho ánh xạ tuyến tính: f : V → W, ta có ảnh của ánh xạ tuyến tính f là tập

hợp tất cả các phần tử y của không gian vecto W sao cho tồn tại x ∈ V để y = f(x):

Imf = { y ∈ W| ∃ x ∈ V : y = f (x)}

Định lý

Cho ánh xạ tuyến tính: f : V → W, ta có:

• Nhân của ánh xạ tuyến tính f (kerf) là không gian con của V

• Ảnh của ánh xạ tuyến tính f (Imf) là không gian con của W

• dim(kerf) + dim(Imf) = dim(V)

2.2.3 Ánh xạ tuyến tính

Cho ánh xạ tuyến tính f : V → W:E = e1, e2, e3, e n là một cơ sở của V.

• F = f1, f2, f3, f n là một cơ sở của W.

• Nếu tồn tại ma trận A mxn sao cho [ f (x) F ] = A E,F [x] E thì ma trận A được gọi

là ma trận ánh xạ tuyến tính của f trong hai cơ sở của E và F

Trang 8

2.2.4 Biến đổi Fourier

Mục đích

Phép biến đổi Fourier giúp tách tín hiệu dạng sóng thành các tần số riêng lẻ

tạo ra nó tức là thay đổi thông tin dựa trên thời gian thành thông tin dựa trên tần số

Nó là một quá trình mà tín hiệu được biểu diễn dưới dạng sin và cos với các mức tần

số khác nhau

Biến đổi Fourier rời rạc

Các sản phẩm dùng kỹ thuật số, như là video, âm thanh, tín hiệu và hình ảnh

đồ họa, liên tục sử dụng các phép biến đổi Fourier Chúng lọc thông tin theo cách thức kỹ thuật số bằng một dòng mã được gọi là biến đổi Fourier rời rạc

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, biến đổi này là một công cụ lý tưởng để xử lý thông tin trên máy tính Đặc biệt, biến đổi này được sử 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 Biến đổi này có thể được tính nhanh bởi thuật toán biến đổi Fourier nhanh (FFT)

Ứng dụng của biến đổi Fourier rời rạc trong khử nhiễu âm thanh

Phép biến đổi Y = F n X được gọi là phép biến đổi fourier rời rạc của vecto X với:

 Vecto Y = F n X có dạng Y = A + iB

 Vecto A chứa các hệ số αt trong

0

n−1

α tcos2 πt

n

 Vecto A chứa các hệ số βt trong

0

n−1

β tcos2 πt

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 thời gian thành tín hiệu ở miền tần số gồm các hàm cos2 πt

n

⇒ Sau khi biến đổi Fourier rời rạc Y = F n X ta có thể xác định tần số tín hiệu chính

và tần số tín hiệu nhiễu từ đó ta loại bỏ các tín hiệu gây nhiễu và giữ lại tín hiệu

Trang 9

Nhờ đó mà ta có thể:

- Loại bỏ nhiễu tần số cố định: Fourier cho phép xác định các tần số nhiễu

cố định trong tín hiệu âm thanh vì vậy ta có thể loại bỏ các tần số gây nhiễu để cải thiện chất lượng âm thanh

- Phân tích tín hiệu và tìm hiểu cấu trúc tần số: Fourier cho phép phân tích tín hiệu âm thanh để tìm hiểu cấu trúc tần số của nó

- Loại bỏ nhiễu từ quá trình thu thập: Giúp loại bỏ những tạp âm trong quá trình thu thập dữ liệu

- Chuyển đổi tín hiệu vào miền tần số: Biến đổi Fourier giúp chuyển đổi tín hiệu từ miền thời gian sang miền tần số Trong miền tần số ta có thể phân tích tần số và xử lí để loại bỏ nhiễu hoặc cải thiện tín hiệu

Trang 10

3 VÍ DỤ SỐ

3.1 Mô tả lệnh code Mathlab

Trong bài code của nhóm, chúng em đã xây dựng một chương trình dựa trên hai Module: Module khởi tạo giao diện cho bộ khử nhiễu và Module chức năng xử lý nhiễu Ở đây chúng em sẽ tập trung phân tích vào Module chức năng hay nói cách khác là Module chính của chủ đề này

Sơ bộ về Module khởi tạo giao diện:

- Lệnh “load handel.mat”: Tải tín hiệu Handel (Trong trường hợp file âm thanh handel không có sẵn) và phải chú ý đến đuôi file để tránh trường hợp lỗi

- Sử dụng một số hàm như “uifigure” và “global” để thiết lập giao diện bộ khử nhiễu gồm các nút “Chọn file”, “Phát”, “Dừng”, “Lọc nhiễu DFT” song song với việc thiết lập biến toàn cục để lưu trữ dữ liệu âm thanh và trạng thái cũng như định hình và ký hiệu cho các biểu đồ phổ tần số sẽ sử dụng

Phân tích Module xử lý nhiễu bằng DFT (gồm 5 thành phần chính):

- Phân tích tính hiệu âm thanh:0 “filterNoise()”: Đây là tên của hàm, được định

nghĩa để thực hiện nhiệm vụ lọc nhiễu Và dùng hàm “fft()” để thực hiện biến đổi Fourier Kết thúc quá trình nhập vào để phân tích tín hiệu

- Chuyển sang miền tần số bằng DFT: Dùng hàm “filterNoise” để tạo khối lệnh

xử lý lọc nhiễu bằng DFT Khối lệnh này là thành phần chính bao hàm cả hai thành phần tiếp theo trong Module Và dùng lệnh “f = (0:N-1) * Fs / N” để tạo trục tần số tương ứng với tín hiệu đã biến đổi Fourier

- Lọc nhiễu trong miền tần số: Xác định mức tần số cao tần muốn sử dụng để loại

bỏ nhiễu qua dòng lệnh “cutoffFreq = X”, với X là mức tần số nào đó Đối với

chương trình của nhóm thì chúng em chọn mức tần số là 3500 hay nói cách khác

là những mức tần số lớn hơn ngưỡng 3500 sẽ bị loại bỏ khỏi bộ xử lý

- Chuyển ngược về miền thời gian bằng IDFT: Nhóm sử dụng dòng lệnh

“filteredAudio = real(ifft(Y))” để khôi phục tín hiệu bằng IDFT

- Đánh giá tín hiệu sau lọc: Khởi tạo khối lệnh plot dựa trên phổ tần số của tín

hiệu sau khi lọc để vẽ phổ tần số qua một số tùy chỉnh như biến đổi Fourier hay nhân đôi biên độ cho các tần số lẻ Dùng đồ thị phổ tần số mới thu được để rút ra đánh giá cho file âm thanh đã sử dụng

Trang 11

Sau khi lọc, hàm “plotSignal(filteredAudio, ax2)” : vẽ tín hiệu thời gian của tín hiệu

đã lọc lên biểu đồ

Hàm “plotSpectrum(filteredAudio, ax4)”: vẽ phổ tần số của tín hiệu đã lọc lên biểu đồ

3.2 Lệnh code Mathlab

function audio_player_with_DFT_and_spectrum

% Tạo giao diện chính

fig = uifigure('Name', 'Audio Player with DFT & Spectrum', 'Position', [300, 300, 700, 650]);

% Nút "Chọn file"

uibutton(fig, 'Position', [20, 600, 100, 30],

'Text', 'Chọn file',

'ButtonPushedFcn', @selectFile);

% Nút "Phát"

playButton = uibutton(fig, 'Position', [140, 600, 100, 30],

'Text', 'Phát',

'ButtonPushedFcn', @playAudio,

'Enable', 'off');

% Nút "Dừng"

stopButton = uibutton(fig, 'Position', [260, 600, 100, 30],

'Text', 'Dừng',

'ButtonPushedFcn', @stopAudio,

'Enable', 'off');

% Nút "Lọc nhiễu DFT"

filterButton = uibutton(fig, 'Position', [380, 600, 100, 30],

'Text', 'Lọc nhiễu DFT',

'ButtonPushedFcn', @filterNoise,

'Enable', 'off');

% Nhãn hiển thị thông tin file

fileLabel = uilabel(fig, 'Position', [20, 570, 560, 20],

'Text', 'Không có file nào được chọn.',

'HorizontalAlignment', 'left');

% Biến toàn cục để lưu trữ dữ liệu âm thanh và trạng thái

global audioData Fs audioPlayer filteredAudio;

audioData = []; % Dữ liệu âm thanh gốc

filteredAudio = []; % Dữ liệu sau khi lọc nhiễu

Fs = 0; % Tần số mẫu

% Tạo trục biểu đồ cho tín hiệu âm thanh

Trang 12

ax1 = uiaxes(fig, 'Position', [50, 350, 300, 150]);

ax2 = uiaxes(fig, 'Position', [380, 350, 300, 150]);

% Thêm tiêu đề cho các biểu đồ

title(ax1, 'Tín hiệu gốc');

title(ax2, 'Tín hiệu sau lọc');

% Tạo trục biểu đồ cho phổ tần số

ax3 = uiaxes(fig, 'Position', [50, 50, 300, 150]);

ax4 = uiaxes(fig, 'Position', [380, 50, 300, 150]);

% Thêm tiêu đề cho các biểu đồ phổ tần số

title(ax3, 'Phổ tần số gốc');

title(ax4, 'Phổ tần số sau lọc');

%% Hàm: Chọn file âm thanh

function selectFile(~, ~)

[fileName, filePath] = uigetfile('*.wav', 'Chọn file âm thanh');

if isequal(fileName, 0)

fileLabel.Text = 'Không có file nào được chọn.';

else

fileFullPath = fullfile(filePath, fileName);

[audioData, Fs] = audioread(fileFullPath);

filteredAudio = audioData; % Ban đầu gán bằng tín hiệu gốc

% Cập nhật giao diện

fileLabel.Text = ['File đã chọn: ', fileName];

playButton.Enable = 'on';

filterButton.Enable = 'on';

% Hiển thị tín hiệu gốc và phổ tần số gốc

plotSignal(audioData, ax1);

plotSpectrum(audioData, ax3);

end

end

%% Hàm: Phát âm thanh

function playAudio(~, ~)

if ~isempty(audioData)

if isempty(filteredAudio)

currentAudio = audioData; % Phát tín hiệu gốc

else

currentAudio = filteredAudio; % Phát tín hiệu sau lọc end

audioPlayer = audioplayer(currentAudio, Fs);

play(audioPlayer);

stopButton.Enable = 'on';

playButton.Enable = 'off';

Trang 13

end

end

%% Hàm: Dừng âm thanh

function stopAudio(~, ~)

if ~isempty(audioPlayer)

stop(audioPlayer);

playButton.Enable = 'on';

stopButton.Enable = 'off';

end

end

%% Hàm: Lọc nhiễu bằng DFT

function filterNoise(~, ~)

if ~isempty(audioData)

% Bước 1: Phân tích tín hiệu âm thanh

N = length(audioData); % Số mẫu tín hiệu

Y = fft(audioData); % Biến đổi Fourier (DFT)

% Bước 2: Chuyển sang miền tần số bằng DFT

f = (0:N-1) * Fs / N; % Tạo trục tần số

% Bước 3: Lọc nhiễu trong miền tần số

cutoffFreq = 100; % Ngưỡng tần số (Hz)

Y(abs(f) > cutoffFreq) = 0; % Loại bỏ các tần số cao hơn ngưỡng

% Bước 4: Chuyển ngược về miền thời gian bằng IDFT

filteredAudio = real(ifft(Y)); % Chuyển về tín hiệu thời gian (IDFT)

% Cập nhật giao diện

fileLabel.Text = 'Lọc nhiễu DFT thành công Phổ tần số đã được cập nhật.'; playButton.Enable = 'on';

% Bước 5: Đánh giá tín hiệu sau lọc

plotSignal(filteredAudio, ax2);

plotSpectrum(filteredAudio, ax4);

end

end

%% Hàm: Hiển thị tín hiệu âm thanh

function plotSignal(audioSignal, ax)

t = (0:length(audioSignal)-1) / Fs; % Trục thời gian

plot(ax, t, audioSignal);

ax.XLabel.String = 'Thời gian (s)';

ax.YLabel.String = 'Biên độ';

end

%% Hàm: Hiển thị phổ tần số

Ngày đăng: 11/12/2024, 09:37

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

TÀI LIỆU LIÊN QUAN

w