Giờ ta sẽ đi giải quyết thuật toán việc giải mã Viterbi (quyết định cứng) cho bộ mã tốc độ ½ với K= 3 và bộ phát mã (hay đa thức sinh) là (5,7)8 đã nhắc đến trong chương 4 về thuật toán Viterbi.
Ta đã biết rằng, với trường hợp bộ mã này thì nếu có N bit mã hóa ngõ vào thì sẽ phải tìm từ 2N
sự kết hợp có thể (tương ứng một bit vào sẽ có 2 bit ra). Điều này trở nên vô cùng phức tạp nếu N càng lớn. Tuy nhiên, ông Andrew J Viterbi trong một ghi chép về “Error bounds for convolutional codes and an asymptotically optimum decoding algorithm”, IEEE Transactions on Information Theory 13(2):260–269, tháng 4 năm 1967 đã mô tả một sơ đồ để kéo giảm tính phức tạp đó đến mức có thể điều khiển được. Một vài giả thuyết quan trọng được đưa ra như sau:
- Như chúng ta thấy trong bảng 4.1 và hình 4.2 thì bất kì một trạng thái nào cũng đều đến từ chỉ 2 trạng thái có thể trước đó.
- Trong 2 trạng thái đó thì chỉ có một trạng thái đúng là trạng thái trước đó. Chúng ta có thể tìm ra trạng thái đó dựa trên bit mã hóa nhận được và bỏ qua trạng thái còn lại.
- Lỗi xuất hiện trong chuỗi bit mã hóa nhận được là một phân bố ngẫu nhiên và xác xuất của lỗi là nhỏ.
Dựa theo các giả thuyết như trên, Lưu đồ giải mã được tiến hành như sau: Giả sử là có N bit được mã hóa, lấy 2 bit mã hóa ở cùng một thời điểm để xử lí và tính toán khoảng cách Hamming, metric nhánh, metric đường, và thông số đường tồn tại cho N/2 +K-1 lần, lấy i là biến chạy từ 1 đến N/2 + K -1.
Tính toán khoảng cách Hamming
Để giải mã, ta hãy xem xét 2 bit mã hóa nhận được ở thời điểm yi và tính toán khoảng cách hamming giữa tất cả những sự kết hợp có thể của 2 bit này. Số bit khác nhau có thể được tính toán bằng thuật toán XOR giữa yi với 00, 01, 10, 11 và sau đó tính toán số bit 1.
là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính là số bit 1 thu được sau phép tính
Tính toán metric nhánh và metric đƣờng
Như đã đề cập trước đó, mỗi trạng thái chỉ có thể đến từ 2 trạng thái có thể trước đó (thể hiện bằng 2 đường màu đỏ và xanh tương ứng trong hình 4.4). Thông số metric nhánh chính là tổng của metric đường của trạng thái trước đó và khoảng cách hamming trong sự chuyển đổi giữa 2 trạng thái. Trong 2 metric nhánh có được, thông số metric nhánh nhỏ hơn sẽ được chọn để giữ lại. Đây chính là nhiệm vụ chính của bộ ACS (Add Compare and Select).
Ghi chú:
1. Theo quy ước thì mã hóa chập luôn bắt đầu từ trạng thái 00, và bộ giải mã Viterbi cũng tương tự.
2. Khi i = 1, metric nhánh cho trạng thái 00 (từ trạng thái 00_dịch bit 0 vào) và trạng thái 10 (từ trạng thái 00_ dịch bit 1 vào) có thể được tính toán. Trong trường hợp này, metric đường cho mỗi trạng thái là chính bằng với metric nhánh khi các nhánh còn lại là không hợp lệ (không tồn tại).
3. Khi i = 2, metric nhánh cho trạng thái 00 (từ trạng thái 00), trạng thái 01 (từ trạng thái 10), trạng thái 10 (từ trạng thái 00), và trạng thái 11 (từ trạng thái 10) có thể được tính toán. Trong trường hợp này cũng vậy, metric đường cho mỗi trạng thái chính bằng metric nhánh khi các nhánh khác là không hợp lệ.
4. Bắt đầu từ thời điểm i = 3, mỗi trạng thái có 2 nhánh và chúng ta cần tiến hành thuật toán ACS đã nói ở trên.
5. Trong trường hợp 2 metric nhánh có cùng giá trị, chúng ta chọn ngẫu nhiên 1 trạng thái để tiến hành xử lí tiếp
Hình 4.4 Tính toán metric nhánh và metric đường cho bộ giải mã Viterbi
Trạng thái 00 có thể đến từ 2 nhánh
(a) Trạng thái 00 với ngõ ra 00. Metric nhánh cho sự chuyển đổi này,
(4.1) (b) Trạng thái 01 với ngõ ra 11. Metric nhánh cho sự chuyển đổi này,
(4.2) Metric đường cho trạng thái 00 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ) (4.3) Đường tồn tại cho trạng thái 00 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 01 có thể đến từ 2 nhánh
(c) Trạng thái 10 với ngõ ra 10. Metric nhánh cho sự chuyển đổi này,
(4.4) (d) Trạng thái 11 với ngõ ra 01. Metric nhánh cho sự chuyển đổi này,
Metric đường cho trạng thái 01 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ) (4.6) Đường tồn tại cho trạng thái 01 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 10 có thể đến từ 2 nhánh
(e) Trạng thái 00 với ngõ ra 11. Metric nhánh cho sự chuyển đổi này,
(4.7) (f) Trạng thái 01 với ngõ ra 00. Metric nhánh cho sự chuyển đổi này,
(4.8) Metric đường cho trạng thái 10 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ). (4.9) Đường tồn tại cho trạng thái 10 được lưu trữ trong biến “metric đường tồn tại”
Trạng thái 11 có thể đến từ 2 nhánh
(g) Trạng thái 10 với ngõ ra 01. Metric nhánh cho sự chuyển đổi này,
(4.10) (h) Trạng thái 11 với ngõ ra 10. Metric nhánh cho sự chuyển đổi này,
(4.11) Metric đường cho trạng thái 11 được chọn dựa trên giá trị nhỏ hơn trong 2 metric nhánh ở trên.
( ). (4.12) Đường tồn tại cho trạng thái 11 được lưu trữ trong biến “metric đường tồn tại”
Khối truy hồi
Khi đường tồn tại được tính toán N/2 + K – 1 lần, thuật toán giải mã có thể bắt đầu ước lượng chuỗi ngõ vào. Nhờ vào sự có mặt của các bit tận cùng (K-1 bit 0 thêm vào), thì trạng thái cuối cùng của chuỗi bit theo bộ mã hóa chập là trạng thái 00.
Vì vậy, bắt đầu từ metric đường cuối cùng được tính toán ở thời điểm N/2 + K -1 cho trạng thái 00, từ đường tồn tại, ta tìm ra trạng thái trước đó tương ứng với trạng thái hiện tại. Từ kiến thức về trạng thái hiện tại và trạng thái trước, chuỗi ngõ vào có thể được quyết định (xem bảng 4.3 về trạng thái ngõ vào và trạng thái ngõ ra). Tiếp tục truy hồi dựa theo đường tồn tại và ước lượng chuỗi ngõ vào cho đến thời điểm i = 1.
Bảng 4.3: Trạng thái hiện tại và trạng thái trước của nó Input, if previous state Current state 00 01 10 11 00 0 0 x x 01 x x 0 0 10 1 1 x x 11 x x 1 1