Mã hóa kênh truyền
259
>> [genpoly,T] = rsgenpoly(N,K,prim_poly,B)
Ngoài hai thông số cơ bản của bộ mã là N và K, người sử dụng có thể cung cấp thêm hai
thông số (không bắt buộc):
o
prim_poly
: xác định đa thức nguyên trong trường GF(N+1) nhận A là nghiệm thay vì
dùng đa thức nguyên mặc định của MATLAB.
prim_poly
là một số nguyên mà biểu diễn
nhị phân của nó chính là các hệ số của đa thức nguyên nói trên theo thứ tự số mũ giảm dần (ví
dụ:
prim_poly
= 13 =
2
1101
sẽ biểu diễn đa thức nguyên
1
2
3
+
+ D
D
)
o B: nếu cung cấp thêm thông số này thì hàm rsgenpoly sẽ trả về đa thức
)
)...(
)(
(
1
1
−
−
+
+
−
−
−
K
N
B
B
B
A
X
A
X
A
X
(B là một số nguyên).
Ví dụ:
>> r = rsgenpoly(15,13)
r = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal)
Array elements =
1 6 8
trả về đa thức
3
2
2
)
(
A
X
A
A
X
+
+
+
với A là nghiệm của đa thức nguyên trong GF(16).
Mã hoá và giải mã Reed-Solomon:
Để mã hoá một thông điệp msg dùng bộ mã Reed-Solomon [n,k], ta sử dụng hàm rsenc với
cú pháp sau:
>> code = rsenc(msg,n,k,genpoly,paritypos)
genpoly
và
paritypos
là hai thông số không bắt buộc;
genpoly
là một vector hàng gồm
các hệ số của đa thức sinh của phép mã hoá,
paritypos
cho biết vị trí của các ký hiệu kiểm
tra thêm vào thông điệp là ở đầu (
‘beginning’
) hay ở cuối (
‘end’
). Giá trị mặc định là
‘end’
.
Thông điệp mã hoá sẽ được giải mã bằng hàm rsdec:
>> [decoded,cnumerr,ccode] = rsdec(code,n,k,genpoly,paritypos)
decoded là một dãy Galois biểu diễn thông điệp đã giải mã. cnumerr là một vector cột,
mỗi phần tử của nó là số lỗi đã được sửa khi giải mã hàng tương ứng trong thông điệp mã
hoá. Nếu số lỗi lớn hơn (n-k)/2, bộ mã không có khả năng sửa lỗi. Khi đó, số lỗi trả về là -1
và decoded sẽ lấy hàng tương ứng của code và bỏ đi n-k ký hiệu cuối. ccode có cùng format
như code, nó biểu diễn thông điệp mã hoá chính xác (tức là dãy code sau khi đã sửa những
chỗ sai). Nếu bộ mã không sửa lỗi được ở hàng nào thì trong dãy ccode, hàng đó sẽ không
thay đổi so với dãy code.
Sau đây là một số ví dụ minh hoạ vấn đề mã hoá và giải mã Reed-Solomon:
Ví dụ 17-2. Mã hoá một thông điệp gồm 4 từ bằng mã Reed-Solomon [7,3]. Tạo lỗi ngẫu
nhiên và cộng vào thông điệp mã hoá. Giải mã và so sánh với thông điệp ban đầu.
Trong thí dụ này ta tạo các lỗi ngẫu nhiên nhưng thoả mãn điều kiện tổng số lỗi trong mỗi
hàng đúng bằng t = (n – k)/2 = 2 lỗi. Như vậy bộ mã có khả năng sửa tất cả các lỗi sai.
m = 3; % Số bit trên một ký hiệu
n = 2^m-1; k = 3; % Chiều dài từ mã và chiều dài thông điệp
t = (n-k)/2; % Khả năng sửa lỗi của bộ mã