Xây dựng bộ điều khiển và nhận dạng tiếng nói bằng sử lý tín hiệu số DSP 56002
Trang 1XỬ LÝ TÍN HIỆU TIẾNG NÓI
Chương trình này giới thiệu cụ thể về phép phân tích thời gian ngắn (Short-time Analysis) Tín hiệu được tách thành các frame dài N mẫu và mọi phép toán đều thực hiện trên frame đó mà thôi Đây là phương pháp phân tích cổ điển đối với các tín hiệu không dừng (non-stationary) như tín hiệu tiếng nói Khi đã chia thành các frame thì tín hiệu trên từng frame có thể được xem như là một tín hiệu dừng và mọi phép xử lý trên frame được áp dụng như là xử lý trên một tín hiệu dừng Sau khi thực hiện STFT trích được đặc trưng của tín hiệu tiếng nói sẽ dùng phương pháp kết hợp mẫu để nhận dạng tiếng nói.
I TRÍCH ĐẶC TRƯNG TIẾNG NÓI DÙNG PHÉP PHÂN TÍCH STFT
Sau khi đã số hoá tín hiệu, chúng ta bắt đầu trích đặc trưng tiếng nói của
một tiết như chu kỳ cao độ, formant nhưng trước hết là phải tách tín hiệu tiếng
nói khỏi nhiễu nền (khoảng im lặng) vì tín hiệu thu trong môi trường nhiễu nên khoảng im lặng chính là nhiễu Tất cả công việc trên đều có thể xử lý bằng phép phân tích thời gian ngắn (Short-time Analysis).
Trang 21 Các khái niệm
a) Frame : một frame tiếng nói fs(n,m) là tích của một cửa sổ được dịch w(m-n) với chuỗi tiếng nói s(n).
b) Năng lượng thời gian ngắn : hàm năng lượng thời gian ngắn
(short-time energy function) của tín hiệu tiếng nói có thể được tính bằng cách chia tín hiệu tiếng nói ra thành các khung, tức là các đoạn N mẫu liên tiếp và tính tổng bình phương của các mẫu tín hiệu này trong từng khung Việc chia tín hiệu ra thành các khung có thể được thực hiện bằng cách nhân tín hiệu đó với một hàm cửa sổ w(n) thích hợp với n=0,1,2…N-1 Hàm này sẽ có giá trị bằng 0 bên ngoài khoảng (0, N-1), thông thường các cửa sổ này là các cửa sổ chữ nhật có bề rộng từ 10 đến 20 ms Với một cửa sổ kết thúc tại mẫu thứ m, hàm năng lượng thời gian ngắn E(m) được xác định bởi:
∑∞ []
Đồ thị của hàm năng lượng thời gian ngắn của một đoạn tín hiệu được thể hiện trên hình 9.1 Ta thấy năng lượng của tín hiệu lớn hơn rất nhiều so với khoảng im lặng (có thể xem là nhiễu).
Hình 9.1
a) Tín hiệu b) Năng lượng thời gian ngắn
c) Tỷ lệ qua điểm zero (Zero-crossing rate):
Tỷ lệ này là một thông số cho biết số lần mà biên độ tín hiệu đi qua điểm zero trong một khoảng thời gian cho trước được xác định bởi:
Trang 3Trong đó, N là chiều dài của cửa sổ w(m-n).
d) Hàm tự tương quan thời gian ngắn :
Hình 9.2 Hàm tự tương quan của frame tương ứng khoảng cực đại của tín hiệu
Hàm tự tương quan (autocorrelation function) cho ta thông số về sự tương quan của tín hiệu với một phiên bản trễ của chính nó Hàm tự tương quan thời gian ngắn của frame kết thúc tại m:
Hình 9.2 là đồ thị hàm tự tương quan thời gian ngắn tương ứng khoảng cực đại của tín hiệu hình 9.1 a) sử dụng cửa sổ hình chữ nhật N=250 Nếu tín hiệu tuần hoàn thì hàm này cực đại khi khoảng trễ là bội số của chu kỳ cơ bản.
Trang 42 Phát hiện điểm đầu và cuối của một âm tiết dùng năng lượng frame
Một trong những vấn đề cơ bản nhất trong xử lý tiếng nói là việc xác định điểm đầu và điểm cuối của chuỗi tiếng nói được phát ra Đây là một khâu quan trọng trong quá trình nhận dạng mẫu tiếng nói sử dụng kiểu nhận dạng từ đơn (isolated-word) theo hướng phối hợp mẫu (Pattern Matching Approach) và được gọi là end-point detection Theo kiểu này, các âm tiết trong mẫu ghi âm sẽ được tách riêng và trích đặc trưng của từng âm tiết Việc phát hiện end-point rất khó thực hiện trong thực tế trừ trường hợp tỷ số tín hiệu trên nhiễu rất lớn.
Tín hiệu tiếng nói thu được thông qua các thiết bị ngoại vi luôn nằm giữa khoảng im lặng Việc ghi âm trong môi trường nhiễu nên khoảng im lặng còn gọi là nhiễu Năng lượng thời gian ngắn của các cửa sổ chứa tín hiệu có ích luôn lớn hơn nhiều so với đoạn chỉ có nhiễu Do đó, nếu chúng ta đặt ra một mức ngưỡng để phân biệt giữa frame chứa tín hiệu và frame chỉ gồm nhiễu thì đoạn chứa âm tiết sẽ được tách ra Vì thế, giải thuật phát hiện end-point dùng năng lượng frame như hình 9.3
Trước tiên, các frame nhiễu nền sẽ được thu thập liên tục trước khi ghi âm tín hiệu tiếng nói nhằm thiết lập ngưỡng nhiễu Ngưỡng này có thể xác định bằng bội số nào đó của năng lượng frame nhiễu lớn nhất Sau đó, ghi âm tín hiệu của một âm tiết trong khoảng thời gian đủ dài để âm tiết được thu trọn vẹn và tính năng lượng frame cho tín hiệu vừa ghi âm Dò từ đầu về cuối tín hiệu nếu frame nào có năng lượng lớn hơn ngưỡng chính là frame bắt đầu của tín hiệu và tiếp tục dò nếu frame có năng lượng nhỏ hơn ngưỡng (frame chứa nhiễu) thì đây là frame kết thúc của tín hiệu Cuối cùng xét tín hiệu vừa tách được có phải là nhiễu hay không bằng cách so sánh chiều dài này với chiều dài
Trang 5tối thiểu của một từ Nếu thỏa điều kiện này thì đây thật sự là âm tiết, ngược lại phải ghi âm lại.
Tính năng lượng frame của phần nhiễu N[k]
Ngưỡng nhiễu ThrNoise = a*max(N[k])
Ghi một âm tiết
Tính năng lượng các frame tín hiệu tiếng nói E[k]
N k = k+1
Chiều dài >ngưỡng?
Trang 6Hình 9.3 Giải thuật phát hiện điểm đầu và điểm cuối dùng năng lượng frame
Giá trị a từ 2-5%
Nhận xét :
Giải thuật này tuy đơn giản nhưng lại có nhiều nhược điểm Chúng ta
không thể xác định được điểm đầu và điểm cuối của một âm tiết vì nếu frame đầu được xác định chính xác thì điểm bắt đầu âm tiết có thể nằm ở vị trí nào đó trong frame này, dẫn đến độ sai lệch điểm đầu có thể bằng chiều dài frame N và tương tự cho điểm cuối Đó là trường hợp lý tưởng, còn nếu frame đầu xác định sai ( trong môi trường nhiễu dao động nên định mức ngưỡng nhiễu không chính xác), thì độ sai lệch sẽ là bội số của N vậy dùng năng lượng frame để phát hiện điểm đầu và cuối của từng âm tiết trong câu lệnh sẽ thiếu chính xác.
Lưu ý :
Công việc truy tìm frame đầu của tín hiệu tiếng nói có thể được xuất phát từ vị trí frame có năng lượng cực đại trên ngưỡng nhiễu (trong đoạn tín hiệu thực sự) Thực hiện theo cách này sẽ tăng thời gian xử lý nhưng hệ thống thiếu tính thực tế vì tín hiệu được thu xong mới tiến hành endpoint detection Vì vậy, mục đích của người thiết kế giải thuật là tạo cho giải thuật có tính thực tế cao bởi vì bộ cảm biến (cụ thể ở trường hợp này là micro) của hệ thống điều khiển chỉ cần thăm dò và kiểm tra một frame tín hiệu (khoảng 10-20ms) trên ngưỡng nhiễu là biết có tín hiệu tiếng nói thu vào hay chưa Từ đó có thể thực hiện các công việc song song khác như vừa truy tìm tín hiệu vừa tính STFT để thu được phổ cục bộ Như vậy kết thúc endpoint detection cũng là kết thúc công việc nhận dạng.
Một nổ lực khác để khắc phục nhược điểm trên khi tín hiệu tiếng nói được
thu trong môi trường nhiễu cao là kết hợp năng lượng frame và tỷ lệ qua điểm zero với nhận xét: bản chất của “nhiễu” là tín hiệu ngẫu nhiên nên tỷ lệ qua
Trang 7điểm zero sẽ lớn trong miền nhiễu và nhỏ trong miền tín hiệu Trong khi năng lượng frame lại lớn trong miền tín hiệu và nhỏ trong miền nhiễu Nếu kết hợp cả
năng lượng frame và zero-crossing thì chúng ta tận dụng được cả tính chất của tín hiệu và nhiễu.
Tuy nhiên nổ lực này vẫn không cải thiện hiệu quả cho lắm vì chúng ta phải dùng đến hai mức ngưỡng cho năng lượng frame và zero-crossing
Hình 9.4
(a,b) Tín hiệu và năng lượng của từ ‘LEFT’ trước khi tách khỏi khoảng nhiễu (c,d) Tín hiệu và năng lượng của từ ‘LEFT’ sau khi tách khỏi khoảng nhiễu
3 Trích formant dùng phép biến đổi STFT
Tiếng nói là tín hiệu không dừng (nonstationary signal) gồm nhiều thành phần Về mặt toán học, một đoạn tiếng nói được biểu diễn với độ chính xác cao trong không gian Hilbert là tổng của các hàm mũ:
Trang 8i iN
i t()e t()A
Trong đó, {Ai(t)} và {φi(t)} lần lượt là tập biên độ và pha tức thời của N thành phần tần số của tín hiệu Tần số góc tức thời của ηi(t) là
)t(d)t( = φφ
Thực hiện STFT đối với tín hiệu S(t) trong biểu thức (9.5), ta được:
= F( )G ( )d2
và tính chất dịch theo thời gian, định lý điều chế của biến đổi Fourier vào (9.7) ta thu được :
τω ∫
() [ ] ω
−τπ
−∫F w(t )e FS(t)d2
[ ω′−ω ] ω′ ω′π
= ∞∫
ω′ .S( )d
∞−ωτ−
Trang 9trong lân cận của các ωi, tạo thành các ridge của STFT (hình 9.7) Điểm cực đại của các ridge chính là tần số ωi.
Hình 9.5 Biểu diễn phổ của tín hiệu và phổ của hàm cửa sổ tại t=τ
STFT chuyển tín hiệu một chiều thành hàm hai biến ωvàτ Do đó, kết quả của STFT là một ảnh biểu diễn các thành phần tần số của tín hiệu theo thời
gian Hình ảnh này được gọi là spectralgram.
Từ kết quả phân tích trên, chúng ta thu được các ridges tương ứng với các
tần số tức thời trong tín hiệu mà có biên độ tương đối lớn Nếu xem mỗi thành
phần tần số này là một formant thì đỉnh của các ridges chính là hình ảnh của các formant trong tín hiệu tiếng nói.
Hình 9.7c cho phép chúng ta rút
ra kết luận là đỉnh của các ridges chính
là cực đại địa phương của module STFT tính theo hướng tần số Như vậy nếu tính được cực đại địa phương module của phép biển đổi STFT theo hướng tần số thì có thể thu được hình
ảnh biểu diễn các formant có trong tín
hiệu tiếng nói.
Như vậy, đặc trưng formant trong tín hiệu tiếng nói được trích ra từ dữ liệu STFT theo giải thuật tổng quát hình 9.6 Đầu tiên, tín hiệu tiếng nói của một âm
tiết sau khi qua endpoint detection được phân tích thời gian-tần số bằng STFT
để thu được các ridges tương ứng với các formant Sau đó, kết quả STFT được
lấy cực đại địa phương module (local maxima modulus) theo hướng tần số để
định vị chính xác vị trí của các formant Bước cuối cùng trong công việc trích các formant là lần theo vết của các cực đại địa phương để thu được giá trị của
ωωω 2
ω
Trang 10mỗi formant theo thời gian Để phục vụ cho mục đích nhận dạng, chỉ cần trích 3-5 formant là đủ để phân biệt các âm tiết với nhau.
Hình 9.6 Giải thuật tổng quát trích đặc trưng formant dùng STFT
Trích cực đạiđịa phươngtheo hướng
tần số
S[n]
Trang 11Hình 9.7 Spetralgram của tín hiệu
a)Tín hiệu gồm 3 thành phần tần số 200,500,700Hz liên tiếp nhau theo thời gian b)Biểu diễn STFT trong mặt phẳng thời gian tần số
c)Biểu diễn STFT trong không gian 3 chiều
Giải thuật trích cực đại hoá địa phương :
Sau khi tính STFT của tín hiệu tiếng nói, ta thu được một ma trận MPQ có P hàng ứng với P giá trị rời rạc tần số và Q cột tương ứng với Q giá trị rời rạc thời gian (Q= số frame) Mỗi phần tử M(i,j) của ma trận MPQ là một hệ số tương ứng tại điểm (i,j) của phép phân tích.
M M M
M M M
M M M
Định nghĩa: cực đại địa phương của STFT theo hướng tần số chính là các cực
đại địa phương trên mỗi cột của ma trận MPQ Một điểm (i,j) gọi là điểm cực đại
Trang 12địa phương nếu giá trị của nó lớn hơn giá trị của 2 điểm lân cận trên và dưới của cùng cột đó, nghĩa là :
M (i,j ) > M (i-1,j ) và M (i,j ) > M (i+1,j ) (9.10)Tuy nhiên, đây chỉ là định nghĩa mang tính lý thuyết Khi vận dụng vào bài toán cụ thể, chúng ta phải có một số hiệu chỉnh cho phù hợp Dựa vào hình ảnh spectralgram (hình 9.7c), ngoài các ridges thể hiện các formant thực sự, phần còn lại không bằng phẳng mà có những “gợn” nhấp nhô với biên độ nhỏ Nếu theo định nghĩa trên thì kết quả thu được là tổ hợp của một số điểm khác 0 có giá trị khá lớn thể hiện đường nét formant và các điểm khác 0 khác tương ứng với đỉnh của các “gợn”nhấp nhô đó, gây “nhiễu” cho kết quả phân tích Vì các điểm “nhiễu” này có giá trị khá nhỏ so với các điểm thể hiện đường nét formant nên cần đặt một mức ngưỡng để loại bỏ chúng Giá trị của mức ngưỡng phải vừa đủ cho hai mục đích: loại bỏ các điểm “nhiễu” và giữ lại tốt các điểm thể hiện formant có giá trị tương đối nhỏ.
Vậy điểm (i,j ) là điểm cực đại địa phương nếu thoả:
ngưỡng )
) j1,(iM )(i,M
) j1,-(iM )(i,M
Từ định nghĩa này, giải thuật trích cực đại địa phương khá đơn giản như
hình 9.8 Đầu tiên, tính ma trận MPQ bằng cách lấy module của kết quả phân tích tín hiệu tiếng nói bằng STFT Khởi động ma trận MPQ chứa dữ liệu local maxima với các giá trị đều bằng 0 Sau đó, từng điểm trên mỗi cột của ma trận MPQ sẽ được kiểm tra xem thoả mãn điều kiện (9.11) không Nếu thoả thì đây chính là điểm cực đại địa phương Giá trị của điểm này sẽ được gán cho các điểm tương ứng của ma trận APQ Như vậy, các điểm còn lại của APQ không phải là điểm cực đại địa phương đều có giá trị bằng 0.
A(i,j)=M(i,j)i = i+1
j = j+1
Hình 9.8 Giải thuật trích cực đại địa phươngN
Y
Trang 13Kết quả trích local maxima của từ “báo” được vẽ trên hình 9.9 Tín hiệu được lấy mẫu ở tần số Fs=8KHz và chiều dài của tín hiệu được giới hạn còn 1600 mẫu để tiện cho việc phối hợp mẫu khi nhận dạng.
Y
Trang 14Hình 9.9 Kết quả trích cực đại địa phương của từ ‘LEFT’
Giải thuật trích formant từ ma trận cực đại địa phương.
Sau khi thu được hình ảnh “tương đối” của formant trong trích tín hiệu tiếng nói từ giải thuật trích local maxima, chúng ta sẽ hoàn tất công việc trích formant bằng cách lần theo vết đen của các đường local maxima Ơû đây sử dụng hình ảnh “tương đối” bởi vì ảnh local maxima thu được không phải đơn thuần là các điểm thể hiện formant mà còn có cả nhiễu mặc dù đã đặt một mức ngưỡng để loại bỏ các điểm “nhiễu” này Đặc điểm của các điểm “nhiễu” là có giá trị nhỏ và không tạo thành các đường nét liên tục Do đó, các formant khởi đầu có thể được xác định bằng cách tìm các đường liên tục trong một khoảng có độ rộng nhất định ở giữa âm tiết (ở vị trí này, các formant thể hiện rõ nhất so với ở đầu và cuối âm tiết vì đây là đỉnh âm tiết).
Trang 15Mỗi điểm trên một formant có 2 thông số quan trọng cần phải
lấy được: giá trị (tần số)formant
có thể xem như hàng xuất hiện formant trên ma trận dữ liệu và
biên độ tức thời của formant tại
điểm đó, chính là giá trị của phần tử tương ứng trên ma trận dữ liệu Giải thuật trích formant từ local maxima cho phép thu được cả 2 thông số này
Hình 9.10 Giải thuật tổng quát trích formantHình 9.10 trình bày giải thuật trích formant tổng quát Đầu tiên cần xác định một khoảng truy tìm formant [t1,t2] ở giữa tín hiệu (t được tính bằng số frame) Khởi đầu việc truy tìm các formant được thực hiện bằng trong một khối gồm các cột từ t1 đến t2 trong ma trận dữ liệu local maxima APQ Cơ sở của việc tìm formant trong khối này là các điểm có giá trị khác 0 trên các cột Do có các điểm “nhiễu” nên số lượng điểm khác 0 trên một cột có thể nhiều hơn số lượng
Trang 16formant Tuy nhiên nếu số lượng điểm “nhiễu” không nhiều và các formant không bị đứt đoạn thì trong khối truy tìm sẽ có ít nhất một cột có số lượng điểm khác 0 nhỏ nhất, đây chính là số lượng formant có thể có Kí hiệu tc là vị trí cột tìm được, tc được xác định là điểm tốt nhất để bắt đầu trích formant Giá trị (tần số) và biên độ của từng formant ở điểm tc được xác định Từ cặp giá trị và biên độ ban đầu này, việc trích mỗi formant được tiếp tục bằng giải thuật hình 9.12.
Đầu tiên một ma trận có kích thước (2×Q) được khởi động với các phần tử đều bằng 0 để chuẩn bị chứa dữ liệu kết quả của một formant (hàng đầu chứa
giá trị và hàng thứ 2 chứa biên độ formant) Tại điểm tc, giá trị và biên độ ban
đầu được thiết lập theo giá trị đã xác định ở phần trước Từ điểm giữa tc, việc truy tìm formant được thực hiện theo 2 hướng: lần theo vết formant cho đến cuối tín hiệu (theo chiều tăng của t), và truy ngược về đầu tín hiệu (theo chiều giảm
của t) trong cả 2 hướng truy tìm, giá trị formant tại điểm tc được dùng như một
giá trị khởi đầu.
Hình 9.11 Minh họa khoảng truy tìm các formant [t1 t2] ở giữa tín hiệu
Formant tại điểm t được xác định nhờ giá trị ƒ của formant tại thời điểm
vừa tìm được trước đó (t-1 khi tìm theo chiều tăng hoặc t+1 khi tìm theo chiều giảm của t) Do đặc trưng của tiếng nói có các formant thay đổi chậm theo thời
gian, nên giá trị formant tại điểm t chỉ có thể thay đổi một khoảng ∆ƒ khá nhỏ xung quanh giá trị ƒ ở các điểm lân cận của t (t± ∆t) Do đó ta có thể giới hạn việc truy tìm formant (ở điểm t) trong một khối xác định bởi các lân cận của f (f ± ∆t) và t (t± ∆t) trên ma trận dữ liệu local maxima APQ, gọi là khối truy tìm formant Trong khối này, formant tại điểm đang tìm có thể xác định bằng điểm
Trang 17có giá trị lớn nhất Nếu tồn tại các điểm cực đại có giá trị lớn hơn 0 trong khối
truy tìm thì giá trị của điểm đó được xem là biên độ của formant và số thứ tự
của hàng xuất hiện điểm cực đại trong ma trận APQ có thể xem là giá trị của
formant tại điểm truy tìm t Ngược lại nếu khối truy tìm chỉ gồm các điểm có giá trị 0, thì formant tại điểm t đã bị mất, tạo thành một khoảng đứt đoạn trên đường nét formant Nếu khoảng đứt đoạn là khá ngắn (nhỏ hơn một giá trị ngưỡng), thì việc formant bị đứt có thể do giới hạn độ phân giải của phép phân tích và ta có
thể khắc phục bằng cách lấy giá trị và biên độ của formant ở điểm trước đó gán
cho điểm đang xét Ngược lại, nếu khoảng bị đứt quá lớn, thì khoảng đó thực sự không có formant và việc truy tìm có thể chấm dứt.
Theo nguyên tắc trên, formant tại điểm (tc+1) được xác định nhờ sử dụng giá trị formant tại tc làm tâm của khối truy tìm Tiếp tục, formant tại điểm (tc+2) được xác định nhờ giá trị vừa tính được tại (tc+1) Cứ tiếp tục như thế, các điểm formant theo chiều tăng của t lần lượt được xác định cho đến hết đường nét formant.
Việc truy tìm formant theo hướng ngược lại cũng tương tự : formant tại điểm (tc-1) được xác định nhờ giá trị tại tc, formant tại điểm (tc-2) được xác định nhờ giá trị vừa tính được tại (tc-1),… cho đến đầu formant.
Sau khi trích một formant bằng giải thuật trên, ta được kết quả là một ma
trận gồm 2 hàng và Q cột với hàng đầu chứa giá trị và hàng thứ 2 chứa biên độ của Q điểm formant Ơû các vị trí không có formant, giá trị và biên độ các điểm
đều được gán bằng 0.
Với k formant có thể có trên local maxima, giải thuật trên phải được thực hiện k lần, mỗi lần trích một formant Kết quả ta được k ma trận (2×Q) tương ứng chứa kết quả của k formant Ta có thể ghép các ma trận này lại thành một cấu trúc dữ liệu chứa kết quả của tất cả các formant như sau:
Trang 18Trong đó fin và Ain lần lượt là giá trị và biên độ tại điểm n của
Điểm bắt đầu truy tìm t= t
Khởi động giá trị ban đầu :F(1,t) = f,F(2,t) = a
Đặt f=F(1,t-1) :giá trị formant ở điểm (t-1)Xác định khối truy tìm formant L()
Truy tìm formant ở điểm t:
- Tìm điểm cực đại trong khối L()- Đặt :a = biên độ điểm cực đại
fs = hàng xuất hiện điểm cực đại t = t+1
Có formant ở điểm t : gán kết quả F(1,t)=fs :giá trị formantF(2,t)= a :biên độ formant
?tQt=−∆
Trang 19SVTH:Huỳnh Quốc Trâm 9-122Điểm bắt đầu truy tìm t = t
Đặt f=F(1,t+1) :giá trị formant ở điểm (t+1)Xác định khối truy tìm formant L()
Truy tìm formant ở điểm t:
- Tìm điểm cực đại trong khối L()- Đặt :a = biên độ điểm cực đại
fs = hàng xuất hiện điểm cực đại t = t-1
Có formant ở điểm t : gán kết quả F(1,t)=fs :giá trị formantF(2,t)= a :biên độ formant
?tt=∆
Trang 20Hình 9.12 Lưu đồ trích một formant từ Local Maxima
Kết quả trích formant của từ ‘LEFT’ được trình bày ở hình 9.13 Tín hiệu được lấy mẫu ở tần số 8kHz.
Trang 21Hình 9.13 Kết quả trích formant của từ ‘LEFT’ dùng STFT
II NHẬN DẠNG TIẾNG NÓI :
Trong hệ thống điều khiển bằng tiếng nói, phần quan trọng nhất và phức tạp nhất là chương trình nhận dạng tiếng nói Bằng các công cụ phân tích tín hiệu hiện có, hệ thống nhận dạng tiếng nói được thiết lập theo hướng phối hợp mẫu, trong đó mẫu được sử dụng để phối hợp là các đặc trưng tiếng nói của từng từ như dạng sóng một chu kỳ cao độ nguyên âm, formant
1 Giải thuật nhận dạng tiếng nói :
Từ âm tiết tách được ,bằng phương pháp STFT ta sẽ trích được formant của tín hiệu và thu được ma trận dữ liệu F (formant) Kết quả này sẽ được đối chiếu với dữ liệu của bộ từ vựng trong Fstore để tìm ra các từ có đặc trưng gần
giống nhất với từ cần nhận dạng Phương pháp đối chiếu giữa dữ liệu thu được và dữ liệu mẫu dựa trên cơ sở phối hợp mẫu Cơ sở phối hợp mẫu(Luật quyết định) được sử dụng rộng rãi nhất là luật lân cận gần nhất Nội dung của luật này
như sau: tính khoảng cách Di giữa mẫu nhập vào với các mẫu lưu trữ Mẫu cần nhận dạng là mẫu có Di nhỏ nhất Tuy nhiên, việc tính khoảng cách chỉ là bước kế tiếp của bước canh lề theo trục thời gian giữa mẫu nhập với các mẫu tham khảo vì cùng một từ được phát âm qua các lần khác nhau sẽ có chiều dài khác
Trang 22nhau do đó các từ khác nhau thì xác suất khác nhau về độ dài của chúng càng lớn Cách đơn giản nhất để khắc phục là cố định chiều dài của tất cả các mẫu được chọn.
Cơ sở phối hợp formant:
Như đã biết formant có 2 thông số quan trọng là: giá trị(tần số) và biên độ k formant tạo thành ma trận 2k hàng, trong đó hai hàng liên tiếp chính là giá trị và biên độ của cùng một formant
Trong đó fin và Ain lần lượt là giá trị và biên độ của điểm n trên formant thứ i với i=1,2, ,k và n=1,2, ,N Ta cần so sánh ma trận dữ liệu F của từ vừa đọc với ma trận dữ liệu chuẩn được lưu trong Fstore.
Fstore = [Ftừ 1,Ftừ 2, ,Ftừ m]
Cơ sở thực hiện phối hợp là hàm khoảng cách D Tuy nhiên ở đây có 2 yếu tố cần phối hợp: giá trị và biên độ của các formant tại các điểm tương ứng giữa 2 từ cần phối hợp; do đó, khoảng cách được tính cho cả giá trị và biên độ tại các điểm Kết quả thu được có thể lấy tổng (D1) hoặc tích giữa khoảng cách giá trị với khoảng cách biên độ rồi mới lấy tổng (D2) Công thức tính khoảng cách D1 và D2 giữa từ cần nhận dạng với từ thứ i của bộ từ vựng được cho bởi công thức sau:
−= k
n (F( f ,n)~ )*Fstore i( f ,n)~ )
11 2 1 0 2 1 0
−−= k
n (F( f ,n)~ )*Fstore i( f ,n)~ )
11 2 1 0 2 1 0
Trong đó :
Trang 23F(2f-1,n), F(2f,n): lần lượt là giá trị và biên độ tại điểm n của formant thứ f của từ cần nhận dạng
Fstore{ }i (2f-1,n), Fstore{ }i (2f,n): lần lượt làø giá trị và biên độ tại điểm n của formant thứ f của từ thứ i trong bộ từ vựng và Fstore{ }i = Ftừ i
Do các formant dùng để phối hợp mẫu không phải lúc nào cũng liên tục qua hai lần trích nên hai công thức trên được nhân thêm giá trị logic (1:có formant ,0 không có formant)nhằm mục đích chỉ so sánh sự giống nhau của phần tồn tại formant của hai từ.
Nếu 2 từ có các formant càng giống nhau thì các giá trị D (D1 hoặc D2) tính được càng nhỏ.Do đó quyết định nhận dạng sẽ dựa vào cực tiểu của các giá trị D của từ cần nhận dạng với các từ trong bộ từ vựng.
Trong luận văn này em sử dụng công thức tính D1 để làm cơ sở phối hợp mẫu
2 Lưu đồ giải thuật nhận dạng tiếng nói dùng DSP56002:
BẮT ĐẦU
Khai báo hằng và biến
Định dạng CS4215 và DSP56002
Nhận dữ liệu và lưu vào RAM
Trích formant của tín hiệu vàobằng STFT
Tính D của tín hiệu vào với tín hiệu chuẩn
Từ cần nhận dạng =có?
Điều kiện kết thúc?
YENDN
Trang 24III CHƯƠNG TRÌNH NHẬN DẠNG TIẾNG NÓI :
Trang 25CHƯƠNG TRÌNH NHẬN DẠNG TIẾNG NÓI
;********************************************;CHƯƠNG TRÌNH CHÍNH (main.asm)
;********************************************include 'init.asm'
include 'sincos'include 'bitrev'include 'fft'include 'hanning'include 'dlieu'include ‘nhan’include ‘formant’include ‘dieukhien’
;*********************************************************************
Trang 26;PHẦN ĐỊNH DẠNG CHO CS4215(init.asm)
init_system macro
;***********************************;Định nghĩa các hằng số sử dụng
CTRL_WD_78 EQU $000000;*************************************** ;Cấu trúc các hằng số cho chế độ dữ liệu Codecs;***************************************
(LEFT_ATTN*4)
Trang 27(15*MONITOR_ATTN)+(RIGHT_ATTN*4);************************************
;Khai báo các địa chỉ ngoại vi trên chip;************************************
PCD EQU $FFE5 PCDDR EQU $FFE3PCC EQU $FFE1CRA EQU $FFECCRB EQU $FFEDSSIDR EQU $FFEFIPR EQU $FFFFBCR EQU $FFFESSISR EQU $FFEEPLL EQU $FFFD
;************************************************;Hai bộ đệm sau là nguồn và đích đối với các chương trình;con xuất nhập CODEC
;************************************************org x:0
RX_BUFF_BASE EQU *RX_data_1_2 ds 1RX_data_3_4 ds 1RX_data_5_6 ds 1RX_data_7_8 ds 1TX_BUFF_BASE EQU *TX_data_1_2 ds 1TX_data_3_4 ds 1TX_data_5_6 ds 1TX_data_7_8 ds 1; -
SSI_FLAG ds 1RX_PTR ds 1TX_PTR ds 1; -
Trang 28org p:0
org p:$C
jsr ssi_rx_isr jsr ssi_rx_isr jsr ssi_tx_isr jsr ssi_tx_isr ; -; MAIN INIT MACRO
org p:init_codec
-; inittialize the CS4215 codec
; -; - ; headphone and line out, and set up for no gain or
;attenuation, and no monitor feedback.; initialize ssi - fsync and sclk = => output; - MOVEP #$0000,X:PCC MOVEP #$4303,X:CRA MOVEP #$FB30,X:CRB MOVEP #$14,X:PCDDR MOVEP #$0,X:PCD ; -
; tạo trễ cho codec; -
DO #500,DELAY_LOOP REP #2000
DELAY_LOOP
BSET #4,X:PCD MOVEP #$3000,X:IPR ANDI #$FC,MR
;Khởi động bộ đệm Tx bằng cách điều khiển chế độ dữ liệu ; -
Trang 29; CLB=0
JCLR #3,X:SSISR,* JSET #3,X:SSISR,* JCLR #3,X:SSISR,* JSET #18,X:RX_BUFF_BASE,* ; -
; CLB =1; -
BSET #18,X:TX_BUFF_BASE
DO #4,INIT_LOOPB JCLR #2,X:SSISR,* JSET #2,X:SSISR,* INIT_LOOPB
MOVEP #0,X:PCC ; -
; now CLB should be 1 re program fsync and sclk direction (i/p); also, circular buffer pointers for echoing data r0=current,
; r1=old data to send 1 fram later
MOVEP #$4303,X:CRA MOVEP #$FB00,X:CRB
MOVEP #$14,X:PCD MOVEP #$01E8,X:PCC
;SSI truyeàn cho ISR ; -ssi_tx_isr
Trang 30JCLR #2,X:SSISR,NEXT_TX MOVE #TX_BUFF_BASE+1,R0
JCLR #3,X:SSISR,NEXT_RX MOVE #RX_BUFF_BASE,R7
Trang 31MOVEP #$261009,X:PLL MOVEP #$0000,X:BCR ORI #3,MR MOVEC #0,SP
MOVE #0,OMR MOVE #3,M0 MOVE #3,M7
;init the output set in the beginning rather than each time ; - MOVE #OUTPUT_SET,Y0
MOVE A1,P:$D
MOVE #NEXT_TX,A1 MOVE A1,P:$11
Trang 32; -WAIT_RECEIVE MACRO JCLR #3,X:SSISR,* JSET #3,X:SSISR,* ENDM
; -WAIT_SEND MACRO JCLR #2,X:SSISR,* JSET #2,X:SSISR,* ENDM
; -GET_LEFT MACRO MOVE X:RX_BUFF_BASE,X0
; -PUT_LEFT MACRO MOVE A,X:TX_BUFF_BASE
; -GET_RIGHT MACRO MOVE X:RX_BUFF_BASE+1,X1 ENDM
;Put_right()
Trang 33WAIT_WORD MACRO JCLR #1,R7,*