1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo Tìm tần số cơ bản tín hiệu tiếng nói sử dụng hàm tự tương quan (9 điểm)

13 1,4K 8

Đ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 13
Dung lượng 1,11 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

TÌ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 2

Mụ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 3

I ĐẶ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 4

Trong đó 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 5

C 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 6

end

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 8

F0tb = 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 9

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

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ị)

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 11

Hì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 12

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 â )

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

Ngày đăng: 06/12/2018, 16:35

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w