Mã hóa kênh truyền
275
decoded = vitdec(qcode,t,tblen,'cont','soft',3); % Giải mã.
% Tính số lỗi và tỷ lệ bit lỗi.
[number,ratio] = biterr(decoded(delay+1:end),msg(1:end-delay))
Dưới đây là kết quả của một lần thực hiện chương trình:
number =
5
ratio =
0.0013
Cuối cùng chúng ta kết thúc phần này với một ví dụ mang tính tổng hợp về kỹ thuật mã chập.
Ví dụ 17-9. Sử dụng bộ mã hoá mã chập thuận tỷ lệ 2/3 được mô tả trong hình vẽ 17.5 để
mã hoá một chuỗi dữ liệu ngẫu nhiên. Tạo nhiễu Gauss và cộng vào dữ liệu. Sau đó thực hiện
giải mã bằng hai phương pháp quyết định cứng (chỉ có hai mức lượng tử là 0 và 1) và quyết
định mềm với số bit quyết định bằng 3. Tính tỷ lệ lỗi bit và so sánh kết quả.
Hình 17.5. Bộ mã hoá mã chập thuận tỷ lệ 2/3
Trước hết cần xác định các thông số cho bộ mã hoá này. Giới hạn chiều dài của bộ mã phải là
một vector có chiều dài bằng 2 vì bộ mã hoá có hai ngõ vào. Thanh ghi dịch ứng với ngõ vào
1 có 4 ô nhớ (4 bộ delay), cộng với bit ngõ vào hiện tại, vậy chiều dài giới hạn ứng với ngõ
vào 1 là 5. Tương tự, chiều dài giới hạn ứng với ngõ vào 2 là 4. Vậy vector chiều dài giới hạn
là [5 4].
Ma trận sinh của bộ mã hoá là ma trận 2 x 3 (2 ngõ vào, 3 ngõ ra). Phần tử ở hàng i cột j cho
biết ảnh hưởng của ngõ vào thứ i lên ngõ ra thứ j. Ví dụ, để xác định phần tử ở hàng thứ 2 và
cột thứ 3, ta nhận xét thấy phần tử tận cùng bên trái và hai phần tử tận cùng bên phải của
thanh ghi dịch thứ 2 được kết nối tới bộ cộng ở ngõ ra 3. Vậy, phần tử ở hàng thứ 2 cột 3 của
ma trận sinh có biểu diễn nhị phân là 1011, tức là bằng 13 trong hệ bát phân. Thực hiện tương
tự đến các vị trí khác, ta có ma trận sinh như sau: [23 35 0; 0 5 13].
Để thực hiện quá trình mã hoá và giải mã, dùng hàm poly2trellis để chuyển các thông số trên
thành một cấu trúc trellis.
Dưới đây là đoạn chương trình cho ví dụ 17-9.
len = 1000;