CHƯƠNG 3. GIẢI MÃ REED-SOLOMON
3.3 Thuật toán Guruswami-Sudan
Trước đây, các loại giải mã dựa trên sự phân tích của syndrome. Cách tiếp cận mới Sudan bằng cách giải quyết vấn đề dựa trên giải thích bằng hình học. Phương pháp này không chỉ mở ra cách thức mới để xem xét vấn đề giải mã Reed- Solomon, mà còn cung cấp một phương pháp giải mã rất mạnh là danh sách giải mã (list-decoding).
Theo [5], Thuật toán danh sách giải mã (list-decoding) cung cấp một danh sách của tất cả các từ mã với khoảng cách tm của các từ thu được có khoảng cách r. Trong khi với loại giải mã khoảng cách giới hạn (Bounded Distance (DB) decoding) và thuật toán khả năng giải mã lơn nhất (Maximum likelihood (ML) decoding) có thể sửa được với t = (n – k + 1)/2 lỗi, thuật toán Guruswami-Sudan có thể sửa được với khoảng cách tGS = n - n(k−1)lỗi. Như vậy thuật toán GS có khả năng sửa lỗi tốt hơn cho các loại tỷ lệ mã khác nhau.
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ
Hình 3-3: So sánh các loại giải mã DB, ML, List-decoding.
Gỉa sử từ mã thu được từ mã hóa RS truyền qua kênh truyền là (β1,β2,…,βn) với các từ mã thiết lập là (α1,α2,…,αn). Theo [2], thuật toán Guruswami-Sudan gồm có hai bước chính để thực hiện giải mã:
- Bước nội suy: Dùng để tạo thành một đa thức giải mã nội suy 2 biến Q(x,y) trong trường F[x,y]:
Q(x,y) = i j
j i
ijx y
∑q
,
Q(x,y) bằng 0 ở các hệ số nhân m tại (αi,βi) với i = 1, 2,…n với bậc trọng số nằm trong giới hạn (1, k-1).
- Bước phân tích nhân tử: là tìm tất cả các nhân tử của Q(x,y) có dạng (y - fk(x)) và đưa vào danh sách từ mã ngõ ra.
£ = {f1(x), f2(x), …, fL(x)}
Với bậc fi(x) < k, i = 1, 2,…L.
Thuật toán Koetter-Vardy ứng dụng cho quá trình nội suy của thuật toán GS, và thuật toán Roth_Ruckenstein ứng dụng cho quá trình phân tích nhân tử của thuật toán GS.
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ
3.4 Thuật toán Koetter-Vardy:
Thuật toán quyết giải mã RS định mềm Koetter-Vardy là thuật toán mở rộng của thuật toán Guruswami Sudan cho mã Reed Solomon.
Theo [4], Phía thu sẽ nhận được thông tin mềm từ kênh truyền của ma trận độ tin cậy Π có kích thước q x n . Mổi phần tử (xi, yj) trong ma trận Π sẽ đáp ứng một xác suất cho phần tử yj truyền đi trong thời gian đáp ứng của phần tử cho trước xi. Do đó ma trận Π sẽ hiển thị xác suất của tất cả các điểm. Các bước của thuật toán Koetter-Vardy như sau:
Hình 3-4: Sơ đồ thuật toán Koetter-Vardy
1. Bước quyết định mềm cuối cùng (soft decision front end): Sử dụng thông tin độ tin cậy mềm để xác định được số nguyên dương cho mỗi điểm. Như vậy, các trọng số nguyên dương là tỉ lệ với xác suất tại mỗi điểm. Từ đó tạo thành ma trận hệ số nhân M = [λ Π].
2. Bước nội suy: Tìm đa thức nội suy 2 biến Q(x,y) nhỏ nhất mà nó thỏa tất cả các điểm trong ma trận hệ số nhân. Với bậc của các biến x, y nằm trong khoảng (1, k-1).
3. Bước phân tích nhân tử: Phân tích đa thức nội suy Q(x,y) thành các nhân tử có dạng (y - fk(x)), với bậc của fk(x) < k. Ngõ ra của thuật toán là danh sách các từ mã f(x) là nhân tử của . Sau đó dùng thông tin mềm từ ma trận M sẽ chọn lựa từ mã ngõ ra.
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ Trong số ba thành phần chính của thuật toán, các tính toán nhiều nhất là bước nội suy đa thức 2 biến Q(x,y). Và phần này sẽ được áp dụng trong đề tài. Theo [5,p324], bước phân tích thành nhân tử thì thuật toán Roth-Ruckenstein sẽ thực hiện tốt hơn so với thuật toán Koetter-Vardy.
3.4.1 Bước nội suy đa thức Q(x,y) của thuật toán Koetter-Vardy:
Theo [3], thuật toán thực hiện như sau:
- Tính Cost của ma trận M là: CM = *( 1) 2
1
, ,
, +
∑ i j
j i
j
i m
m .
- Tính số đa thức nội suy Qi(x,y), i = 0, ..L, Với L = [
) 1 ( 2
) 1 ( 8 ) 1 (
1 2
−
− +
− +
−
k
k C k
k M
] ≈
1 2
− k
CM
- Tạo giá trị ban đầu cho các đa thức Ql (x,y), Với 0 ≤ l ≤ L Q0 (x,y) = 1
Q1 (x,y) = y
…
QL (x,y) = yL
Theo [2], cho c = 0, tại những điểm mi,j ≠ 0 có tọa độ (αi,βj) của ma trận M, ta tính nội suy và cập nhật cho đa thức Ql (x,y). Các hệ số cập nhật δ cho đa thức Qi(x,y) tại bước thứ (c+1) tính như sau:
δ c,l = DuHc+1vc+1[Q (αc,βc) ], Với 0 ≤ l ≤ L Trong đó, DuH,v là công thức tính dạo hàm của Hasse:
Đặt J1 là tập hợp các phần tử của l khác 0. Tất cả các phần tử l∉ J1 thì đa thức cập nhật là không thay đổi.
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ Qc+1,l(x,y) = Qc,l(x,y)
Cho l∈ J1 chúng ta tính đa thức có bậc nhỏ nhất:
lmin = arg min { Qc,l(x,y): l∈ J1} δ min = δ c,lmin
Qmin (x,y) = Qc,lmin(x,y)
Nếu l ≠ lmin thì đa thức cập nhật được tính như sau:
Qc+1,l(x,y) = δ min Qc,l(x,y) + δ c,l Qmin (x,y) Nếu l = lmin thì đa thức cập nhật được tính như sau:
Qc+1,lmin(x,y) = δ minx Qmin (x,y) - DuHc+1vc+1[x Qmin (x,y)]|(αc+1,βc+1) Qmin (x,y) Kết thúc quá trình nội suy tại những điểm mi,j ≠ 0, sẽ chọn đa thức có bậc nhỏ nhất.
Q(x,y) = min {QC,l(x,y) : 0 ≤ l ≤ L}
VD 3.1: Theo VD 7.20 của [5,p346] về thuật toán Koetter-Vardy như sau:
(α5,α2,α0,α4,α3,α2,α1)
Cho các cặp điểm (1, α3), (α1,α4), (α2,α5), (α3,α7) và (α4,α8) hoạt động trên trường GF(24) với 1 + α1 + α4 = 0. Dùng thuật toán Koetter-Vardy tìm đa thức nội suy Q(x,y) với hệ số nhân m =1 và số đa thức nội suy L = 4.
Đầu tiên khởi tạo giá trị ban đầu cho các đa thức nội suy:
G0: g0(x,y) = 1, g1(x,y) = y, g2(x,y) = y2, g3(x,y) = y3, g4(x,y) = y4. Bước nội suy 1:
i = 0: (r,s) = (0,0), (xi, yi) = (1, α3).
Các hệ số cập nhật cho đa thức:
Δ0 = g0(1, α3) = 1, Δ1 = g1(1, α3) = α3, Δ2 = g2(1, α3) = α6, Δ3 = g3(1, α3) = α9, Δ4 = g4(1, α3) = α12.
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ J = {0,1,2,3,4}, j* = 0, f=1, Δ = 1.
Đa thức cập nhật:
G1: g0 = 1 + x, g1 = α3+y, g2 = α6 + y2, g3 = α9 + y3, g4 = α12 + y4. Bước nội suy 2:
i = 1: (r,s) = (0,0), (xi, yi) = (α1,α4).
Các hệ số cập nhật cho đa thức:
Δ0 = α4, Δ1 = α7, Δ2 = α14, Δ3 = α8, Δ4 = α13. J = {0,1,2,3,4}, j* = 0, f = 1+x, Δ = α4.
Đa thức cập nhật:
G2: g0 = α + α4x + x2, g1 = α7x + α4y, g2 = (α11 + α14x) + α4y2, g3 = (α3 +α8x) + α4y3, g4 = (α12 + α13x) + α4y4.
Bước nội suy 3:
i = 2: (r,s) = (0,0), (xi, yi) = (α2,α5).
Các hệ số cập nhật cho đa thức:
Δ0 = α13, Δ1 =0, Δ2 = α8, Δ3 = α6, Δ4 = α2. J = {0,1,2,3,4}, j* = 0, f = α +α4x + x2, Δ = α13. Đa thức cập nhật:
G3: g0 = α3 + α11x + α10x2 + x3, g1 = α7x + α4y, g2 = α8x2 + α2y2, g3 = (α14 + α7x + α6x2) + α2y3, g4 = (α12 + αx + α2x2) + α2y4.
Bước nội suy 4:
i = 3: (r,s) = (0,0), (xi, yi) = (α3,α7).
Các hệ số cập nhật cho đa thức:
Δ0 = α14, Δ1 = α14, Δ2 =α7, Δ3 =α2, Δ4 =α3. J = {0,1,2,3,4}, j* = 1, f = α7x + α4y , Δ =α14. Đa thức cập nhật:
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ G4: g0 = (α2 + α7x + α9x2 + α14x3) + α3y, g1 = (α10x + α7x2) + (α7 + α4x)y, g2
= (α14x + α7x2) + α11y + α y2, g3 = (α13 + α5x + α5 x2) + α6y + α y3, g4 = (α11 + α5x + αx2) + α7y + α y4.
Bước nội suy 5:
i = 4: (r,s) = (0,0), (xi, yi) = (α4,α8).
Các hệ số cập nhật cho đa thức:
Δ0 = α11, Δ1 = α8, Δ2 =α11, Δ3 =α2, Δ4 =α10.
J = {0,1,2,3,4}, j* = 0, f = (α2 + α7x + α9x2 + α14x3) + α3y Đa thức cập nhật:
G5: g0 = (α6 + α9x + α5x2+ α x3 + α14x4) + (α7 + α3x)y, g1 = (α9 + α8x + α9x2 + α6x3) + (α12 + x)y, g2 = (α13 + α12x + α11 x2 + α10x3) + α y + α12y2, g3 = (α14 + α3x + α6x2+ α x3) + αy + α12y3, g4 = (α2 + α5x +α6x2+ α9x3) + α8y + α12y4 Cuối cùng ta có đa thức nội suy ngõ ra 2 biến là:
Q0(x,y) = g1(x,y) = (α9 + α8x + α9x2 + α6x3) + (α12 + x)y.
3.5 Thuật toán Roth-Ruckenstein:
Thuật toán Roth-Ruckenstein là một phương pháp nhanh để phân tích nhân tử từ đa thức nội suy Q(x,y) với bậc của f(x) < k. Thuật toán sẽ trình bày dựa theo [7].
Chúng ta bắt đầu với đa thức f(x):
f(x) = f0 + f1x + f2x2 +…
Chúng ta gọi f(x) là y-root của Q(x,y) nếu thỏa điều kiện Q(x,f(x)) = 0.
Thay x bằng 0 ta có: f(0) = f0 và Q(0, f0) = 0. Có nghĩa f0 là y-root của Q(x,y).
Gọi <<Q(x,y)>> là đa thức chuẩn hóa của Q(x,y) thì ta có:
<<Q(x,y)>> = Q(x,y) / xm,
Với m là số tự nhiên sao cho xm là nhân tử của Q(x,y), ký hiệu là xm|Q(x,y).
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ Hệ số đầu tiên f0 cũng là y-root của <<Q(0,y)>>:
(y - f0) | Q(0,y) ⇔ (y - f0) | xm<<Q(0,y)>> ⇔ (y - f0) | <<Q(0,y)>>
Để tìm f1 thì chúng ta thực hiện tiếp như sau. Ta có : (y - ( f0 + f1x + f2x2 +…)) | Q(x,y)
Thay y bằng xy + f0 thì ta sẽ được:
(xy + f0 - ( f0 + f1x + f2x2 +…)) | Q(x,xy + f0)
⇔ x(y – (f1 + f2x + f3 x2 +…)) | Q(x,xy + f0)
⇔ (y – (f1 + f2x + f3 x2 +…)) | << Q(x,xy + f0)>> = Q’(x,y)
Để tìm f1 từ ta cũng làm tương tự như tìm f0, lúc đó f1 là y-root của Q’(0,y).
Lặp lại quá trình tìm kiếm hệ số fi như trên, ta sẽ tìm được đa thức f(x).
Quá trình tìm kiếm theo hình cây, nên kết quả tìm kiếm sẽ có nhiều hàm f(x).
Và các đa thức f(x) sẽ đưa vào danh sách từ mã ngõ ra.
£ = {f1(x), f2(x), …, fL(x)}
Đa thức f(x) nào đi qua nhiều điểm mi,j ≠ 0 của ma trận M nhất thì sẽ chọn là từ mã ngõ ra. Và cũng là kết thúc thuật toán giải mã Reed Solomon quyết định mềm.
VD 3.2: Theo VD 7.24 của [5,p354] về thuật toán phân tích nhân tử của Roth- Ruckenstein như sau:
Cho đa thức 2 biến :
Q(x,y) = ( 4 + 4x2+ 2x3+3x4+ x5 + 3x6+ 4x7) + ( 1 +2x + 2x2+ 3x4+ 3x6)y + (1 +x + 2x2+ x3+ x4)y2+ (4 +2x)y3
Trên trường GF(5) với độ sâu tìm kiếm là D = 2.
- Tại nút 1:
Q(0,y) = 4 +y + y2+ y3
Có gốc là: {1,4}, là nghiệm của đa thức Q(0,y) Chọn gốc là 1, thì đa thức tại nút 2 là:
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ
<<Q(x, xy+1)>>
- Tại nút 2, đa thức:
Q(0,y) = 3 + 3y2 Có gốc là {2,3}
Chọn gốc là 2, thì đa thức tại nút 3 là:
<<Q(x, xy+2)>>
- Tại nút 3:
Q(x,0) = 0
Do đó danh sách từ mã là gốc của nút 1 và 2 là {1,2}, đa thức ngõ ra p(x) = 1 + 2x.
Trở lại nút 2, gốc được lựa chọn là 3 thì đa thức nút 4 là:
<<Q(x, xy+3)>>
- Tại nút 4, đa thức : Q(0,y) = 2 + 3y
Có gốc là {1}, nên đa thức tại nút 5 là:
<<Q(x, xy+1)>>
- Tại nút 5, đa thức Q(x,0) ≠ 0, mà bậc của cây tìm kiếm là 3 lớn hơn D=2. Do đó ngõ ra nhánh này không có đa thức p(x).
Trở lại nút 1, gốc lựa chọn là 4 và nút 6 có đa thức là:
<<Q(x, xy+4)>>
- Tại nút 6, đa thức:
Q(0,y) = 2 + y
Có gốc là {3}, do đó nút 7 có đa thức là :
<<Q(x, xy+3)>>
- Tại nút 7, đa thức:
Q(0, y) = 3 + y
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ Có gốc là {2}, và nút 8 có đa thức là:
<<Q(x, xy+2)>>
- Tại nút 8, đa thức:
Q(x, 0) = 0
Do đó danh sách gốc được chọn tại nút này là {4,3,2}, tạo thành đa thức ngõ ra p(x)
= 4 + 3x + 2x2.
Danh sách đa thức tạo thành của quá trình phân tích nhân tử là:
{ p(x) = 1 + 2x, p(x) = 4 + 3x + 2x2}
Thiết kế mạch giải mã Reed-Solomon trên FPGA GVHD: ThS. Hồ Trung Mỹ