Báo cáo mô phỏng thuật toán CRC.doc

18
Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC Phần I : Lý thuyết 1. Định nghĩa. CRC ( Cyclic Redundancy Check ) còn gọi là phương pháp mã đa thức hoặc mã vòng. Phương pháp này được sử dụng trong hầu hết các hệ thống truyền thông. Tuy cái tên của nó không biểu hiện nhiều, nhưng ý tưởng ở đây là thông tin kiểm lỗi ( ở đây được gọi là checksum ) phải được tính bằng một thuật toán thích hợp, trong đó giá trị mỗi bit của thông tin nguồn đều được tham ra nhiều lần vào quá trình tính toán. Để tính toán thông tin kiểm lỗi đó, người ta dùng một “ đa thức sinh ” G ( generator polynomial ) có một dạng đặc biệt. Chính vì thế phương pháp này còn được gọi là phương pháp dùng đa thức. G được quy ước dưới dạng nhị phân, tức các hệ số của nó chỉ có giá trị 1 hoặc 0 tương ứng với các chữ số trong một dãy bit. Ví dụ : Dạng đa thức : G = x 7 + x 6 + x 5 + x 2 + 1 Dạng nhị phân : G = 11100101 2. Phương pháp - Coi bản tin phát đi như một đa thức - Máy phát chia đa thức bản tin cho một đa thức sinh cho trước - Phần dư được gắn vào cuối bản tin - Dữ liệu(bản tin với phần dư) được phát đến máy thu Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 1

Transcript of Báo cáo mô phỏng thuật toán CRC.doc

Page 1: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Phần I : Lý thuyết

1. Định nghĩa.CRC ( Cyclic Redundancy Check ) còn gọi là phương pháp mã đa thức hoặc mã vòng.

Phương pháp này được sử dụng trong hầu hết các hệ thống truyền thông. Tuy cái tên

của nó không biểu hiện nhiều, nhưng ý tưởng ở đây là thông tin kiểm lỗi ( ở đây được

gọi là checksum ) phải được tính bằng một thuật toán thích hợp, trong đó giá trị mỗi

bit của thông tin nguồn đều được tham ra nhiều lần vào quá trình tính toán.

Để tính toán thông tin kiểm lỗi đó, người ta dùng một “ đa thức sinh ” G ( generator

polynomial ) có một dạng đặc biệt. Chính vì thế phương pháp này còn được gọi là

phương pháp dùng đa thức. G được quy ước dưới dạng nhị phân, tức các hệ số của nó

chỉ có giá trị 1 hoặc 0 tương ứng với các chữ số trong một dãy bit.

Ví dụ :

Dạng đa thức : G = x7 + x6 + x5 + x2 + 1

Dạng nhị phân : G = 11100101

2. Phương pháp- Coi bản tin phát đi như một đa thức

- Máy phát chia đa thức bản tin cho một đa thức sinh cho trước

- Phần dư được gắn vào cuối bản tin

- Dữ liệu(bản tin với phần dư) được phát đến máy thu

- Máy thu chia dữ liệu đã nhận được cho cùng một đa thức sinh

- Nếu số dư bằng 0 thì không có lỗi xảy ra trong đường truyền

- Nếu số dư khác 0 thì đã có lỗi xảy ra trong đường truyền

3. Cách tạo phần dư CRC- Giả sử G là đa thức sinh có bậc n;I là dãy thong tin nguồn

- Thêm n bit 0 vào cuối chuỗi bit I được đa thức nhị phân P

- Chia đa thức P cho đa thức G theo quy tắc của phép trừ không nhớ

- - Phần dư R của phép chia được thay thế cho n bit 0 bổ sung trong P để được

đa thức D là dãy bit được gửi đi thay cho I (D=P+R)

- Theo quy tắc của phép chia đa thức nhị phân nếu P-R chia hết cho G thì P+R

cũng chia hết cho G

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 1

Page 2: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

- Dãy bit nhận được (D’) sẽ được đem chia cho G. Nếu phép chia không có dư

máy thu sẽ xóa phần CRC đi và dữ liệu được chấp nhận. Nếu phép chia có dư

dữ liệu bị từ chối và yêu cầu truyền lại

Ví dụ :

- Dãy bit truyền đi là:

I=100100

- Đa thức sinh:

G=x3+x2+1 (tương ứng với chuỗi 1101)

- Đa thức nhị phân:

P=100100000

- Phần dư CRC:

4. Cách chọn đa thức sinhĐa thức được chọn phải thỏa mãn hai tính chất sau:

- Không chia hết cho x. Điều này đảm bảo tất cả các lỗi đa bit có độ tương

đương bậc của đa thức được phát hiện.

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 2

Page 3: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

- Không chia hết cho x+1. Điều này đảm bảo tất cả các lỗi đa bit có số lẻ các bit

bị lỗi được phát hiện

5. Đánh giá- CRC có thể phát hiện được tất cả các lỗi có một số lẻ bit bị lỗi

- CRC có thể phát hiện được tất cả các lỗi đa bit có độ dài nhỏ hơn hoặc bằng

bậc của đa thức

- CRC có thể phát hiện được các lỗi đa bit có độ dài lớn hơn bậc của đa thức với

xác xuất cao

- Một điều đáng chú ý là tuy phương pháp CRC có vẻ như phức tạp, nhưng thực sự việc thể

hiện nó lại rất đơn giản. Phép chia đa thức nhị phân được thực hiện thuần túy bởi các phép

trừ không có nhớ - hay chính là các phép logic XOR. Bên cạnh đó chỉ cần các phép sao chép

và so sánh bit thông thường.

Loại lỗi Chất lượng phát hiện lỗiCác lỗi bit đơn 100%Các lỗi bit kép 100% khi đa thức sinh có ít nhất 3 bit 1Một số lẻ các bit bị lỗi 100% khi đa thức sinh không chia hết

cho x+1Một cụm lỗi có chiều dài < n+1

100%

Một cụm lỗi có chiều dài = n+1

Xác suất bằng 1-(1/2)n-1

Một cụm lỗi có chiều dài > n+1

Xác xuất bằng 1-(1/2)n-1

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 3

Page 4: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Phần II : Demo mô phỏng thuật toán CRC

1. Yêu cầu của chương trình.- Nhập đa thức sinh ( có thể kiểm tra điều kiện của đa thức sinh ), xâu bít dữ

liệu, tính ra xâu bít truyền đi.

- Mô phỏng được phép chia đa thức không nhớ giống như Silde của thầy.

- Thực hiện kiểm tra dữ liệu nhận được.

2. Phân tích thuật toán CRC - Giả sử đa thức G có bậc n, dãy bit mang thông tin I được thêm n bit 0 và coi

như một đa thức nhị phân P.

- Đa thức P được chia cho đa thức G, dựa vào các quy tắc đơn giản của phép trù

không nhớ như sau:

1 – 1 = 0

0 – 0 = 0

1 – 0 = 1

0 – 1 = 1

- Không cần quan tâm đến kết quả của phép chia, phần dư R ( lấy n chữ số ) của

phép chia được thay thế vào chỗ của n chữ số 0 bổ sung trong P , tức là ta có

D = P + R. Theo tính chất của phép chia đa thức nhị phân, nếu D – R chia hết

cho G thì D = P + R cũng vậy. R được gọi là checksum và D chính là dãy bit

được gửi đi thay cho I.

- Giả sử dãy bit nhận được là D’ không chia hết cho G thì tức là D khác D’, ta có

thể khẳng định rằng chắc chắn bức điện bị lỗi. Ngược lại, nếu D’chia hết cho

G, thì bức điện đó không bị lỗi và ta tách bỏ đi n bit cuối lấy các bit còn lại là

thông tin nhận được.

Từ những vấn đề trên để thực hiện truyền thông tin hay kiểm tra dãy bit nhận

được ta chỉ cần thực hiện được phép chia đa thức nhị phân không nhớ.

3. Phân công công việc cho các thành viên trong nhóm.Nhóm có 3 sinh viên cùng thực hiện và chương trình gồm có các phần công việc như

sau :

Định nghĩa quy tắc của phép trừ không nhớ, chuyển dãy nhị phân của đa thức

sinh về đa thức tương ứng (Sinh viên thực hiện Nguyễn Thị Huệ)

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 4

Page 5: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Xây dựng phép chia đa thức nhị phân không nhớ, thực hiện mô phỏng phép

chia đa thức không nhớ và đưa ra kết quả yêu cầu kiểm tra hay tính ra dãy bit

cần truyền (Sinh viên thực hiện Cao Thị Phương Anh)

Kiểm tra điều kiện đa thức sinh, thiết kế Form chương trình (Sinh viên thực

hiện Nguyễn Quý Sơn)

a. Phần thực hiện của Sinh viên Nguyễn Thị Huệ.

- Thuật toán thực hiện trên phép chia không nhớ với quy tắc đơn giản

1 – 1 = 0

0 – 0 = 0

1 – 0 = 1

0 – 1 = 1

- Nên em đã viết một phương thức pheptinh(char a, char b) với giá trị trả về là 1

kí tự kiểu char là kết quả của phép trừ với các quy tắc đơn giản ở trên.

- Tiếp theo là việc thực hiện chuyển dãy nhị phân của đa thức sinh về đa thức

thức tương ứng. Em đã viết một phương thức đó là phương thức

sinhbieuthuc(string s) phương thức này trả về một chuỗi biểu diễn đa thức

tương ứng với dãy nhị phân của đa thức sinh.

- Trong phương thức này thì ta nhậ thấy chuỗi nhị phân của đa thức sinh cứ vị

trí nào là kí tự 1 thì khi chuyển sang đa thức tương ứng là 1*x t với t là số ngũ

tại vị trí i thuộc dãy và t được tính bằng cách lấy chiều dài của chuỗi trừ đi ( vị

trí i + 1), ta sẽ dùng 1 vòng lặp for cho i chạy từ đầu đến hết chuỗi. Nếu tại vị

trí i nào đó có giá trị của kí tự là 1 thì ta thực hiện in ra “x^t”. Cuối cùng ta

được đa thức tương ứng của dãy nhị phân của đa thức sinh.

b. Phần thực hiện của Sinh viên Cao Thị Phương Anh.

Xây dựng phép chia nhị phân không nhớ.

- Phương thức phepchia(string a, string b) với đầu vào string a là số chia và

string b là số bị chia phương thức này thực hiện việc tính ra phần dư của dãy a

chia b, phục vụ cho việc kiểm tra điều kiện của đa thức sinh.

Ý tưởng : dựa trên ví dụ ta thấy

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 5

Page 6: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

- Nhận thấy số chia khi chia cho số bị chia nếu kí tự đầu của số chia là 1 thì số

chia sẽ trừ cho đa thức sinh, nếu là kí tự 0 thì trừ cho chuỗi bit toàn kí tự 0 có

độ dài bằng độ dài chuỗi đa thức sinh. Trong phương thức này ta sẽ sử dụng

một mảng kí tự char[] bandau = new char[a.Length] để copy lại toàn bộ chuỗi

kí tự của string a hay số chia. Ta sẽ thao tác phép chia trên mảng này, và xây

dựng chuỗi string c2 toàn các bit 0 có độ dài bằng độ dài đa thức sinh.

- Giờ ta tính các bước thực hiện: khởi tạo một biến đếm h = 0, nhận thấy

bandau[h] = ‘1’ => ta có kết quả như dưới.

- Lúc này, sang bước tiếp theo ta sẽ cho h tăng lên 1 lúc này h = 1,

bandau[h] = ‘1’ => kết quả là

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 6

Page 7: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

- Cứ làm như trên đến khi h tăng và h = 5 = dộ dài của số chia trừ đi độ dài của

số bị chia thì ta nhận được phần dư cần tìm

Ta sẽ sử dụng một vòng lặp while vòng lặp kết thúc khi h > độ dài của chuỗi số

chia trừ đi độ dài của số bị chia. Ở đây là không quan tâm đến thương mà chỉ

quan tâm đến phần dư.

Thực hiện mô phỏng phép chia không nhớ phép chia đa thức không nhớ và đưa

ra kết quả yêu cầu kiểm tra hay tính ra dãy bit cần truyền.

- Để thực hiện mô phỏng phép chia không nhớ, mô phỏng từng bước của phép

chia thì giống như phương thức phép chia nhưng vì phải mô tả từng bước phép

chia nên em khởi tạo phần đầu của phương thức bằng một phương thức

init(string dulieu, string dtsinh) với đầu vào là xâu bit cần kiểm tra hoặc cần

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 7

Page 8: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

tính là dulieu và dtsinh là đa thức sinh, để chương trình sẽ chạy theo từng bước

của phép chia em xây dựng phương thức thuchienchia() đây chính là tách từ

vòng lặp while của phương thức phepchia và dùng một time để thay thế vòng

lặp, trong phương thức thực hiện cứ mỗi bước sẽ vẽ ra một kí tự kết quả của

phép trừ, cuối cùng khi không thỏa mãn điều kiện biến đếm để tính phép trừ

nhỏ hơn hoặc bằng độ dài của dulieu trừ dtsinh thì kết quả sẽ được in ra, các vị

trí in ra đều được tính toán tùy theo đầu đề, nếu phép chia quá dài nó có thể

mất chữ vì tràn ra khỏi pictureBox. Và khi người dùng nhấn nút Thuật toán

CRC thì time này sẽ thực hiện, trong sự kiện click button thì sẽ thực hiện các

yêu cầu bài toán và các điều kiện kiểm tra sẽ được thông báo kết quả.

c. Phần thực hiện của Sinh viên Nguyễn Quý Sơn.

Kiểm tra điều kiện đa thức sinh.

Đa thức sinh phải thỏa mãn điều kiện.

- Không chia hết cho x

- Không chia hết cho x+1

Dựa trên phương thức phepchia(string a, string b) ta sẽ viết phương thức

kiemtradk(string a) với đầu vào là đa thức sinh nếu đa thức sinh chia hết cho

“10” hoặc “11” thì đa thức sinh đó không thỏa mãn điều kiện ngược lại đã thỏa

mãn điều kiện của đa thức sinh.

Thiết kế Form chương trình.

- Với yêu câu nhập chuỗi thông tin hoặc chuỗi kết quả nhận được trong quá

trình truyền tin, và nhập đa thức sinh ta sẽ có 1 Textbox để nhập thông tin

cần xét và 1 comboBox để nhập đa thức sinh.

- Một 2 groupBox, trong đó có 1 groupBox chưa nút điều khiển và 2 text

nhập liệu, 2 nút chọn để cho người dùng chọn việc tính xâu cần truyền hay

kiểm tra thông tin nhận được. groupBox còn lại gồm các label thể hiện

thông tin của bài toán.

- Một pictureBox để thể hiện mô phỏng phép chia không nhớ và hiển thị kết

quả của yêu cầu.

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 8

Page 9: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 9

Page 10: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Phần III : Hướng dẫn sử dụng chương trìnhBước 1 : nhập xâu bit cần thực hiện vào textbox

Bước 2 : nhập hoặc chọn đa thức sinh từ comboBox

Nếu đa thức sinh không thỏa mãn yêu cầu thì chương trình sẽ đưa ra thông báo

và bạn sẽ nhập lại đa thức sinh và nhấn nut Thuật toán CRC để thực hiện lại.

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 10

Page 11: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Bước 3: chọn yêu cầu.

Nhấn ô chọn Xâu cần truyền là chọn yêu cầu tính ra xâu bit cần truyền đi.

Nhấn ô chọn Kiểm tra dữ liệu nhận được là thực hiện yêu cầu kiểm tra thông tin

nhận được có lỗi hay không.

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 11

Page 12: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Nếu bạn không nhấn chọn yêu câu thì chương trình sẽ hiện ra thông báo và lúc

đó bạn phải chọn lại yêu cầu và nhấn nút Thuật toán CRC để thực hiện chương

trình.

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 12

Page 13: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Sau khi chọn lại:

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 13

Page 14: Báo cáo mô phỏng thuật toán CRC.doc

Bài tập lớn Mạng truyền thông Mô phỏng phương pháp phát hiện lỗi CRC

Cao Thị Phương Anh – Nguyễn Thị Huệ - Nguyễn Quý Sơn – Lớp TH-7B Page 14