Trong lý thuyết mã hóa, **mã BCH** là một lớp các mã sửa lỗi vòng xây dựng bằng trường hữu hạn. Mã BCH được phát minh năm 1959 bởi Hocquenghem, và một cách độc lập năm 1960 bởi Bose và Ray-Chaudhuri. Tên viết tắt *BCH* gồm chữ cái đầu của tên những người phát minh ra loại mã này.

Một trong những tính năng chính của mã BCH là khi thiết kế, có thể điều chỉnh chính xác số lỗi mã có thể sửa được. Cụ thể hơn, có thể thiết kế mã BCH nhị phân sửa được nhiều lỗi bit. Một lợi thế khác của mã BCH là có thể giải mã dễ dàng bằng một phương pháp đại số gọi là giải mã hội chứng. Điều này giúp đơn giản hóa việc thiết kế bộ giải mã cho mã này bằng phần cứng điện tử sử dụng ít năng lượng.

Mã BCH được dùng trong nhiều ứng dụng như liên lạc vệ tinh, máy nghe CD, DVD, ổ đĩa, SSD và mã vạch hai chiều.

Cách xây dựng
-------------

### Mã BCH nghĩa hẹp nguyên thủy

Với một số nguyên tố {\displaystyle q} và hai số nguyên dương m và d thỏa mãn {\displaystyle d\leq q^{m}-1}, một mã BCH nghĩa hẹp nguyên thủy trên trường hữu hạn {\displaystyle \mathrm {GF} (q)} với chiều dài mã {\displaystyle n=q^{m}-1} và khoảng cách nhỏ nhất lớn hơn hoặc bằng d được xây dựng như sau.

Đặt \alpha  là một phần tử nguyên thủy của {\displaystyle \mathrm {GF} (q^{m})}. Với mọi số nguyên dương i, đặt {\displaystyle m\_{i}(x)} là đa thức nhỏ nhất của {\displaystyle \alpha ^{i}}. Đa thức sinh của mã BCH được định nghĩa là bội chung nhỏ nhất {\displaystyle g(x)={\rm {lcm}}(m\_{1}(x),\ldots ,m\_{d-1}(x))}. Có thể thấy {\displaystyle g(x)} là một đa thức có hệ số trong {\displaystyle \mathrm {GF} (q)} và chia hết {\displaystyle x^{n}-1}. Do đó mã đa thức định nghĩa bởi {\displaystyle g(x)} là một mã vòng.

### Ví dụ

Đặt {\displaystyle q=2} và {\displaystyle m=4} (nên {\displaystyle n=15}). Ta sẽ xét các giá trị khác nhau cho d. Tồn tại nghiệm nguyên thủy {\displaystyle \alpha \in GF(16)} thỏa mãn


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle \alpha ^{4}+\alpha +1=0} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(1)** |

đa thức nhỏ nhất của nó trên {\displaystyle GF(2)} là: {\displaystyle m\_{1}(x)=x^{4}+x+1}. 
Ghi chú là trong {\displaystyle GF(2^{4})}, đẳng thức {\displaystyle (a+b)^{2}=a^{2}+ab+ab+b^{2}=a^{2}+b^{2}} là đúng, nên
{\displaystyle m\_{1}(\alpha ^{2})=m\_{1}(\alpha )^{2}=0}.
Vì vậy {\displaystyle \alpha ^{2}} là nghiệm của {\displaystyle m\_{1}(x)}, nên 

{\displaystyle m\_{2}(x)=m\_{1}(x)=x^{4}+x+1}.
Để tính {\displaystyle m\_{3}(x)}, có thể thấy, bằng cách áp dụng (**1**) nhiều lần, ta thu được hệ các quan hệ tuyến tính sau:

* {\displaystyle 1=0\alpha ^{3}+0\alpha ^{2}+0\alpha +1}
* {\displaystyle \alpha ^{3}=1\alpha ^{3}+0\alpha ^{2}+0\alpha +0}
* {\displaystyle \alpha ^{6}=1\alpha ^{3}+1\alpha ^{2}+0\alpha +0}
* {\displaystyle \alpha ^{9}=1\alpha ^{3}+0\alpha ^{2}+1\alpha +0}
* {\displaystyle \alpha ^{12}=1\alpha ^{3}+1\alpha ^{2}+1\alpha +1}

Năm vế phải là các tổ hợp tuyến tính của 4 lũy thừa giống nhau nên chúng phụ thuộc tuyến tính. Thật vậy, ta có tổ hợp tuyến tính {\displaystyle \alpha ^{12}+\alpha ^{9}+\alpha ^{6}+\alpha ^{3}+1=0}.
Vì không tồn tại quan hệ phụ thuộc tuyến tính bậc nhỏ hơn nên đa thức nhỏ nhất của {\displaystyle \alpha ^{3}} là:{\displaystyle m\_{3}(x)=x^{4}+x^{3}+x^{2}+x+1}.
Tiếp tục tương tự như vậy, ta tìm được

{\displaystyle m\_{4}(x)=m\_{2}(x)=m\_{1}(x)=x^{4}+x+1,\,}
{\displaystyle m\_{5}(x)=x^{2}+x+1,\,}
{\displaystyle m\_{6}(x)=m\_{3}(x)=x^{4}+x^{3}+x^{2}+x+1,\,}
{\displaystyle m\_{7}(x)=x^{4}+x^{3}+1.\,}
Mã BCH với {\displaystyle d=1,2,3} có đa thức sinh

{\displaystyle g(x)=m\_{1}(x)=x^{4}+x+1.\,}
Nó có khoảng cách Hamming nhỏ nhất lớn hơn hoặc bằng 3, và do đó sửa được 1 lỗi. Vì đa thức sinh có bậc 4, mã này có 11 bit dữ liệu và 4 bit kiểm tra.

Mã BCH với {\displaystyle d=4,5} có đa thức sinh

{\displaystyle g(x)={\rm {lcm}}(m\_{1}(x),m\_{3}(x))=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)=x^{8}+x^{7}+x^{6}+x^{4}+1.\,}
Nó có khoảng cách Hamming nhỏ nhất lớn hơn hoặc bằng 5 và do đó sửa được 2 lỗi. Vì đa thức có bậc 8, mã này có 7 bit dữ liệu và 8 bit kiểm tra.

Mã BCH với {\displaystyle d=6,7} có đa thức sinh

{\displaystyle {\begin{aligned}g(x)&{}={\rm {lcm}}(m\_{1}(x),m\_{3}(x),m\_{5}(x))\\&{}=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)(x^{2}+x+1)\\&{}=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1.\end{aligned}}}
Nó có khoảng cách Hamming nhỏ nhất lớn hơn hoặc bằng 7 và do đó sửa được 3 lỗi. Mã này có 5 bit dữ liệu và 10 bit kiểm tra.

Mã BCH với {\displaystyle d=8} và lớn hơn có đa thức sinh

{\displaystyle {\begin{aligned}g(x)&{}={\rm {lcm}}(m\_{1}(x),m\_{3}(x),m\_{5}(x),m\_{7}(x))\\&{}=(x^{4}+x+1)(x^{4}+x^{3}+x^{2}+x+1)(x^{2}+x+1)(x^{4}+x^{3}+1)\\&{}=x^{14}+x^{13}+x^{12}+\cdots +x^{2}+x+1.\end{aligned}}}
Mã này có khoảng cách Hamming nhỏ nhất bằng 15 và sửa được 7 lỗi. Nó có 1 bit dữ liệu và 14 bit kiểm tra. Mã này chỉ có đúng hai mã tự: 000000000000000 và 111111111111111.

Ghi chú
-------

1. ↑  Reed & Chen 1999, tr. 189
2. ↑  "Phobos Lander Coding System: Software and Analysis" (PDF). Truy cập ngày 25 tháng 2 năm 2012.
3. ↑  "Sandforce SF-2500/2600 Product Brief". Truy cập ngày 25 tháng 2 năm 2012.

Tham khảo
---------

### Tài liệu nguyên thủy

* Hocquenghem, A. (9/1959), "Codes correcteurs d'erreurs", *Chiffres* (bằng tiếng Pháp), Paris, **2**: 147–156 Kiểm tra giá trị ngày tháng trong: `|date=` (trợ giúp)
* Bose, R. C.; Ray-Chaudhuri, D. K. (3/1960), "On A Class of Error Correcting Binary Group Codes", *Information and Control*, **3** (1): 68–79, ISSN 0890-5401 Kiểm tra giá trị ngày tháng trong: `|date=` (trợ giúp)

### Tài liệu khác

* Gilbert, W. J.; Nicholson, W. K. (2004), *Modern Algebra with Applications* (ấn bản 2), John Wiley
* Gill, John (unknown), *EE387 Notes #7, Handout #28* (PDF), Stanford University, tr. 42–45, Bản gốc (PDF) lưu trữ ngày 30 tháng 6 năm 2014, truy cập ngày 17 tháng 4 năm 2012 Đã định rõ hơn một tham số trong `|accessdate=` và `|access-date=` (trợ giúp); Kiểm tra giá trị ngày tháng trong: `|year=` (trợ giúp)
* Gorenstein, Daniel; Peterson, W. Wesley; Zierler, Neal (1960), "Two-Error Correcting Bose-Chaudhuri Codes are Quasi-Perfect", *Information and Control*, **3** (3): 291–294
* Lidl, Rudolf; Pilz, Günter (1999), *Applied Abstract Algebra* (ấn bản 2), John Wiley
* Lin, S.; Costello, D. (2004), *Error Control Coding: Fundamentals and Applications*, Englewood Cliffs, NJ: Prentice-Hall
* MacWilliams, F. J.; Sloane, N. J. A. (1977), *The Theory of Error-Correcting Codes*, New York, NY: North-Holland Publishing Company
* Reed, Irving S.; Chen, Xuemin (1999), *Error-Control Coding for Data Networks*, Boston, MA: Kluwer Academic Publishers, ISBN 0-7923-8528-4
* Rudra, Atri, *CSE 545, Error Correcting Codes: Combinatorics, Algorithms and Applications*, University at Buffalo, Bản gốc lưu trữ ngày 2 tháng 7 năm 2010, truy cập ngày 17 tháng 4 năm 2012 Đã định rõ hơn một tham số trong `|accessdate=` và `|access-date=` (trợ giúp)