Trong hình 2-10 hiển thị giá trị các đỉnh của một chuỗi xung tuần hoàn có một chu kì cụ thể. Các đỉnh sẽ tăng dần đều theo chu kì khi đỉnh của sai số dự đoán được tính, thì giá trị đo đạc sẽ là cao hơn cho các khung có tiếng. Đặc biệt, giá trị của nó có thểđược cực đại hóa khi số lượng các xung trong khung trở nên
thưa thớt (khung jitter voiced). Như thế, việc đo đạc các đỉnh sẽ rất hữu ích trong việc phân loại khung là có tiếng hay không tiếng, cũng như trong việc phát hiện các khung chuyển đổi.
Hình 2-11: Sai số dựđoán có được từ một sóng âm (bên trái) và đo đạc đỉnh áp dụng cho sai số dựđoán (bên phải)
Hình 2-11 cho thấy một ví dụ về phép xác định đỉnh trong trường hợp tín hiệu sai số dự đoán thực tiễn. Ta thấy rằng đỉnh cao hơn nhiều đối với n ở giữa 1000 và 2000, ở đó tín hiệu là có tiếng. Đỉnh đặc biệt cao đối với khung có n=1000 chủ yếu do sự chuyển đổi tự nhiên, khi một số xung kích thích xuất hiện bất thường trong khung.
2.4.9 Peakness và voice strength
Theo giá trị của đỉnh, voice strength của ba dải tần thấp nhất sẽđược điều chỉnh như sau:
+ Nếu p > 1.34 thì vs1 = 1
+ Nếu p > 1.60 thì vs2 = 1 và vs3 = 1
Khi đỉnh là cao, nó sẽ ghi đè lên voice strength bằng cách đặt nó trực tiếp bằng giá trị cao. Mỗi voice strength sẽđược lượng tử hóa về 0 hoặc 1, khi truyền
đi sử dụng 1 bit.
Sự kết hợp giữa đỉnh và phép đo tự tương quan có hiệu quả cao trong việc phân loại trạng thái âm. Thông thường, các khung không âm sẽ có đỉnh và tự
tương quan thấp, dẫn đến voice strength là yếu. Đối với khung chuyển tiếp thì sẽ
có đỉnh là cao và tự tương quan ở mức trung bình.Với những khung này, tương quan tương đối thấp sẽ đặt cờ không tuần hoàn bằng 1, khiến cho bộ giải mã sinh ra các chu kì ngẫu nhiên. Đối với khung có âm, đỉnh là trung bình với tương quan cao; điều này sẽ đưa giá trị cờ không tuần hoàn về 0: voice strength
2.4.10 Ước lượng chu kỳ âm sắc cuối cùng
Tín hiệu sai số dựđoán được lọc qua bộ lọc thông thấp với ngưỡng 1kHz,
đầu ra được sử dụng đểước lượng pitch period. Kết quả thu được bằng cách tìm kiếm trong một phạm vi xung quanh giá trị pitch period bước 1 T(1). Ước lượng lại pitch period sử dụng sai số dựđoán sẽ có được kết quả chính xác hơn, do cấu trúc đỉnh cộng của tín hiệu tiếng nói gốc đã được loại bỏ.
2.5 Hoạt động mã hóa
Hình 2-12: Mô hình mã hóa MELP
2.5.1 Mã hóa voice strength băng thông
Voice strength của bốn dải tần cao được lượng tử hóa theo thủ tục mã giả
sau: QUANTIZE_VS(vs1, …, vs5) 1. if vs1<= 0.6 // không tiếng 2. for i = 2 to 5 3. qvsi= 0 4. else // có tiếng 5. for i = 2 to 5 6. if vsi > 0.6 7. qvsi= 1 8. else 9. qvsi= 0 10. if qvs== 0 and vs== 0 and qvs== 0
11. qvs5= 0 12. return qvs2,.., qvs5
Thủ tục này có đầu vào là voice strength của 5 dải tần. Đối với trường hợp không phải tiếng nói, dựa vào biên độ vs1<= 0.6 , giá trị voice strength lượng tử
hóa qvsi của bốn dải tần cao sẽđược đặt là 0. Ngược lại, chúng sẽđược lượng tử
hóa là 0 hoặc 1 tùy theo biên độ là nhỏ hơn hay lớn hơn 0.6. Trường hợp (qvs2, qvs3, qvs4, qvs5 ) = (0,0,0,1) sẽ hoàn toàn bị loại ở dòng lệnh 10 và 11.
2.5.2 Lượng tử hóa pitch period và voice strength tần thấp
Pitch period T và voice strength thấp tần vs1 được lượng tử hóa cùng nhau sử dụng 7 bit. Nếu vs1<= 0.6, khung là không tiếng và một mã toàn giá trị
0 sẽ được gửi đi. Ngược lại, logT sẽ được lượng tử hóa với bộ lượng tử đồng nhất 99 cấp có phạm vi từ log20 tới log160. Giá trị vs1 đã lượng tử hóa được ký hiệu là qvs1, nó sẽ nhận giá trị 0 đối với trạng thái không tiếng và 1 đối với trạng thái có tiếng.
2.5.3 Tính toán gain
Gain được đo hai lần trên một khung sử dụng kích thước cửa sổ thích nghi âm sắc. Kích thước này được xác định như sau:
+ Nếu vs1> 0.6, kích thước cửa sổ là bội nhỏ nhất của T(1), thường lớn hơn 120 mẫu. Nếu kích thước này vượt quá 320 mẫu, nó sẽđược chia cho 2. Trường hợp này tương ứng với các khung tiếng nói, khi sự đồng bộ âm sắc được tìm trong suốt quá trình tính toán gain. Bằng cách sử dụng một bội nguyên của pitch period, sự biến thiên của gain tương ứng với vị trí của cửa sổ sẽ được giảm thiểu.
+ Nếu vs1<= 0.6, kích thước cửa sổ là 120 mẫu. Đây là trường hợp khung không tiếng hoặc khung tiếng chập chờn.
Tính toán gain cho cửa sổ đầu tiên sẽ tạo ra giá trị g1 và được tập trung vào 90 mẫu trước mẫu cuối cùng ở khung hiện tại. Tính toán gain cho cửa sổ thứ
hai sẽ tạo ra g2 và được tập trung vào mẫu cuối cùng ở khung hiện tại. Phương trình tính giá trị gain là: 2 10 1 10log 0.01 [ ] n g s n N [2.16]
Trong đó, N là kích thước cửa sổ, s[n] là tín hiệu tiếng nói đầu vào. Phạm vi của n phụ thuộc vào kích thước cửa sổ và từng giá trị gain cụ thể (g1 hoặc g2). Phần
tử 0.01 sẽ ngăn không cho biểu thức tiến về 0. Phép đo giá trị gain có giả thiết rằng tín hiệu đầu vào có phạm vi từ -32768 tới 32767 (16 bit trên mỗi mẫu).
2.5.4 Mã hóa gain
Giá trị g2 được lượng tử hóa bởi một bộ lượng tửđồng nhất 5 bit có phạm vi từ 10 tới 77 dB. Giá trị g1 thì được lượng tử hóa 3 bit theo thủ tục sau:
ENCODE_g1(g1, g2, g2,past)
1. if| g2- g2,past| < 5 and | g1- (g2+ g2,past)/2 |< 3 2. index = 0
3. else
4. gmax = MAX(g2,past, g2) + 6 5. gmin = MIN(g2,pastg2) - 6 6. if gmin < 10
7. gmin = 10
8. if gmax > 77
9. gmax = 77
10. index = UNIFORM(g1, gmin, gmax, 7) 11. return index
Thủ tục này sử dụng g1 và g2 của khung hiện tại, g2,past của khung trước
đó. Ở dòng 1, một số điều kiện được xác định để xem khung là trạng thái ổn
định hay không (năng lượng ít thay đổi ). Nếu điều kiện được thỏa mãn, thì thủ
tục kết thúc với chỉ số bằng 0. Ngược lại, khung này là tạm thời và ta sử dụng bộ
lượng tử hóa đồng nhất cấp 7. Giá trị giới hạn của bộ lượng tử (gmin, gmax)
được tính toán từ dòng 4 tới dòng 9; mã hóa thông qua bộ lượng tửđồng nhất ở
dòng 10; kết quảđưa đến là chỉ số tập hợp {1,2,…,7}. Như vậy, tổng cộng có 8 mức, có thể khai thác bằng 3 bits. Hàm UNIFORM() ở dòng 10 sẽ nhận giá trị đầu vào là g1 và mã hóa nó thông qua bộ lượng tử hóa đồng nhất với giới hạn
đầu vào [gmin, gmax] và 7 từ mã. Phương pháp này là một mô hình lượng tử
thích nghi với tham số của cả quá khứ và tương lại đều được sử dụng để cải thiện hiệu suất.
2.5.5 Cấp phát bit
Bảng 2-1 tổng kết sơ đồ cấp phát bit của mã hóa FS MELP. Ta đã biết, các mô hình LPC đều được lượng tử như là LSF sử dụng MSVQ. Việc đồng bộ
hóa này là một mẫu thay đổi 1/0. Việc bảo vệ lỗi chỉ dành cho các khung không tiếng, sử dụng 13 bit. Mỗi khung sẽ được truyền tổng cộng là 54 bit, với độ dài là 22.5 ms. Kết quả ta có bit-rate là 2400 bps.
Bảng 2-1: Sơđồ cấp phát bit của mã hóa MELP Tham số Có tiếng Không tiếng LPC 25 25 Pitch period/ VS thấp tần 7 7 VS băng thông 4 - Gain thứ nhất g1 3 3 Gain thứ hai g2 5 5 Cờ không tuần hoàn 1 - Biên độ Fourier 8 - Đồng bộ hóa 1 1 Chống lỗi - 13 Tổng cộng 54 54 2.6 Hoạt động giải mã
[4] Hình 2-13 cho thấy sơ đồ giải mã MELP, ở đó, luồng bit MELP được bung gói với các chỉ sốđược đưa đến các bộ giải mã tương ứng. So với hình 2- 12, ta thấy mô hình tạo tiếng nói đã được nhúng bên trong cấu trúc của giải mã. Có hai bộ lọc được bổ sung vào trong quá trình xử lý đó là bộ lọc nâng cao phổ
với đầu vào là kích thích hỗn hợp và bộ lọc phân tán xung ở cuối của quá trình xử lý. Hai bộ lọc này được sử dụng để nâng cao chất lượng của tiếng nói tổng hợp.
2.6.1 Giải mã và nội suy tham số
Trong giải mã MELP, các tham số từ dòng bit sẽ được bung gói và giải mã theo các lược đồ tương ứng. Những tham số này bao gồm: LPC (LSF), pitch period/voice strength tần thấp, voice strength băng thông, gain (g1 và g2), cờ
không tuần hoàn và các biên độ Fourier. Các tham số này đại diện cho thông tin của khung, hầu hết được nội suy một cách tuyến tính trong quá trình tổng hợp tiếng nói.
Đối với các khung không tiếng (được phát hiện thông qua mã voice strength thấp tần/ pitch period), chúng ta sẽ sử dụng các giá trị mặc định cho
đều là 1, và tất cả các giá trị voice strengthđều là 0. Các giá trị mặc định này là cần thiết đối với khung không tiếng bởi vì việc nội suy tuyến tính được thực hiện trên cơ sở “pitch period – by – pitch period” trong suốt quá trình tổng hợp.
Ở đây có xuất hiện một tham số mới: jitter, nó chỉ được sử dụng trong việc giải mã đểđiều khiển số lượng ngẫu nhiên xảy ra trong quá trình tạo ra các âm kích thích không tuần hoàn.
Đối với khung có tiếng, giá trị của jitter được sử dụng như sau: jitter = 0.25 nếu cờ không tuần hoàn là 1, ngược lại thì jitter = 0. Trong trường hợp này, pitch period được giải mã từ dòng bit. Sau khi nội suy, giá trị pitch period thực sự sẽđược tính theo công thức:
0 (1 * )
T T j i t t e r x [2.17]
Với T0 là giá trị pitch period đã giải mã và suy ra được, còn x là một số
ngẫu nhiên có phân bố chuẩn trong khoảng [-1,1]. Theo cách này, các chu kỳ bất thường sẽ được sinh ra, mô phỏng các điều kiện phát sinh trong quá trình dịch chuyển các khung. Chú ý rằng nhiễu tối đa đối với pitch period vào khoảng ±25%, đây là giới hạn cho hầu hết các tình huống thực tiễn.