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 2BẢ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 3MỤ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 4LỜ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 5CHƯƠ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 6cá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 7V 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 8nguồ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 9CHƯƠ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 10sound(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 11sound (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 13audiowrite(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 17hold 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 21audio = 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