1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Xử lý tín hiệu Âm thanh

33 402 1

Đ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

Định dạng
Số trang 33
Dung lượng 2,09 MB

Nội dung

Trong cuộc sống hiện nay, âm thanh là một phần không thể thiếu đối với con người. Âm thanh có thể xuất hiện bất cứ lúc nào xung quanh môi trường sống của chúng ta như tiếng gió, tiếng xe, tiếng nhạc,...Có những loại âm thanh chúng ta mong muốn nghe được nhưng cũng có những tạp âm không mong muốn bắt buộc chúng ta phải nghe. Vì vậy, công nghệ đang ngày càng phát triển trong thời đại hiện nay đã giúp chúng ta có thể can thiệp sâu hơn vào các file âm thanh và xử lý chúng theo ý chúng ta muốn. Xuất phát từ thực tế này, nhóm đã bắt tay vào tìm hiểu những phương pháp xử lý tín hiệu âm thanh, điều chỉnh âm thanh ở các dạng khác nhau theo ý muốn và lập trình một giao diện đơn giản để mở tín hiệu âm thanh từ máy tính.

Trang 2

BẢNG PHÂN CÔNG CÔNG VIỆC

Trương Công Đức

+ Nguyễn Văn Nhân

Tổng quan về tín hiệu âm

 Lập trình giao diện GUI đơn giản bằng

 Ghép các âm thanh đơn lẻ thành đoạn âm thanh hoàn chỉnh và hiệu ứng Fade in Fade out

 Tìm hiểu đặc tính biên tần và thiết kế bộ lọc thông dải cho tín hiệu

50%

Trang 3

MỤC LỤC

XỬ LÝ TÍN HIỆU 1

ÂM THANH 1

BẢNG PHÂN CÔNG CÔNG VIỆC 2

LỜI MỞ ĐẦU 4

CHƯƠNG 1 : TỔNG QUAN VỀ TÍN HIỆU ÂM THANH 5

I Nguồn gốc âm thanh : 5

II Các đại lượng đặc trưng cho âm thanh : 5

III Nhân dạng tiếng nói: 5

IV Nâng cao chất lượng tiếng nói: 6

V Hệ thống và xử lí tín hiệu: 7

VI Lý thuyết về nhiễu: 7

VII Lập trình giao diện GUI trong MATLAB : 8

CHƯƠNG 2 : MÔ PHỎNG VÀ XỬ LÝ TÍN HIỆU ÂM THANH TRÊN MATLAB 9

I Giới thiệu : 9

II Mô phỏng : 9

1) Xử lý tín hiệu được lấy từ tập tin có sẵn : 9

2) Xử lý tín hiệu từ tập tin ghi âm trực tiếp : 12

3) Ghép các âm thanh đơn lẻ thành một đoạn âm thanh hoàn chỉnh và hiệu ứng Fade in Fade out 19

4) Tìm hiểu đặc tính biên tần và thiết kế bộ lọc thông dải đơn giản cho tín hiệu 22

5) Lập trình giao diện GUI đơn giản bằng MATLAB : 26

KẾT LUẬN 33

Trang 4

LỜI MỞ ĐẦU

Trong cuộc sống hiện nay, âm thanh là một phần không thể thiếu đối với con người Âm thanh có thể xuất hiện bất cứ lúc nào xung quanh môi trường sống của chúng ta như tiếng gió, tiếng xe, tiếng nhạc, Có những loại âm thanh chúng ta mong muốn nghe được nhưng cũng có những tạp

âm không mong muốn bắt buộc chúng ta phải nghe Vì vậy, công nghệ đang ngày càng phát triển trong thời đại hiện nay đã giúp chúng ta có thể can thiệp sâu hơn vào các file âm thanh và xử lý chúng theo ý chúng ta muốn

Xuất phát từ thực tế này, nhóm đã bắt tay vào tìm hiểu những phương pháp xử lý tín hiệu âm thanh, điều chỉnh âm thanh ở các dạng khác nhau theo ý muốn và lập trình một giao diện đơn giản để mở tín hiệu âm thanh

từ máy tính

Báo cáo được chia làm 2 phần chính :

 Phần 1 : Tổng quan về tín hiệu âm thanh, các khái niệm, vấn đề liên quan đến xử lý âm thanh

 Phần 2 : Mô phỏng và xử lý tín hiệu âm thanh trên phần mềm

MATLAB

Trang 5

CHƯƠNG 1 : TỔNG QUAN VỀ TÍN HIỆU ÂM

THANH

I Nguồn gốc âm thanh :

 Âm thanh là vật thể dao động cơ học tạo ra Âm thanh tồn tại dưới hình thức sóng âm Sóng âm là sự biến đổi các tính chất của môi trường đàn hồi khi năng lượng truyền qua Sóng âm truyền được trong chất rắn, lỏng, khí và không truyền được trong chân không

 Khi kích thích dao động âm trong môi trường không khí thì những lớp khí sẽ bị nén và dãn Trạng thái nén dãn lần lượt lan truyền từ nguồn âm dưới dạng sóng dọc tới nơi thu âm Nếu cường độ càng lớn thì âm thanh truyền đi càng xa

II Các đại lượng đặc trưng cho âm thanh :

 Tần số âm thanh: số lần dao động của phần tử khí trong 1 giây Đơn vị : Hz , kí hiệu: f

 Chu kì của âm thanh: thời gian âm thanh hoàn thành 1 dao động hoàn toàn

Đơn vị : thời gian ( s), kí hiệu : T

 Tốc độ truyền âm : là tốc độ truyền năng lượng âm thanh từ nguồn phát tới nguồn thu Tốc độ truyền âm trong môi trường không khí ở nhiệt độ từ 0-200C là 300m/s - 340m/s

Đơn vị : m/s

 Cường độ âm thanh: là năng lượng được sóng âm truyền trong 1 đơn vị thời gian qua một đơn vị diện tích

 Thanh áp: lực tác dụng vào tai người nghe

Đơn vị: 1pa=1N/m2 hoặc 1bar=1dym/cm2

 Âm sắc : Âm sắc là một đặc tính của âm thanh nhờ đó mà phân biệt được âm trầm, bổng, tiếng nhạc cụ, tiếng nam nữ và tiếng người này với người khác

 Âm lượng: là mức độ to nhỏ của nguồn

Đơn vị: W

III Nhân dạng tiếng nói:

 Nhận dạng lời nói là 1 hệ thống có khả năng nhận biết ngữ nghĩa của lời nói - Đây là quá trình biến đổi âm thanh thu được từ micro, loa và

Trang 6

các tín hiệu khác thành một chuỗi các từ Tín hiệu tiếng nói được

biểu diễn chính xác bởi các phổ trong khoảng thời gian ngắn

 Phân tích đặc trưng của tín hiệu tiếng nói:

 Quá trình này là để loại bỏ các tín hiệu không quan trọng như tiếng

ồn của môi trường, nhiễu trên đường truyền, các đặc điểm riêng biệt

của tiếng nói Tiếng nói được phân tích theo các khung thời gian

được gọi là frame

 Ví dụ: Tín hiệu tiếng nói- là sự biến thiên của áp suất không khí theo

thời gian Khi ta phát âm chữ “ Xin chào” , dạng sóng của nó được

biểu diễn như hình:

IV Nâng cao chất lƣợng tiếng nói:

 Nâng cao chất lượng tiếng nói là cải thiện tín hiệu tiếng nói bị suy

giảm chất lượng do có sự tác động của nhiễu Sự cải thiện về chất

lượng mà tốt thì sẽ làm giảm đi sự khó khăn cho người nghe trong

khi nghe và trong nhiều trường hợp nó còn giúp cho người nghe có

thể nghe được trong môi trường nhiễu mức độ cao và nhiễu tồn tại

trong thời gian dài Các thuật toán nâng cao chất lượng tiếng nói làm

giảm và nén nhiễu đến một mức nào đó và nó được xem như là các

thuật toán nén nhiễu

Trang 7

V Hệ thống và xử lí tín hiệu:

 Hệ thống là một thiết bị vật lý thực hiện một tác động nào đó lên tín hiệu Ví dụ, bộ lọc dùng để giảm nhiễu trong tín hiệu mang tin được gọi là một hệ thống Khi ta truyền tín hiệu qua một hệ thống, như bộ lọc chẳng hạn, ta nói rằng đã xử lý tín hiệu đó Trong trường này, xử

lý tín hiệu liên quan đến lọc nhiễu ra khỏi tín hiệu mong muốn

 Xử lý tín hiệu là ý muốn nói đến một loạt các công việc hay các phép toán được thực hiện trên các tín hiệu nhằm đạt mục đích nào đó, như là tách tin tức chứa bên trong tín hiệu hoặc là truyền tín hiệu mang tin từ nơi này đến nơi khác

 Ở đây ta cần lưu ý đến định nghĩa hệ thống, nó không chỉ đơn thuần

là thiết bị vật lý mà còn là phần mềm xử lý tín hiệu hoặc là sự kết hợp giữa phần cứng và phần mềm Ví dụ khi xử lý số tín hiệu bằng mạch logic, hệ thống xử lý ở đây là phần cứng Khi xử lý bằng máy tính số, tác động lên tín hiệu bao gồm một loạt các phép toán thực hiện bởi chương trình phần mềm Khi xử lý bằng các bộ vi xử lý-hệ thống bao gồm kết hợp cả phần cứng và phần mềm, mỗi phần thực hiện các công việc riêng nào đó

VI Lý thuyết về nhiễu:

Ngu ồn nhiễu:

 Nguồn nhiễu là một hiện thực, nó tồn tại ở mọi nơi, trên đường phố, trên xe, trong văn phòng, trong nhà hàng, trong các toà nhà Nó có thể là tiếng xe chạy trên đường, tiếng ồn trên các công trường xây dựng, tiếng ồn phát ra từ các quạt chạy trong PC, chuông điện

thoại…, nó tồn tại với các hình dạng và hình thức khác nhau trong cuộc sống hằng ngày của chúng ta

 Nhiễu có thể hình thành ở một nơi cố định, và không thay đổi theo thời gian, ví dụ như là tiếng ồn phát ra từ quạt chạy trong PC Nhiễu cũng có thể không đứng yên một chỗ, ví dụ như nhiễu trong nhà hàng, đó là tiếng nói của nhiều người xen lẫn với nhiều cách khác nhau với tiếng ồn phát ra từ nhà bếp

 Các đặc tính về phổ cũng như thời gian của nhiễu trong nhà hàng thay đổi không theo quy luật nên việc nén nhiễu trong các môi

trường có nhiễu thay đổi như vậy sẽ khó khăn hơn nhiều so với các

Trang 8

nguồn nhiễu đứng yên không thay đổi Các đặc tính đặc biệt khác nhau của các loại nhiễu đó là hình dạng của phổ và sự phân bố của năng lượng nhiễu trong miền tần số Ví dụ, nhiễu gây ra bởi gió thì năng lượng của nó tập trung ở tần số thấp dưới 500Hz Nhưng đối với nhiễu trong nhà hàng, trên xe, trên tàu thì khác, năng lượng của

nó được phân bố trên một dải tần số rộng

VII Lập trình giao diện GUI trong MATLAB :

Khái ni ệm : GUI được viết tắt của từ “Graphical User Interface”

dịch theo tiếng việt là Giao diện người dùng đồ họa Là ta sẽ tiến hành sử dụng chuột để thao tác các thanh công cụ đã được con người lập trình sẵn và tích hợp vào phần mềm Matlab Nó cho phép tương tác giao diện chương trình từ đó bạn nhìn được một cách khách quan nhất và bắt đầu viết code để tương tác giao diện

GUI h ỗ trợ những gì :

 GUI hỗ trợ khá đầy đủ các chương trình để thực hiện : Các phép tính toán LOGIC, lập trình không gian 2D, 3D, đọc dữ liệu từ Excel, đọc

dữ liệu các file âm thanh, xử lý hình ảnh,

 Nó được thực hiện thông qua hàm được xây dựng sẵn là hàm

CALLBACK

 Không cần biết nhiều về cấu trúc của chương trình mà vẫn có thể thực hiện được

Trang 9

CHƯƠNG 2 : MÔ PHỎNG VÀ XỬ LÝ TÍN HIỆU ÂM

THANH TRÊN MATLAB

I Giới thiệu :

Phần này chúng ta sẽ tiến hành mô phỏng trực tiếp trên phần mềm MATLAB, qua đó giới thiệu các câu lệnh để xử lý âm thanh Gồm có

5 phần chính :

1) Xử lý tín hiệu được lấy từ tập tin có sẵn

2) Xử lý tín hiệu từ tập tin ghi âm trực tiếp

3) Ghép các âm thanh đơn lẻ thành một đoạn âm thanh hoàn chỉnh và hiệu ứng Fade in Fade out

4) Tìm hiểu đặc tính biên tần và thiết kế bộ lọc thông dải đơn giản cho tín hiệu

5) Lập trình giao diện GUI đơn giản bằng MATLAB

II Mô phỏng :

1) Xử lý tín hiệu được lấy từ tập tin có sẵn :

 Trong phần này, ta sẽ tiến hành áp dụng những hiệu ứng lên

đoạn âm thanh có sẵn và mô phỏng các dạng âm thanh đó :

Code

[data,fs]= audioread ( '999hoa.mp3' ); % Lấy tín hiệu audio từ tập tin có sẵn

b = data; % Gán biến b bằng biến data

rev_b = flipud(b); % Hàm đảo ngược các phần tử trong tín hiệu, rev_b sẽ là đảo ngược của tín hiệu b

sound(b,fs); % Chạy bài nhạc b với tần số fs

Trang 10

sound(rev_b,fs); % Chạy bài nhạc rev_b với tần số fs

% Vẽ đồ thị biểu thị mối quan hệ giữa biên độ và thời gian

time = (1/fs)*length(b); % Tạo biến time

t = linspace(0,time,length(b)); % Lấy length(b) điểm cách đều nhau trong khoảng từ 0 đến time

subplot(2,1,1);

plot(t,b);

xlabel( 'time(sec)' );

ylabel( 'Signal Strength' );

title( 'Original Audio' );

subplot(2,1,2);

plot(t,rev_b);

xlabel( 'time(sec)' );

ylabel( 'Signal Strength' );

title( 'Reversed Audio' );

Trang 11

sound (b,2*fs); % Tăng tốc độ chơi nhạc

sound (2*b,fs); % Tăng âm lượng của đoạn nhạc

sound (b,0.5*fs); % giảm tốc độ chơi nhạc

% Tạo hiệu ứng echo cho đoạn âm thanh

L = size(data); % Xác định kích thước của file âm thanh

a = 0.2; % Trọng số bất kì

delay = 2; % Thời gian delay

D = delay*fs; % Số mẫu sẽ bị delay

y = zeros(L); % Tạo tín hiệu y mới có cùng kích thước với tín hiệu gốc L, có giá trị bằng 0

for i = D+1 : 1 : L; % i chạy từ D+1 đến L, bước chạy

ylabel( 'Signal Strength' );

title( 'Echo Signal' );

Trang 12

2) Xử lý tín hiệu từ tập tin ghi âm trực tiếp :

 Trong phần này ta sẽ tiến hành ghi âm một đoạn âm thanh trực tiếp từ micro của thiết bị và sẽ xử lý các âm thanh đó :

 Code

% Ghi âm một đoạn âm thanh bất kì

dev = audiodevinfo;

rec = audiorecorder (44100, 16, 1); % tạo 1 hàm ghi âm

disp ( 'start speaking' );

recordblocking (rec, 5); %lưu file trong vòng 5s

disp ( 'End of recording' );

play(rec); % chạy đoạn ghi âm

y = getaudiodata (rec); % để biêt được biên độ

sound (y,44100); % phát đoạn âm thanh

filename = 'ghiam.wav' ; % đặt tên đoạn ghi âm

Trang 13

audiowrite(filename,y,44100); % lưu file ghi âm từ y

 Khi ta thay đổi tần số lấy mẫu Fs sẽ ảnh hưởng trực tiếp đến tín hiệu thu được như sau :

 Nếu tần số lấy mẫu quá nhỏ, thì trong quá trình xử lý, tín hiệu bị mất âm, không rõ ràng, tốc độ phát của đoạn tín hiệu đó sẽ nhanh hơn, gây khó nghe

 Nếu tần số lấy mẫu lớn, thì trong quá trình xử lý, tín hiệu

đó sẽ được xử lý kĩ hơn, nên tốc độ phát sẽ chậm hơn, nhưng không đáng kể

% Biến đổi Fourier :

 Biến đổi tín hiệu từ miền thời gian sang miền tần số để phân biệt tín hiệu cần lấy và nhiễu rõ ràng hơn

 Tín hiệu biểu diễn trên miền thời gian không phản ánh hết được đặc trưng của của tín hiệu

 Code :

% Đọc 1 tệp âm thanh đã được ghi âm sẵn:

[data,fs]=audioread( 'ghiam1.wav' ) % đọc file ghi âm

plot(data) % vẽ tín hiệu data

title( 'Tin hieu tren mien thoi gian' ) xlabel( 't(thoi gian)' )

ylabel( 'bien do' )

Trang 14

 Tín hiệu trên là được biểu diễn ở miền thời gian

 Tín hiệu ở miền thời gian không phản ánh hết được đặc trưng của tín hiệu và không thấy được rõ tín hiệu cần và nhiễu -> Chuyển qua

P2 = abs(Y/L); % lấy giá trị tuyệt đối của biến P2

P1 = P2(1:L/2+1); % tín giá trị P1 dựa vào P2 và L

a = fs*(0:(L/2))/L; % tính giá trị biến a

plot(a,P1) % vẽ đồ thị a

title( 'tin hieu da chuyen doi qua mien tan so ' )

xlabel( 'Tan so' )

ylabel( 'Bien do' )

Trang 15

% Loại bỏ nhiễu khỏi tín hiệu :

close all, clear all;

[data,fs]=audioread('ghiam.wav') % Đọc 1 file âm thanh đã có sẵn

plot(data) % vẽ đồ thị

sound(data,fs) % phát file âm thanh

xlabel('thoi gian t')

ylabel(' Bien do')

title('Tin hieu khi chua duoc loc nhieu')

Trang 16

 Tín hiệu trên là tín hiệu chưa được lọc nhiễu, tiếp theo ta sẽ tiến

hành lọc nhiễu cho tín hiệu này

 Code:

time_duration=0.05; % time of frame

n=time_duration*fs; % số mẫu trong 0.05s của frame

N_frame=floor(length(data)/n); % số frame trong đoạn

dữ liệu

nguong=0.05; % để so sánh với frame

new=zeros(length(data),l); % tạo mảng các số 0 từ độ dài data

for i=1:N_frame % đặt i từ 1 đến N_frame

frame=data((i-1)*n+1:i*n); % giá trị frame dựa vào biến data

giatri=max(frame); % đặt giá trị bằng giá trị max của frame

Trang 17

hold on % vẽ hai đồ thị trên 1 khung

plot(new,'r') % vẽ đồ thị bằng màu đỏ

xlabel('thoi gian t')

ylabel(' Bien do')

title('Tin hieu sau khi duoc loc nhieu')

sound(new,fs); % phát đoạn âm thanh từ biến new

 Ta có thể thấy kết quả là vẫn còn 1 phần nhỏ nhiễu chưa được lọc hoàn toàn

Trang 18

 Vẫn còn một ít nhiễu nhưng không đáng kể Lí do là do khung frame khi chúng chọn thì phần nhiễu chưa được lọc thuộc khung frame với tín hiệu cần mà chương trình của chúng ta là so sánh giá trị cao nhất trong 1 khung frame với ngưỡng nên khi đó nhiễu chưa được lọc hết

Trang 19

 Tín hiệu cực đại ở 1 miền tần số nhất định nên chúng ta có thể dùng

bộ lọc để lọc phần tần số cực đại để loại bỏ phần nhiễu không mong muốn

 Kỹ thuật frame by frame để xóa nhiễu : chia đoạn tín hiệu thành các đoạn nhỏ

 Các đoạn noise có độ dài rất là nhỏ cỡ 0.05s Các frame càng nhỏ thì

tỉ lệ xóa nhiễu càng cao

 Ta sẽ so sánh biên độ của các frame với 1 ngưỡng nhất đinh nào đó Các giá trị nào hơn ngưỡng thì ta sẽ cho nó thành silient noise và chỉ nghe được tín hiệu cần lấy

3) Ghép các âm thanh đơn lẻ thành một đoạn âm thanh hoàn chỉnh

và hiệu ứng Fade in Fade out

 Trong phần này, ta sẽ tiến hành tạo một đoạn nhac bằng cách ghép các file âm thanh riêng lẻ, cụ thể là tiếng drum và tiếng guitar

 Code :

[drum,fs]= audioread ( 'drum14.mp3' );

% Ma trận drum hiện tại có n hàng 2 cột, cần phải chuyển về n hàng 1 cột để xử lý

Trang 20

 Hiệu ứng Fade in : Ta sẽ sử dụng hàm ramp là một hàm tuyến tính,

có giá trị tăng từ 0 đến giá trị t

Hàm ramp được biểu diễn như sau :

Trang 21

audio = mix.*ramp1; % Nhân hai ma trận với nhau tạo

thành hiệu ứng fade in

plot(audio, 'r' );

sound(audio,fs);

 Hiệu ứng Fade out : Sử dụng hàm flipud để tạo hiệu ứng này Vì

hàm flipud chỉ có tác dụng với ma trận cột, nên ta sẽ dùng fipud đối

Trang 22

 Các thông số :

4) Tìm hiểu đặc tính biên tần và thiết kế bộ lọc thông dải đơn giản

cho tín hiệu

 Trong phần này, ta sẽ tiến hành tạo một tín hiệu gốc, sau đó thêm

nhiễu vào tín hiệu đó và vẽ chúng trên miền thời gian Từ đó, ta sẽ

biến đổi qua miền tần số để xác định được khoảng tín hiệu mà chúng

ta cần phải giữ lại hoặc bỏ đi, sau đó xem đặc tính biên tần của tín

hiệu và từ đó thiết kế một bộ lọc dải đơn giản để lọc tín hiệu

 Code :

Fs=500 ; % Tần số lấy mẫu

Ngày đăng: 20/03/2020, 23:22

TỪ KHÓA LIÊN QUAN

w