Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Họ và tên: Nguyễn Duy Như Tịnh

Lớp: 21DT2
Mã sinh viên: 106210102
THÍ NGHIỆM THÔNG TIN SỐ
Bài 1: Kỹ thuật mã hóa kênh

I. Lý thuyết
II. Bài tập
Bài 1:
Thực hiện mã hóa ASCII cho đoạn văn bản sau:
Faculty of Electronic and Telecommunication
- Giả sử lỗi rơi vào các vị trí 1, 2, 4, 3, 3, 5, 7, 1, 6, 1, 2 của các ký tự
màu đỏ.
Giải mã.
- Nhận xét về khả năng phát hiện lỗi của mã ASCII Thực hiện mã hóa
ASCII cho đoạn văn bản sau:
Faculty of Electronic and Telecommunication
- Giả sử lỗi rơi vào các vị trí 1, 2, 4, 3, 3, 5, 7, 1, 6, 1, 2 của các ký tự
màu đỏ.
Giải mã.
- Nhận xét về khả năng phát hiện lỗi của mã ASCII

• Code:
input_text = 'Faculty of Electronic and Telecommunication';
encoded_text = '';
for i = 1:length(input_text)
ascii_bin = dec2bin(double(input_text(i)), 7);
if ismember(i, [1, 2, 4, 3, 3, 5, 7, 1, 6, 1, 2])
ascii_bin(1) = '0';
end
encoded_text = strcat(encoded_text, ascii_bin);
end
decoded_text = '';
for j = 1:7:length(encoded_text)
binary_char = encoded_text(j:j+6);
ascii_char = bin2dec(binary_char);
decoded_text = [decoded_text, char(ascii_char)];
end
disp('Chuỗi sau khi mã hóa:');
disp(encoded_text);
disp('Chuỗi sau khi giải mã:');
disp(decoded_text);

• Result:

• Nhận xét:
- Là mặc dù mã ASCII không có khả năng phát hiện, cũng không sửa được
các lỗi. Và nếu một bit trong dữ liệu ASCII bị mất hoặc bị thay đổi trong
quá trình truyền, các thiết bị hoặc phần mềm không thể phát hiện ra lỗi
này và sẽ giải mã dữ liệu bị lỗi một cách sai lệch.
Bài 2:
Cho đoạn văn sau:
Electronic
- Mã hóa bản tin trên dùng mã khối tuyến tính (4, 7) với đa thức sinh như trong
ví dụ.
H=[1 0 1 1 1 0 0
1101010
1 1 1 0 0 0 1]
G=[1 0 0 0 1 1 1
0100011
0010101
0 0 0 1 1 1 0]
Tính tỷ lệ mã.
- Giải mã bản tin trên với giả sử lỗi xuất hiện ở vị trí 1, 7 trong ký tự “e” màu
đỏ.
Nhận xét về khả năng phát hiện lỗi của mã (4, 7)

• Code:
T = 'Electronic';
m = dec2bin(T, 7) - '0';
x = [1 0 0 0;
1 0 1 1;
1 0 1 1;
0 0 1 1;
0 0 1 0;
1 1 1 0;
0 0 1 1;
1 1 1 0;
1 0 0 1;
1 1 0 0;
1 0 1 1;
0 1 1 1;
1 1 1 0;
1 1 1 0;
1 1 0 1;
0 0 1 1;
1 0 0 0;
1 1 0 0];

G = [1 0 0 0 1 1 1;
0 1 0 0 0 1 1;
0 0 1 0 1 0 1;
0 0 0 1 1 1 0];
num_blocks = size(x, 1);
block_size = size(G, 2);
a = zeros(num_blocks, block_size);
for i = 1:num_blocks
a(i,:) = mod(x(i,:) * G, 2);
end
T = 'Electronic';
G = [1 0 0 0 1 1 1;
0 1 0 0 0 1 1;
0 0 1 0 1 0 1;
0 0 0 1 1 1 0];
x = dec2bin(T) - '0';
x1 = x(1,:);
m_ERROR = [1 0 0 0;
1 0 1 1;
1 0 1 1;
0 0 1 1;
0 0 1 0;
1 1 1 0;
0 0 1 1;
1 1 1 0;
1 0 0 1;
1 1 0 0;
1 0 1 1;
0 1 1 1;
1 1 1 0;
1 1 1 0;
1 1 0 1;
0 0 1 1;
1 0 0 0;
1 1 0 0];
H = [1 0 1 1 1 0 0;
1 1 0 1 0 1 0;
1 1 1 0 0 0 1];

e = [zeros(1,7);
eye(7)];
s = e * H';

r = m_ERROR * G;
r1 = r;
r1 = mod(r1, 2);
r1(1,1) = ~r1(1,1);
r1(2,3) = ~r1(2,3);
r11 = r1(1,:);
r77 = r1(2,:);
s1 = r11 * H';
s1 = mod(s1, 2);
s7 = r77 * H';
s7 = mod(s7, 2);
e_loi_1 = ' ';
r_sualoi_1 = ' ';
e_loi_7 = ' ';
r_sualoi_7 = ' ';
for i = 1:8
if s1 == s(i,:)
disp(['Chu E lỗi ở vị trí thứ ' num2str(i-1) ''])
e_loi_1 = e(i,:);
e_loi_1 = mod(e_loi_1, 2);
else
disp(['Không phát hiện lỗi cho chu E.'])
end
if s7 == s(i,:)
disp(['Chu l lỗi ở vị trí thứ ' num2str(i-1) ''])
e_loi_7 = e(i,:);
e_loi_7 = mod(e_loi_7, 2);
else
disp(['Không phát hiện lỗi cho chu l.'])
end
end

r_sualoi_1 = r11 + e_loi_1;


r_sualoi_7 = r77 + e_loi_7;
r111 = [r_sualoi_1(1:4) r_sualoi_7(1:3); r_sualoi_7(4) x(2,2:7); x(3:10,:)];
kytu_saukhisualoi_1_7 = char(bin2dec(num2str(r111)));
ky_tu_sau_khi_sua_loi = kytu_saukhisualoi_1_7';
fprintf('Kí tự ban đầu: %s\n', T);
fprintf('Kết quả sau khi sửa lỗi: %s\n', ky_tu_sau_khi_sua_loi);

• Result:
• Nhận xét:
- Mã (4, 7) có khả năng phát hiện và sửa một số lỗi nhất định, nhưng nó
không thể đảm bảo phát hiện và sửa mọi loại lỗi. Điều này phụ thuộc vào
người code phải thông minh cách mã được thiết kế và cách nó được triển
khai trong hệ thống truyền thông hoặc lưu trữ.

Bài 3:
- Thực hiện bài tập 2 với mã (7, 11). Đa thức sinh tự chọn.
- So sánh mã (4, 7) và (7, 11) về các tiêu chí:
+ Tỷ lệ mã.
+ Khả năng phát hiện lỗ

• Code:
T = 'Electronic';
x = dec2bin(T, 7) - '0';

G = [1 0 0 0 0 0 0 1 1 1 1;
0 1 0 0 0 0 0 0 1 1 0;
0 0 1 0 0 0 0 1 0 1 0;
0 0 0 1 0 0 0 1 1 0 0;
0 0 0 0 1 0 0 1 1 0 1;
0 0 0 0 0 1 0 0 0 1 1;
0 0 0 0 0 0 1 0 0 0 1];

mahoaASCII = [];
for i = 1:length(T)
mahoaASCII = [mahoaASCII x(i, :) * G];
end
mahoaASCII = mod(mahoaASCII, 2);
mahoa_7_11 = num2str(mahoaASCII);

H = [0 0 1 1 1 0 1 1 0 0 0;
1 1 0 1 1 0 0 0 1 0 0;
1 1 1 0 0 1 0 0 0 1 0;
1 0 0 0 1 1 1 0 0 0 1];

m_ERROR = dec2bin(T) - '0';


e = [zeros(1, 11);
eye(11)];
s = e * H';
c = m_ERROR * G;
r1_7 = c;
r1_7(1, 1) = ~r1_7(1, 1);
r1_7(1, 7) = ~r1_7(1, 7);
s1_7 = r1_7 * H';
s1_7 = mod(s1_7, 2);
if ismember(s1_7, s, 'rows')
disp('Lỗi được phát hiện và sửa.')
r_sualoi_1_7 = r1_7;
else
disp('Không phát hiện lỗi.')
r_sualoi_1_7 = c; % Giữ nguyên nếu không phát hiện lỗi
end

a = [r_sualoi_1_7(1, 1:7); m_ERROR(2:10, :)];


kytu_saukhisualoi_1_7 = char(bin2dec(num2str(a)));
ky_tu_sau_khi_sua_loi = kytu_saukhisualoi_1_7';
fprintf('Kí tự ban đầu: %s\n', T);
fprintf('Kết quả sau khi sửa lỗi: %s\n', ky_tu_sau_khi_sua_loi);

• Result:
• Nhận xét:
- Tỷ lệ mã :
+ Mã (4, 7): Tỷ lệ mã là 4/7, tức là mỗi block dữ liệu gồm 4 bit và 3 bit
kiểm tra lỗi. Tỷ lệ này thường được đo lường để đánh giá hiệu suất
của mã.
+ Mã (7, 11): Tỷ lệ mã là 7/11, có nghĩa là mỗi block dữ liệu chứa 7 bit
và có thêm 4 bit kiểm tra lỗi.
- Khả năng phát hiện lỗi:
+ Mã (4, 7): Có thể phát hiện và sửa một lỗi trong mỗi khối 4 bit.
Tính khả năng phát hiện lỗi là 3 bit.
+ Mã (7, 11): Có khả năng phát hiện và sửa một lỗi trong mỗi khối 7
bit. Tính khả năng phát hiện lỗi là 4 bit.
➢ Mã (7,11) có thể kiểm tra lỗi và sửa lỗi chính xác hơn nhiều lần mã
(4,7) nên được ứng dụng sử dụng trong thực tiễn nhiều hơn

You might also like