Trong thuật toán Welch-Berlekamp để giải mã mã Reed-Solomon, người ta sẽ đưa ra một danh sách các điểm đại diện cho một thông báo có lỗi trên ở các vị trí không xác định (và được đưa cho thuật toán). Đầu ra là một đa thức đi qua tất cả các điểm đã cho ngoại trừ những điểm xảy ra lỗi.e b i e
Phương pháp này bao gồm việc giải một hệ phương trình tuyến tính có dạng
với tất cả trong đó có độ và có độ lớn nhất là . Các biến là các hệ số của và .E e Q e + k E Q
Để đảm bảo rằng có độ người ta thường thêm ràng buộc rằng hệ số của là 1 với hệ thống tuyến tính ở trên. Tuy nhiên, trong thực tế người ta không nhất thiết phải biết . Một cách không hiệu quả (nhưng vẫn là thời gian đa thức) để giải quyết vấn đề này là thử cho tất cả các giá trị bắt đầu bằng đi xuống cho đến khi tìm thấy giải pháp.e x e e e ( n + k - 1 ) / 2 - 1
Câu hỏi của tôi là: có cách nào hiệu quả hơn để xác định không? Ngoài ra, có một sửa đổi cho hệ thống tuyến tính cho phép một người sử dụng giới hạn trên trên thay vì giá trị chính xác?
Cụ thể, tôi muốn sử dụng bộ giải mã cụ thể này cho các mã Reed-Solomon, và không phải là một thuật toán hoàn toàn khác dựa trên các kỹ thuật khác.
Đáp lại câu trả lời của DW, đây là ví dụ làm việc của tôi. Tất cả mọi thứ được thực hiện modulo 7.
plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]
Vì vậy, lỗi là ở điểm thứ ba.
Khi phương trình đa thức trong câu hỏi là
Và cắm cho hệ thống ở dạng ma trận:
[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
Hàng cuối cùng là ràng buộc mà . Áp dụng loại bỏ Gaussian chúng ta nhận được
[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]
Và chọn 1 cho cả hai biến miễn phí, chúng ta có một vectơ giải pháp là
[2, 2, 1, 4, 1, 0, 1, 1]
Dịch ra
E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4
Và không chia . Lưu ý rằng các yếu tố là
Với tôi nhận được một giải pháp tốt:
system is:
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0]
[0, 1, 0, 0, 0, 0, 1]
reduced system is:
[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]
solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0
Lưu ý rằng mặc dù mẫu phản ứng ở trên được tạo bởi mã tôi đã viết từ đầu (về cơ bản đó là điều đầu tiên tôi đã thử), người ta có thể kiểm tra các giải pháp là hợp lệ bằng tay, vì vậy ngay cả khi mã của tôi bị lỗi, nó vẫn là một ví dụ hợp lệ cho khiếu nại sử dụng hoạt động.