Mã BCH

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ố q và hai số nguyên dương m và d thỏa mãn 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 \mathrm{GF}(q) với chiều dài mã 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 \mathrm{GF}(q^m). Với mọi số nguyên dương i, đặt m_i(x) là đa thức nhỏ nhất của \alpha^i. Đa thức sinh của mã BCH được định nghĩa là bội chung nhỏ nhất g(x) = {\rm lcm}(m_1(x),\ldots,m_{d-1}(x)). Có thể thấy g(x) là một đa thức có hệ số trong \mathrm{GF}(q) và chia hết x^n - 1. Do đó mã đa thức định nghĩa bởi g(x) là một mã vòng.

### Ví dụ

Đặt q=2 và m=4 (nên 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 \alpha\in GF(16) thỏa mãn
:
đa thức nhỏ nhất của nó trên GF(2) là: m_1(x) = x^4+x+1. 
Ghi chú là trong GF(2^4), đẳng thức (a+b)^2 = a^2 + ab + ab + b^2 = a^2 + b^2 là đúng, nên
m_1(\alpha^2) = m_1(\alpha)^2 = 0.
Vì vậy \alpha^2 là nghiệm của m_1(x), nên 
:m_2(x) = m_1(x) = x^4+x+1.
Để tính m_3(x), có thể thấy, bằng cách áp dụng () nhiều lần, ta thu được hệ các quan hệ tuyến tính sau:
* 1 = 0\alpha^3 + 0\alpha^2 + 0\alpha + 1
* \alpha^3 = 1\alpha^3 + 0\alpha^2 + 0\alpha + 0
* \alpha^6 = 1\alpha^3 + 1\alpha^2 + 0\alpha + 0
* \alpha^9 = 1\alpha^3 + 0\alpha^2 + 1\alpha + 0
* \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 \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 \alpha^3 là: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

:m_4(x) = m_2(x) = m_1(x) = x^4+x+1,\,
:m_5(x) = x^2+x+1,\,
:m_6(x) = m_3(x) = x^4+x^3+x^2+x+1,\,
:m_7(x) = x^4+x^3+1.\,

Mã BCH với d=1,2,3 có đa thức sinh

: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 d=4,5 có đa thức sinh

: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 d=6,7 có đa thức sinh

:
\begin{align}
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{align}


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 d=8 và lớn hơn có đa thức sinh

:
\begin{align}
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{align}


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ú

## Tham khảo
### Tài liệu nguyên thủy
* 
*

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