Chuyển tiếp sửa lỗi

Sep 29 2020

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

1 kodlu Sep 30 2020 at 18:40

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.$