Tìm tần số cơ bản của tín hiệu tiếng nói, miền tần số, miền thời gian, hàm tự tương quan, phân tích phổ fft, xcorTìm tần số cơ bản của tín hiệu là bài toán cần thiết trong xử lý tín hiệu âm thanh vì nó mang thông tin có ý nghĩa vật lý đặc trưng cho tín hiệu tuần hoàn. Bài báo cáo này thực hiện việc cài đặt thuật toán tìm tần số cơ bản của tín hiệu tiếng nói trên miền thời gian và miền tần số. Để làm trơn đường tần số cơ bản thu được chúng tôi xử dụng thuật toán lọc trung vị .
Trang 1TÌM TẦN SỐ CƠ BẢN CỦA TIẾNG NÓI
Trần Văn Dương, Lê Văn Anh, Nguyễn Đức Hoàng, Nguyễn Hoàng Phúc
Nhóm 4, lớp 16TCLC2
Nguyễn Đức
Hoàng
Tìm hiểu và viết báo cáo việc kết hợp với median smoothing (lọc trung vị) để làm trơn kết quả tính F0 thu được (Phần II.A, III.A) Trần Văn Dương
(Nhóm trưởng)
Tìm hiểu, cài đặt và viết báo cáo thuật toán tự động tính F0 trên miền thời gian dùng hàm tự tương quan (Phần II.B, III B và IV.A)
Lê Văn Anh Tìm hiểu, cài đặt và viết báo cáo tính F0 trên
miền tần số (Phần II.C, III.C và IV.B) Nguyễn Hoàng
Phúc
Khảo sát ảnh hưởng khi dùng hàm cửa sổ và tính số điểm FFT khi phân tích phổ (Phần II.D,
III.D)
Lời cam đoan: Chúng tôi, gồm các sinh viên có chữ ký ở trên, cam đoan rằng báo cáo này là
do chúng tôi tự viết dựa trên các tài liệu tham khảo ghi rõ trong phần VII Các số liệu thực nghiệm
và mã nguồn chương trình nếu không chỉ dẫn nguồn tham khảo đều do chúng tôi tự làm Nếu vi
phạm thì chúng tôi xin chịu trách nhiệm và tuân theo xử lý của giáo viên hướng dẫn
TÓM TẮT— Tìm tần số cơ bản của tín hiệu là bài toán cần thiết trong xử lý tín hiệu âm
thanh vì nó mang thông tin có ý nghĩa vật lý đặc trưng cho tín hiệu tuần hoàn Bài báo cáo này thực hiện việc cài đặt thuật toán tìm tần số cơ bản của tín hiệu tiếng nói trên miền thời gian và miền tần
số Để làm trơn đường tần số cơ bản thu được chúng tôi xử dụng thuật toán lọc trung vị
Từ khóa— tần số cơ bản của tiếng nói, miền tần số, miền thời gian, hàm tự tương quan, lọc
trung vị, phân tích phổ
Trang 2Mục lục
I ĐẶT VẤN ĐỀ 3
II LÝ THUYẾT XỬ LÍ TÍN HIỆU TIẾNG NÓI VÀ CÁC THUẬT TOÁN 3
A. Thuật toán lọc trung vị để làm trơn F0 thu được: 3
1 Cơ sở lý thuyết: 3
2 Các tham số của bộ lọc trung vị 3
3 Vấn đề phát sinh: 3
B. Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan: 3
1 Giới thiệu hàm tự tương quan: 3
2 Sơ đồ thuật toán: 4
C. Thuật toán tính tần số cơ bản trên miền tần số: 5
D. Khảo sát ảnh hưởng khi dùng hàm cửa sổ và tính số điểm FFT khi phân tích phổ: 5
III CÀI ĐẶT CÁC THUẬT TOÁN 5
A. Thuật toán lọc trung vị để làm trơn F0 5
B. Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan 5
1 Định nghĩa các hàm tự code: 5
2 Phần thuật toán chính (Main.m): 8
C. Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan 9
D. Khảo sát ảnh hưởng khi dùng hàm cửa sổ và tính số điểm FFT khi phân tích phổ: 9
IV KẾT QUẢ THỰC NGHIỆM 9
A Tìm tần số cơ bản trên miền thời gian: 9
1 Yếu tố ảnh hưởng đến thuật toán và mức độ ảnh hưởng: 9
2 Kết quả về các tường hợp tốt nhất, trung bình và xấu nhất (có lọc trung vị) 10
3 Sai số của thuật toán: 11
B. Thuật toán tính tần số cơ bản trên miền tần số 13
V KẾT LUẬN 13
VI NHỮNG ĐIỀU ĐÃ HỌC ĐƯỢC 13
VII TÀI LIỆU THAM KHẢO 13
Trang 3I ĐẶT VẤN ĐỀ
Tần số cơ bản (còn gọi là F0 hoặc cao độ) của một tín hiệu tuần hoàn bằng nghịch đảo của chu kỳ tín hiệu
đó [1] Chu kỳ được xác định bằng khoảng thời gian ngắn nhất mà tín hiệu lặp lại trên miền thời gian
Thuật toán tìm cao độ của tín hiệu dùng hàm tự tương quan là một trong những thuật toán thông dụng, sử dụng miền thời gian để tìm ra chu kỳ của tín hiệu [1] Thuật toán này tìm giá trị lớn nhất của hàm tự tương quan trên một mẫu tín hiện xác định, từ đó suy ra được tần số cơ bản cần tìm
Trong thuật toán trên, Chúng tôi dùng hàm nội suy cubic spline để tìm một điểm có giá trị lớn nhất mới Điểm mới này có độ trễ không phải là số nguyên nên tăng độ chính xác của thuật toán
Bài báo có bố cục như sau Phần II trình bày cơ sở lí thuyết và các thuật toán Phần III cài đặt các thuật toán Phần IV trình bày kết quả thực nghiệm của các thuật toán Phần V là kết luận Phần VI trình bày những gì đã học được Và cuối cùng phần VII là tài liệu kham khảo
II LÝ THUYẾT XỬ LÍ TÍN HIỆU TIẾNG NÓI VÀ CÁC THUẬT TOÁN
Xử lý tiếng nói là sự nghiên cứu tiếng nói của con người dưới dạng tín hiệu, và các phương pháp xử lý những tín hiệu này Tín hiệu tiếng nói thường được thể hiện dưới dạng số, tức là được “số hóa”, và do đó, xử lý tiếng nói có thể được coi là giao của “xử lý tín hiệu số” và “xử lý ngôn ngữ tự nhiên” [2]
A Thuật toán lọc trung vị để làm trơn F 0 thu được:
1 Cơ sở lý thuyết:
Median Filter là một bộ lọc phi tuyến, thường được sử dụng để loại bỏ nhiễu , làm trơn tín hiệu Ý tưởng sắp xếp các giá trị của tín hiệu trong mảng lọc theo thứ tự tăng hoặc giảm dần so với trung vị Kích thước của cửa sổ lọc được chọn sao cho số giá trị tín hiệu trong cửa sổ đó là lẻ [3]
Hình 1 Cách thức hoạt động của lọc trung vị
Giả sử A = {a1, a2, a3,… ,ak} là các giá trị tín hiệu trong cửa sổ lân cận với a1< a2 < … <ak
Thì Median(A) = {
Ví dụ A = {0, 1, 2, 4, 6, 6, 10, 12, 15} -> Median(A) = 6
2 Các tham số của bộ lọc trung vị
y = medfilt1(x,n) áp dụng bộ lọc trung gian bậc n cho tín hiệu vào x
n: bậc của bộ lọc là 1 số nguyên
Khi n lẻ y(k) là số trung vị của x(k-(n-1)/2):k+(n-1)/2)
Khi n chẳn y(k) là số trung vị của x(k-n/2:k+(n/2)-1)
3 Vấn đề phát sinh:
Tín hiệu không ổn định dẫn đến hàm lọc xử lý không tốt
B Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan:
1 Giới thiệu hàm tự tương quan:
Hàm tự tương quan thường được sử dụng như một công cụ để xác định tính chu kỳ của tín hiệu và nó cũng
là cơ sở cho nhiều phương pháp phân tích phổ khác Hàm tự tương quan được định nghĩa tương tự như hàm tự tương quan thông thường
Hàm tự tương quan của tín hiệu rời rạc được định nghĩa như sau
( ) ∑
( )
Trang 4Trong đó xj là tín hiệu tại thời điểm j, t (𝜏) là hàm tự tương quan với độ trễ (lag) 𝜏 được tính tại thời điểm
t, và W là độ dài của cửa sổ tín hiệ
Hình 2 Hàm tự tương quan của một tín hiệu
Nếu tín hiệu là tuần hoàn thì hàm tự tương quan sẽ cho ra các đỉnh tại những thời điểm là bội số của chu kỳ tín hiệu Chọn ra một đỉnh cao nhất ở hàm tự tương quan bằng cách xét hết toàn bộ các giá trị của độ trễ 𝜏 > 0, ta gọi đó là 𝜏max
Vì với tín hiệu tiếng nói thì tần số cả lẫn nam và nữ nằm trong khoảng từ 80 Hz đến 400 Hz nên giới hạn của độ trễ sẽ
từ
đến
Hình 3 Xác định 𝜏max
Ta có công thức tính tần số cơ bản của tín hiệu:
2 Sơ đồ thuật toán:
Tín hiệu đầu vào
↓
Bước 1: Tách vùng tín hiệu theo biên độ
↓
Bước 2: Phân tích tín hiệu thành từng khung, mỗi khung 30 ms
↓
Bước 3: Tính toán hàm tự tương quan với
mỗi khung tín hiệu
↓
Bước 4: Tìm cực đại các hàm tự tương quan, suy ra F0 tính được ứng với mỗi
khung tín hiệu
↓
Đường F0
Hình 4 Sơ đồ thuật toán tính tần số cơ bản trên miền thời gian
Trang 5C Thuật toán tính tần số cơ bản trên miền tần số:
D Khảo sát ảnh hưởng khi dùng hàm cửa sổ và tính số điểm FFT khi phân tích phổ:
A Thuật toán lọc trung vị để làm trơn F 0
y = audioread('D:\HocTap\XLTHS\TaiLieu\forStudents\BaiTH\sample.wav');
clf;hold on
figure(1);
plot(yMedFilt);
figure(2);
plot(y);
figure(3);
clf;hold on; plot(y);
plot(yMedFilt);
legend('original signal','median filter');
Hình 5 Kết quả khi lọc trung vị
B Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan
1 Định nghĩa các hàm tự code:
a) Hàm audioread2:
function [y,t,Fs] = audioread2(file)
% doc tin hieu doc vao tu file tra ve 3 tham so y, t, Fs
% -% [y,t,Fs] = audioread2(file)
% y: tin hieu sau khi doc file
% t: truc thoi gian
% Fs: tan so lay mau
%
Trang 6end
b) Hàm TachVungTinHieuTheoBienDo:
function [Y_TuanHoan, t_TuanHoan] = TachVungTinHieuTheoBienDo(y,t,A)
% tra ve vung tin hieu tuan hoan
%
-% Y_TuanHoan = tin hieu trong vung tuan hoan
% t_TuanHoan = truc thoi gian cua tin Y_TuanHoan
% y = tin hieu dau vao
% t = truc thoi gian cua y
% A = bien do de xac dinh vung tuan hoan
%
dau = 1;
cuoi = dodai;
% xac dinh vi tri dau cua vung tuan hoan
for i = 1:dodai
if abs(y(i))>A
dau = i;
break;
end
end
%
-% xac dinh vi tri cuoi cua vung tuan hoan
for i = dodai:-1:1
if abs(y(i))>A
cuoi = i;
break;
end
end
%
end
c) Hàm TachThanhCacKhungTinHieu:
function [y,t,SoKhung] = TachThanhCacKhungTinHieu(y0,t0,Fs)
% ham tra ve tat cac khung tin hieu 30ms, voi cac khung dan xen nhau
%
-% [y,t,SoKhung] = TachThanhCacKhungTinHieu(y0,t0,Fs)
% y = ma tran MxN, voi M: so diem tung khung tin hieu 30ms, N: so khung
% t = ma tran NxM, tuong ung la truc thoi gian cua tung khung 30ms
% y0 = tin hieu dau vao
% t0 = truc thoi gian cua y0
% Fs = tan so lay mau cua y0
%
L = length(y0); % xac dinh do dai cua y0;
y = []; % khoi tao ma tran rong (0x0)
t = []; % khoi tao ma tran rong (0x0)
a = 1; b = SoDiemTrong1Khung;
% xac dinh vi tri dau va cuoi cua khung tin hieu 30ms dau tien
while b<=L
a = b-floor(0.02*Fs); b = a+SoDiemTrong1Khung-1;
% xac dinh vi tri dau va cuoi cua khung tin hieu 30ms dau tien
end
end
d) Hàm HamTuTuongQuan:
function [y,lag] = HamTuTuongQuan(tinhieu)
% ham tra ve ham tu tuong quan cua tin hieu dau vao (tinhieu)
%
Trang 7-% [y,lag] = HamTuTuongQuan(tinhieu)
% y = ham tu tuong quan cua tin hieu dau vao
% lag = truc do tre (lag) cua y
% tinhieu = tin hieu dau vao de tim ham tu tuong quan
%
for k = lag
tong = 0;% khoi tao lai gia tri 0
for j = 1:dodai
if 1<=j+k && j+k<=dodai
B = tinhieu(j+k);
end
tong = tong + tinhieu(j)*B;
end
end
end
e) Hàm XacDinhDuongF0:
function [F0,tF0,RMSE] = XacDinhDuongF0(y2,t2,SoKhung,Fs,F0chuan)
% xac dinh duong F0 tu tat ca cac khung tin hieu 30ms
% tra ve sai so toan phuong trung binh RMSE
%
-% F0 = duong tan so co ban F0
% tF0 = truc cua F0 tren do thi
% RMSE = sai so toan phuong trung binh
% y2 = ma tran MxN, chua tat cac cac khung tin hieu 30ms
% t2 = ma tran NxM, chua truc thoi gian tung khung tin hieu 30ms
% Fs = tan so lay mau
% F0chuan = tan so co ban F0 chuan do thu cong
%
tF0 = []; % khoi tao ma tran rong (0x0)
F0 = []; % khoi tao ma tran rong (0x0)
for i = 1:SoKhung
[F00,Yttq,lag,lagmax] = TinhTanSoCoBan_SDHTTQ(y2(:,i),Fs);
tF0 = [tF0 t2(i,floor((1+length(t2(i,:)))/2))];
% xac dinh truc F0 tren do thi
end
end
f) Hàm XacDinhRMSE_TanSoF0:
function [RMSE,F0tb] = XacDinhRMSE_TanSoF0(F0,F0chuan)
% tra ve RMSE cua duong tan so co ban F0
%
-% [RMSE,F0tb] = XacDinhRMSE_TanSoF0(F0,F0chuan)
% RMSE = sai so toan phuong trung binh
% F0tb = Tan so co ban trung binh
% F0 = duong tan so co ban
% F0chuan = tan so co ban chuan do thu cong
%
L = 1:length(F0); % xac dinh do dai duong F0
Sum = 0; % khoi tao gia tri bang 0
Dem=0; % bien dem so luong F0 xac dinh
F0tb=0;
for i=L
if (F0(i)>0)
Dem = Dem+1;
Trang 8F0tb = F0tb+F0(i);
end
end
end
g) Hàm TinhTanSoCoBan_SDHTTQ:
function [F0,Yttq,lag,lagmax] = TinhTanSoCoBan_SDHTTQ(TinHieu,Fs)
% tinh tan so co ban
% tra ve ham tu tuong quan voi cac do tre (lag) khac nhau,
% tra ve do tre (lag) tai do dinh cao nhat thoa man 80<=F0<=400
%
-% F0 = tan so co ban ma thuat toan xac dinh duoc
% Yttq = ham tu tuong quan cua tin hieu dau vao
% lag = truc do tre (lag) cua Yttq
% lagmax = do tre (lag) tai do dinh cao nhat thoa man 80<=F0<=400
%
% kiem tra tin hieu vao co tuan hoan khong?
if Yttq(int32((1+length(lag))/2)) <10
return
end
% -% su dung noi suy cubic spline
-L = max(lag);
lag2 = -L:0.1:L;
Yttq = spline(lag,Yttq,lag2);
lag = lag2;
%
-% tim kiem do tre co dinh lon nhat (Fs/400 < dotre <Fs/80)
L = length(lag);
ViTriBatDauDuyet = int32((1+L)/2);
% xac dinh vi tri bat dau duyet (o giua cua do thi tu tuong quan)
% xac dinh F0
-YttqMax = -1;
for i = ViTriBatDauDuyet:L
if Yttq(i)>YttqMax && a<=lag2(i) && lag2(i)<=b
YttqMax = Yttq(i);
lagmax = i;
end
end
%
-end
2 Phần thuật toán chính (Main.m):
F0chuan = 131.58;
[y,t,Fs] = audioread2("C:\Users\Hoang\u.wav");% doc tin hieu dau vao
hieu theo bien do
vung tinh hieu thanh nhieu khung tin hieu 30ms
xac dinh duong F0
co ban F0 trung binh
% ve minh hoa
subplot(3,1,1); plot(t,y);
Trang 9hold on; plot(t1,y1);
title("Tin hieu ban dau");
xlabel("Thoi gian (s)");ylabel("Bien do");
subplot(3,1,2); plot(t1,y1);
title("Tin hieu sau khi tach theo bien do");
xlabel("Thoi gian (s)");ylabel("Bien do");
subplot(3,1,3); plot(tF0,F0,"*");
title("Duong bieu dien tan so co ban");
xlabel("Thoi gian (s)"); ylabel("F_0 (Hz)");
C Thuật toán tính tần số cơ bản trên miền thời gian sử dụng hàm tự tương quan
D Khảo sát ảnh hưởng khi dùng hàm cửa sổ và tính số điểm FFT khi phân tích phổ:
A Tìm tần số cơ bản trên miền thời gian:
1 Yếu tố ảnh hưởng đến thuật toán và mức độ ảnh hưởng:
a) Yếu tố ảnh hưởng:
Ở bước 1, hàm TachVungTinHieuTheoBienDo sử dụng biên độ hai đầu để tách vùng tín hiệu, tại một thời điểm trong khoảng lặng khi biên độ tín hiệu cao đột biến, hàm s xác định sai vùng tín hiệu cần tách
Hình 6 Trường hợp hàm TachVungTinHieuTheoBienDo xác định sai
b) Mức độ ảnh hưởng:
Không đáng kể vì sau khi vùng tách sai ở trên được chia thành nhiều khung tín hiệu 30ms Sau đó truyền vào TinhTanSoCoBan_SDHTTQ để tính tần số cơ bản thì trong hàm lại tiếp tục bước kiểm tra khung 30 ms nếu khung không tuần hoàn thì trả về Fo không xác định
Trang 102 Kết quả về các tường hợp tốt nhất, trung bình và xấu nhất (có lọc trung vị)
Hình 7 Trường hợp tốt nhất (âm /u/ của Nguyễn Đức Hoàng)
Hình 8 Trường hợp trung bình (âm /u/ của Nguyễn Hoàng Phúc)
Trang 11Hình 9 Trường hợp xấu (âm /i/ của Lê Văn Anh)
Nhận xét:
Trường hợp tốt nhất, như ta thấy trên hình các điểm biếu diễn F0 có giá trị gần bằng nhau (sấp sĩ 130 Hz)
Trường hợp trung bình trục tần số dao động trong khoảng xác định [125, 132]
Trường hợp xấu nhất, thuật toán của ta tính được giá trị F0 khá lớn (180 Hz) hoặc khá nhỏ (100 Hz) Nguyên nhân là do chu kỳ của tín hiệu trên miền thời gian biến đổi phức tạp, các đỉnh không rõ ràng nên dẫn tới việc không cho ra kết quả F0 như thực nghiệm
3 Sai số của thuật toán [4]:
Công thức xác định RMSE mỗi âm (Với n là số frame trong mỗi tín hiệu):
S â ∑( )
Sai số toàn phương trung bình (RMSE) của thuật toán:
S
0∑( S â )
Bảng 1 Thống kê tần số chuẩn đo thủ công và tần số được tính từ thuật toán tính tần số cơ bản trên miền thời gian không kết hợp
lọc trung vị và tính RMSE
Giá trị trung bình
Lê Văn Anh
F0 chuẩn
F0 thuật toán
Nguyễn Đức
Hoàng
F0 chuẩn
F0 thuật toán
Nguyễn Hoàng
Phúc
F0 chuẩn
F0 thuật toán
Trang 12Trần Văn Dương
F0 chuẩn
F0 thuật toán
Sai số toàn
phương trung
bình (RMSE) của
thuật toán
S
0∑( S â )
.0
Nhận xét:
Sai số toàn phương trung bình (RMSE) của thuật toán là 21.07
Khi tần số cơ bản tăng: sai số tăng
RMSE của thuật toán đối với âm /o/ của sinh viên Lê Văn Anh là cao nhất 88.40
RMSE của thuật toán đối với âm /u/ của sinh viên Nguyễn Đức Hoàng là thấp nhất 1.19
Bảng 2 Thống kê tần số chuẩn đo thủ công và tần số được tính từ thuật toán tính tần số cơ bản trên miền thời gian kết hợp lọc trung
vị và tính RMSE
Giá trị trung bình
Lê Văn Anh
F0 chuẩn
F0 thuật toán
Nguyễn Đức
Hoàng
F0 chuẩn
F0 thuật toán
Nguyễn Hoàng
Phúc
F0 chuẩn
F0 thuật toán
Trần Văn Dương
F0 chuẩn
F0 thuật toán
Sai số toàn
phương trung
bình (RMSE) của
thuật toán
S
0∑( S â )
Nhận xét:
Sai số toàn phương trung bình (RMSE) của thuật toán sau khi lọc trung vị là 8.28 (giảm từ 21.07 xuồng còn 8.28)
Khi tần số cơ bản tăng: sai số tăng
RMSE của thuật toán đối với âm /o/ của sinh viên Lê Văn Anh là cao nhất 20.96
RMSE của thuật toán đối với âm /u/ của sinh viên Nguyễn Đức Hoàng là thấp nhất 1.37
4 Ưu điểm và nhược điểm: