Trường hợp bất đối xứng của mã nguồn phân tán không linh hoạt về tỷ lệ phân bố. Nếu ta muốn thay đổi tốc độ của các nguồn khác trong trường hợp bất đối xứng thì chúng ta cần sử dụng sơ đồ chia sẻ thời gian mở đầu cho vấn đề đồng bộ; các sensor này phải liên lạc với nhau để đồng bộ hóa. Đây là điều mà chúng ta cố gắng tránh khỏi. Có hai giải pháp để giải quyết vấn đề này. Người ta đưa ra một phương pháp dựa trên nguyên tắc như là sơ đồ DISCUS, nhưng lại phải cải tiến thêm cho mã hóa và giải mã. Cách khác là dùng phương pháp chia nguồn.
Không giống như trường hợp bất đối xứng là một nguồn gửi thông tin tổn thất của nó và nguồn khác gửi thông dữ liệu đã nén thì trong trường hợp này, cả hai nguồn sẽ có thể chỉ gửi thông tin cục bộ mà không thỏa hiệp với chất lượng tín hiệu thiết lập lại ở bộ giải mã. Một sơ đồ mã hóa đồng bộ sẽ có thể mã hóa với tốc độ trong vùng tốc độ ở hình 2.4b.
Xét việc mã hóa hai nguồn tương quan tổn quát X và Y. ta sẽ mã hóa theo cách đối xứng, vd chúng ta muốn nén mỗi nguồn với bất kì tỷ lệ nào trong khoảng từ H(X) đến H(X|Y) đối với X , và khoảng từ H(Y) đến H(Y|X) đối với Y. Giả sử H(X) ≤ H(Y). Theo chiến lược mã hóa kênh, ta tạo hai ma trận Gx và Gy chứa n(1- H(X|Y)) và n(1-H(Y)) hàng để đạt được điểm góc (H(X|Y), H(Y)) (xem hình 4). Để gán các tỷ lệ khác nhau chúng ta chuyển một vài hàng từ Gx qua Gy di chuyển dọc theo đường H(X,Y) cho đến khi đạt được điểm góc khác (H(X), H(Y|X)).
29 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54 Gc Ga Gs Gc Ga Gsx Gc Gsy G = Gx = Gy =
Hình 3.2. Cấu trúc bộ tạo ma trận trong trường hợp đối xứng
Xét 1 bộ tạo ma trận Gc kích thước n(1-H(Y)) × n với các hàng là độc lập tuyến tính, trong đó n là chiều dài khối sử dụng trong mã hóa. Bộ tạo ma trận này có thể được dùng để chia không gian của chuỗi Y chiều dài n. như vậy Gy = Gc, và bộ mã hóa của Y gửi syndrome liên kết với ma trận Gx. Xét một ma trận Ga kích thước n(H(Y)-H(Y)) × n , các hàng là đọc lập tuyến tính. Một ma trận được tạo ra bởi việc xếp Gc và Ga có thể được sử dụng để chia không gian chuỗi chiều dài n với nH(X) coset. Để giảm tỷ lệ gây ra bởi ma trận sau khi xếp từ H(X) bít/mẫu xuống H(X|Y) bít/mẫu chúng ta xây dựng một ma trận Gs với n(H(X)-H(X|Y)) hàng độc lập tuyến tính. Gx bây giờ được tạo ra bởi Gc, Ga và Gs. Bộ giả mã của X gửi syndrome của chuỗi chiều dài n của X về Gx đến bộ giải mã. Bộ giải mã lấy lại được chuỗi Y chiều dài n dựa trên thông tin này và biết về thống kê của Y. để mã hóa X chúng ta cần có bộ tạo ma trận Gx. Bộ giải mã nhận lại được chuỗi chiều dài n có thể dùng một thuật toán giải mã chuẩn để khôi phịc chuỗi X sử dụng phân bố chung p(x,y) của X và Y.
Để trao đổi tỷ lệ giữa hai bộ mã hóa của X và Y, bất kỳ hàng nào của Gs có thể được chuyển từ Gx đến Gy. Cuối cùng khi Gx chỉ còn lại Gc và Ga, hai bộ mã hóa của X và Y ssẽ truyền với tốc độ lần lượt là H(X) và H(Y|X) bít/mẫu. Quá trình phân bổ này có thể được xem như là việc chia bộ tạo ma trận G thành hai (Gx và Gy) được minh họa ở hình 3.2.
30 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54 3.2.1. Cấu trúc bộ giải mã
Hãy nhớ rằng trong trường hợp đối xứng này để giải mã nguồn cần phải tìm được coset nơi mà nguồn sau nén X tồn tại và tìm được từ mã về coset này mà gần với thôg tin biên Y nhất. bây giờ trong trường hợp đối xứng, cả hai nguồn gửi thông tin cục bộ nên chiến lược giải mã không thể áp dụng. Chúng ta sẽ quay lại cái này trong trường hợp đặc biệt của giải mã LDPC
3.2.2. Đa nguồn
Một mạng cảm biến với hai sensor mà chúng ta đã xem xét cho đến nay thì không phải là nhiều. người ta mong muốn và hoàn toàn cần thiết để có thể trình bày một lý thuyết về trương hợp nhiều hơn hai nguồn. Cái hay của ý tưởng được trình bày đến nay trong bài luận này là không có có một thách thức nào. Ví dụ về hai nguồn trong mã nguồn phân tán đối xứng dễ dàng mở rộng thành đa nguồn.
G1 G2 GL GL-1 G1 G2 GL-1 G1 G2 G1 Gx1 Gx2 G x(L-1) Gx(L)
Hình 3.2.2. Định nghĩa ma trận trong trườn hợp đa nguồn
Với L nguồn, ta tạo ra 1 thứ tự của một số nguồn bất kỳ {X1,…XL} như là H(X1|X2, …, XL) ≤ …≤ H(Xi|Xi+1, …, XL) ≤ …≤ H(XL). Không khác với nguyên tắc chung, chunga ta có thể sắp xếp các nguồn theo kiểu cách này. Ta có thể đạt được điểm góc H(X1|X2, …, XL) , …, H(Xi|Xi+1, …, XL) , …, H(XL) bằng việc đệ quy định nghĩa bộ tạo nhiều ma trận từ bộ tạo 1 ma trận đơn cho mỗi mã, như hình 3.2.2.
31 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54
Quá trình bắt đầu với việc định nghĩa bộ tạo ma trận GL với n(1-H(XL)) hàng độc lập tuyến tính. Các ma trận khác có thể có được bằng việc định nghĩa lặp lại Gi-1 như là xếp Gi và một ma trận Ai-1 với n(H(Xi|Xi+1, …, H(XL)) – H(Xi-1|Xi, …,XL)) hàng độc lập tuyến tính. Rõ ràng thì như trong trương hợp hai nguồn, các điểm không phải là điểm góc có thể đạt được bởi việc trao đổi các hàng đặc biệt của các bộ tạo ma trận giữa chúng.
3.3. Mã hóa LDPC
3.3.1. Giới thiệu một số loại mã
3.3.1.1. Mã Turbo
Trong lí thuyết thông tin, mã turbo là một tập hợp các chuyển tiếp sửa lỗi hiệu suất cao. Tên mã xuất phát từ các vòng lặp thông tin phản hồi được sử dụng để đáp ứng cho các động cơ tăng áp.
Bộ mã hóa :
Hình 3.3.1.1a Cấu trúc bộ mã hóa Turbo
- Bộ mã hóa bao gồm 3 khối bit nhỏ : Khối đầu tiên là khối m – bit dữ liệu tải trọng; Khối thứ 2 gồm n/3 bit chẵn lẻ để tính toán, sử dụng một hệ thống đệ quy (mã RSC); Khối thứ 3 là n/2 bit chẵn lẻ cho biết hoán vị của các dữ liệu tải trọng, cũng sử dụng mã RSC.
- Trên hình, M là một bộ nhớ Register. Trễ và lưu lượng đầu vào dk xuất hiện với trình tự khác nhau. Tại phiên đầu tiên, trình tự dk xuất hiện ở cả 2 đầu ra
32 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54
của bộ mã hóa. Nếu các bộ mã hóa C1 và C2 được sử dụng tương ứng trong n1 và n2 thì mức giá trị của chúng lần lượt bằng :
R1 = (n1 + n2) / (2n1 + n2) R2 = (n1 + n2) / (n1 + 2n2)
Bộ giải mã :
Hình 3.3.1.1b Cấu trúc bộ giải mã Turbo
- Hai bộ giải mã nhỏ được để nối tiếp với nhau. Các bộ giải mã DEC1 hoạt động ở tốc độ thấp hơn (vd, R1), do đó nó giành cho các mã hóa C1, và DEC2 là cho C2 tương ứng. DEC1 gây ra trễ L1 , DEC2 gây ra trễ L2 .
Nhược điểm : Mã turbo chỉ sử dụng 2 mã cấu hình song song để mã hóa toàn bộ khối đầu vào K của các bit dữ liệu. Các bộ mã hóa thành phần sử dụng mã chập đệ quy ( RSC) với khả năng giới hạn ( 8 -16 trạng thái ). Chính vì vậy, khả năng quản lý chưa thực sự chính xác, cũng như mức độ dự phòng cho mỗi bit đầu vào chưa được linh hoạt.
3.3.1.2. Mã Hamming
Trong viễn thông (telecommunication), mã Hamming là một mã sửa lỗi tuyến tính (linear error-correcting code), được đặt tên theo tên của người phát minh ra nó, Richard Hamming. Mã Hamming có thể phát hiện một bit hoặc hai bit bị lỗi
33 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54
(single and double-bit errors). Mã Hamming còn có thể sửa các lỗi do một bit bị sai gây ra. Ngược lại với mã của ông, mã chẵn lẻ (parity code) đơn giản vừa không có khả năng phát hiện các lỗi khi 2 bit cùng một lúc bị hoán vị (0 thành 1 và ngược lại), vừa không thể giúp để sửa được các lỗi mà nó phát hiện thấy.
a. Các mã trước thời kỳ của Hamming
Mã chẵn lẻ
Mã chẵn lẻ thêm một bit vào trong dữ liệu, và bit cho thêm này cho biết số lượng bit có giá trị 1 của đoạn dữ liệu nằm trước là một số chẵn hay một số lẻ. Nếu một bit bị thay đổi trong quá trình truyền dữ liệu, giá trị chẵn lẻ trong thông điệp sẽ thay đổi và do đó có thể phát hiện được lỗi (Chú ý rằng bit bị thay đổi có thể lại chính là bit kiểm tra). Theo quy ước chung, bit kiểm tra có giá trị bằng 1 nếu số lượng bit có giá trị 1 trong dữ liệu là một số lẻ, và giá trị của bit kiểm tra bằng 0 nếu số lượng bit có giá trị 1 trong dữ liệu là một số chẵn. Nói cách khác, nếu đoạn dữ liệu và bit kiểm tra được gộp lại cùng với nhau, số lượng bit có giá trị bằng 1 luôn luôn là một số chẵn.
Việc kiểm tra dùng mã chẵn lẻ là một việc không được chắc chắn cho lắm, vì nếu số bit bị thay đổi là một số chẵn (2, 4, 6 - cả hai, bốn hoặc sáu bit đều bị hoán vị) thì mã này không phát hiện được lỗi. Hơn nữa, mã chẵn lẻ không biết được bit nào là bit bị lỗi, kể cả khi nó phát hiện là có lỗi xảy ra. Toàn bộ dữ liệu đã nhận được phải bỏ đi, và phải truyền lại từ đầu. Trên một kênh truyền bị nhiễu, việc truyền nhận thành công có thể mất rất nhiều thời gian, nhiều khi còn không truyền được nữa. Mặc dù việc kiểm tra bằng mã chẵn lẻ không được tốt cho lắm, song vì nó chỉ dùng 1 bit để kiểm tra cho nên nó có số tổng phí (overhead) thấp nhất, đồng thời, nó cho phép phục hồi bit bị thất lạc nếu người ta biết được vị trí của bit bị thất lạc nằm ở đâu.
Mã hai-trong-năm
Trong những năm của thập niên kỷ 1940, Bell có sử dụng một mã hiệu phức tạp hơn một chút, gọi là mã hai-trong-năm (two-out-of-five code). Mã này đảm bảo mỗi một khối 5 bit (còn được gọi là khối-5) có chính xác hai bit có giá trị bằng 1.
34 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54
Máy tính có thể nhận ra là dữ liệu nhập vào có lỗi nếu trong một khối 5 bit không 2 bit có giá trị bằng 1. Tuy thế, mã hai-trong-năm cũng chỉ có thể phát hiện được một đơn vị bit mà thôi; nếu trong cùng một khối, một bit bị lộn ngược thành giá trị 1, và một bit khác bị lộn ngược thành giá trị 0, quy luật hai-trong-năm vẫn cho một giá trị đúng (remained true), và do đó nó không phát hiện là có lỗi xảy ra.
Tái diễn dữ liệu
Một mã nữa được dùng trong thời gian này là mã hoạt động bằng cách nhắc đi nhắc lại bit dữ liệu vài lần (tái diễn bit được truyền) để đảm bảo bit dữ liệu được truyền, truyền đến nơi nhận trọn vẹn. Chẳng hạn, nếu bit dữ liệu cần được truyền có giá trị bằng 1, một mã tái diễn n=3 sẽ cho truyền gửi giá trị "111". Nếu ba bit nhận được không giống nhau, thì hiện trạng này báo cho ta biết rằng, lỗi trong truyền thông đã xảy ra. Nếu kênh truyền không bị nhiễu, tương đối đảm bảo, thì với hầu hết các lần truyền, trong nhóm ba bit được gửi, chỉ có một bit là bị thay đổi. Do đó các nhóm 001, 010, và 100 đều tương đương cho một bit có giá trị 0, và các nhóm 110, 101, và 011 đều tương đương cho một bit có giá trị 1 - lưu ý số lượng bit có giá trị 0 trong các nhóm được coi là có giá trị 0, là đa số so với tổng số bit trong nhóm, hay 2 trong 3 bit, tương đương như vậy, các nhóm được coi là giá trị 1 có số lượng bit bằng 1 nhiều hơn là các bit có giá trị 0 trong nhóm - chẳng khác gì việc các nhóm bit được đối xử như là "các phiếu bầu" cho bit dữ liệu gốc vậy. Một mã có khả năng tái dựng lại thông điệp gốc trong một môi trường nhiễu lỗi được gọi là mã "sửa lỗi" (error-correcting code).
Tuy nhiên, những mã này không thể sửa tất cả các lỗi một cách đúng đắn hoàn toàn. Chẳng hạn chúng ta có một ví dụ sau: nếu một kênh truyền đảo ngược hai bit và do đó máy nhận thu được giá trị "001", hệ thống máy sẽ phát hiện là có lỗi xảy ra, song lại kết luận rằng bit dữ liệu gốc là bit có giá trị bằng 0. Đây là một kết luận sai lầm. Nếu chúng ta tăng số lần các bit được nhắc lại lên 4 lần, chúng ta có thể phát hiện tất cả các trường hợp khi 2 bit bị lỗi, song chúng ta không thể sửa chữa chúng được (số phiếu bầu "hòa"); với số lần nhắc lại là 5 lần, chúng ta có thể sửa chữa tất cả các trường hợp 2 bit bị lỗi, song không thể phát hiện ra các trường hợp 3 bit bị lỗi.
35 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54 b. Mã Hamming
Càng nhiều bit sửa lỗi thêm vào trong thông điệp, và các bit ấy được bố trí theo một cách là mỗi bỗ trí của nhóm các bit bị lỗi tạo nên một hình thái lỗi riêng biệt, thì chúng ta có thể xác định được những bit bị sai. Trong một thông điệp dài 7- bit, chúng ta có 7 khả năng một bit có thể bị lỗi, như vậy, chỉ cần 3 bit kiểm tra (23
= 8) là chúng ta có thể, không những chỉ xác định được là lỗi trong truyền thông có xảy ra hay không, mà còn có thể xác định được bit nào là bit bị lỗi.
Hamming nghiên cứu các kế hoạch mã hóa hiện có, bao gồm cả mã hai- trong-năm, rồi tổng quát hóa khái niệm của chúng. Khởi đầu, ông xây dựng một danh mục (nomenclature) để diễn tả hệ thống máy, bao gồm cả số lượng bit dùng cho dữ liệu và các bit sửa lỗi trong một khối. Chẳng hạn, bit chẵn lẻ phải thêm 1 bit vào trong mỗi từ dữ liệu (data word). Hamming diễn tả phương pháp này là mã (8,7). Nó có nghĩa là một từ dữ liệu có tổng số bit là 8 bit, trong đó chỉ có 7 bit là các bit của dữ liệu mà thôi. Theo phương pháp suy nghĩ này, mã tái diễn (nhắc lại) ở trên phải được gọi là mã (3,1). Tỷ lệ thông tin là tỷ lệ được tính bằng việc lấy con số thứ hai chia cho con số thứ nhất. Như vậy với mã tái diễn (3,1) ở trên, tỷ lệ thông tin của nó là ⁄
Hamming còn phát hiện ra nan đề với việc đảo giá trị của hai hoặc hơn hai bit nữa, và miêu tả nó là "khoảng cách" (distance) (hiện nay nó được gọi là khoảng cách Hamming (Hamming distance) - theo cái tên của ông). Mã chẵn lẻ có khoảng cách bằng 2, vì nếu có 2 bit bị đảo ngược thì lỗi trong truyền thông trở nên vô hình, không phát hiện được. Mã tái diễn (3,1) có khoảng cách là 3, vì 3 bit, trong cùng một bộ ba, phải bị đổi ngược trước khi chúng ta được một từ mã khác. Mã tái diễn (4,1) (mỗi bit được nhắc lại 4 lần) có khoảng cách bằng 4, nên nếu 2 bit trong cùng một nhóm bị đảo ngược thì lỗi đảo ngược này sẽ đi thoát mà không bị phát hiện.
Cùng một lúc, Hamming quan tâm đến hai vấn đề; tăng khoảng cách và đồng thời tăng tỷ lệ thông tin lên, càng nhiều càng tốt. Trong những năm thuộc niên kỷ 1940, ông đã xây dựng môt số kế hoạch mã hóa. Những kế hoạch này đều dựa trên những mã hiện tồn tại song được nâng cấp và tiến bộ một cách sâu sắc. Bí quyết chìa khóa cho tất cả các hệ thống của ông là việc cho các bit chẵn lẻ gối lên nhau
36 | Sinh viên thực hiện : Hoàng Thanh Tùng– Điện Tử 1-K54
(overlap), sao cho chúng có khả năng tự kiểm tra lẫn nhau trong khi cùng kiểm tra