PCM vi sai thích ứng (ADPCM - Adaptive Differential Pulse Code Modulation) tổ hợp phương pháp DPCM và PCM thích ứng. Đây là phương pháp mã hóa dữ liệu khá kinh điển trong kĩ thuật truyền dẫn. Nó được sử dụng để nén tín hiệu trong truyền dữ liệu.
Với bộ mã hóa, đầu vào PCM đươch chuyển đổi thành PCM thống nhất. Một tín hiệu lệch thu được bằng cách trừ một ước lượng của tín hiệu đầu vào từ chính tín hiệu đầu vào đó. Một bộ lượng tử hóa 31-, 15-, 7-, hoặc 4-mức thích ứng được dùng để gán 5, 4, 3, hoặc 2 số nhị phân tương ứng để giá trị của tín hiệu lệch được truyền tới bộ giải mã. Một bộ lượng tử đảo ngược sinh ra tín hiệu lệch được lượng tử hóa từ 5, 4, 3 hoặc 2 số nhị phân này. Ước lượng tín hiệu được cộng vào tín hiệu
lệch được lượng tử hóa này để sinh ra phiên bản của tín hiệu đầu vào được tạo lại. Cả tín hiệu được tạo lại và tín hiệu lệch được lượng tử hóa được điều khiển bởi bộ dự báo thích ứng, mà sinh ra ước lượng của tín hiệu đầu vào, do đó hoàn thành vòng lặp phản hồi.
Hình 3.2.1: Bộ mã hóa ADPCM [9]
let B3 = B2 = B1 = B0 = 0 if (d(n) < 0) then B3 = 1 d(n) = ABS(d(n)) if (d(n) >= ss(n)) then B2 = 1 and d(n) = d(n) - ss(n) if (d(n) >= ss(n) / 2) then B1 = 1 and d(n) = d(n) - ss(n) / 2 if (d(n) >= ss(n) / 4) then B0 = 1 L(n) = (10002 * B3) + (1002 * B2) + (102 * B1) + B0 Hình 3.2.3: Giả mã thuật toán mã hóa PCM [19]
Bộ giải mã bao gồm một cấu trúc giống với thành phần phản hồi của bộ mã hóa, cũng như việc chuyển tín hiệu PCM thành tín hiệu A-law hoặc -law và bộ điều chỉnh mã hóa đồng bộ. Bộ điều chỉnh mã hóa đồng bộ ngăn chặn sự sai lệch tích lũy xảy ra trên mã hóa song song đồng bộ (ADPCM, PCM, ADPCM, ..., kết nối số) dưới các điều kiện chắc chắn [9]. Bộ điều chỉnh mã hóa đồng bộ hoàn thành bởi việc điều chỉnh mã đầu ra PCM theo cách mà cố gắng khử sai lệch lượng tử hóa trong giai đoạn mã hóa ADPCM tiếp theo.
Hình 3.2.5: Sơ đồ giải mã Dialogic ADPCM [19] d(n) = (ss(n)*B2)+(ss(n)/2*B1)+(ss(n)/4*BO)+(ss(n)/8) if (B3 = 1)
then d(n) = d(n) * (-1) X(n) = X(n-1) + d(n)
Hình 3.2.6: Giả mã thuật toán giải mã PCM [19]
Như vậy, trong trường hợp xấu nhất, kích thước dữ liệu ADPCM chỉ giảm xuống còn 2/3 (phải dùng 5 bit cho mỗi vi sai) so với dữ liệu PCM gốc (8 bit). Còn trong trường hợp tốt nhất, dữ liệu ADPCM sẽ giảm xuống còn ¼ (phải dùng 2 bit cho mỗi vi sai) so với dữ liệu PCM gốc.
Thông thường trên PC, các nhà nghiên cứu sẽ lưu sẵn các đoạn âm thanh dạng PCM. Chúng ta hoàn toàn có thể lưu tín hiệu các đoạn âm thanh ở dạng ADPCM. Trước khi sinh tiếng nói, ta phải thêm một thao tác chuyển đổi từ ADPCM sang PCM. Tuy nhiên, bản chất của bộ giải mã là một bộ cộng tích lũy nên chi phí tính toán là không nhiều.
Trong luận văn này, tôi đã chuyển đổi lưu trữ các đoạn tín hiệu của các bán âm từ dạng PCM 16bit về dạng ADPCM 4bit. Như vậy, kích thước dữ liệu giảm đi bốn lần. Khi này, trong CSDL sẽ lưu dữ liệu âm thô dạng ADPCM. Khi tổng hợp, sau khi lấy dữ liệu tương ứng với bán âm tiết, hệ tổng hợp thực hiện việc giải mã để thu được tín hiệu dạng PCM.
Từ hình 3.2.7 và 3.2.8, chúng ta có thể thấy phổ tín hiệu gốc không đều như phổ tín hiệu khôi phục từ dạng ADPCM. Và điều này có thể làm giảm tính tự nhiên của tiếng nói. Do vậy, chất lượng tiếng nói tổng hợp chắc chắn sẽ vị thay đổi ít nhiều.
Hình 3.2.7: Phổ đoạn tín hiệu “màu rơm vàng óng ả” gốc.