Chuyển tiếp sửa lỗi
Tôi có một luồng dữ liệu với các thuộc tính sau:
- Nhị phân
- Chiều dài động
- Có trong các khối 20 bit
- Bất kỳ bit ngẫu nhiên nào cũng có thể lật tạo ra lỗi (không có nhiều khả năng các bit liền kề lật cùng nhau)
- Tôi muốn sử dụng khoảng 16 bit làm dữ liệu và 4 bit dự phòng cho mỗi khối, nhưng tôi sẵn sàng thay đổi con số đó
- Xác suất một bit đúng là khoảng 97%
- Lý tưởng nhất là mã có thể sửa 2 bit cho mỗi khối
- Số lượng khối sẽ khá nhỏ, thường là 1-6.
Mã tốt để sử dụng trong trường hợp này là gì? Tôi nghĩ đến Reed-Solomon, nhưng theo bài báo này, đó sẽ là một lựa chọn tồi:
if a data stream is not characterized by error bursts or drop-outs but by random single bit errors,
a Reed-Solomon code is usually a poor choice. More effective codes are available for this case.
Tôi cũng đã xem xét Bossen's b-adjacent algorithm, nhưng có vẻ như nó được thiết kế có tính đến việc các bit lật liền kề có xác suất xảy ra cao hơn.
Trả lời
Mô hình hóa lỗi của bạn dưới dạng nhị thức, hãy xem điều gì sẽ xảy ra nếu bạn sửa một lỗi duy nhất:
Xác suất của 0 hoặc 1 lỗi là $$q=(1-p)^{20}+20(1-p)^{19}p$$ xấp xỉ $0.88$ cho $p=0.03,$ vì vậy xác suất lỗi được mã hóa của bạn trong khi sửa một lỗi là $0.12$.
Xác suất lỗi không có mã hóa là $1-(1-p)^{20}$ xung quanh đó $0.456$ vì vậy bạn sẽ nhận được khá nhiều cải thiện nếu bạn sử dụng mã hóa.
Theo bài báo này ở đây đưa ra$r\geq 3,$ và $2^{r-1}+1\leq n\leq 2^r-1,$ Đây là một $[n,n-r,3]$rút ngắn mã Hamming với một số thuộc tính phát hiện lỗi kép đẹp mắt. Khi nào$n=20,$ cái này cho $r=5,$ vì vậy bạn có một $[n,n-r,3]=[20,15,3]$ lỗi duy nhất sửa mã Hamming bị rút ngắn và bạn có thể truyền $k=15$ bit trên mỗi khối chiều dài $n=20.$