1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin

21 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 1,47 MB

Nội dung

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN -o0o BÀI TẬP CUỐI KHÓA HỌC PHẦN TRUYỀN THÔNG KỸ THUẬT SỐ Giảng viên hướng dẫn: VŨ ĐỨC THỊNH Sinh viên thực hiện: Lý Gia Nghi – 2033190098 Hoàng Mạnh Cường - 2001160180 Nguyễn Ngọc Bảo Trân - 2033190131 Thành phố Hồ Chí Minh, tháng 12 năm 2021 LỜI CẢM ƠN Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Trường Đại học Công nghiệp Thực phẩm Khoa Công Nghệ Thông Tin đưa môn học“ Truyền Thông Kỹ Thuật Số” vào chương trình giảng dạy Đặc biệt chúng em xin gửi lời cảm ơn sâu sắc đến thầy Vũ Đức Thịnh truyền đạt kiến thức quý báu cho chúng em, trực tiếp hướng dẫn tận tình giúp đỡ chúng em suốt thời gian học môn “ Truyền Thông Kỹ Thuật Số ” Mặc dù cố gắng q trình tìm hiểu khơng thể tránh khỏi sai sót Chúng em mong nhận góp ý, nhận xét q thầy nội dung hình thức trình bày để báo cáo hoàn thiện Lời cuối cùng, chúng em xin kính chúc q thầy bạn sức khỏe, thành công công việc sống Chúng em xin chân thành cảm ơn thầy cô ! I LÝ THUYẾT Xây dựng chương trình bảng thử mã cho mã nguồn tin Tổng quan mã hiệu a/ Khái niệm Mã hiệu (code) tập hữu hạn ký hiệu phép ánh xạ tin/bản tin nguồn tin thành dãy ký hiệu tương ứng Tập ký hiệu phép ánh xạ thường đáp ứng yêu cầu mà hệ thống truyền tin đặt Trong hệ thống truyền tin, tin thường phải thông qua số phép đổi đầu phát gọi mã hóa, đầu thu tin phải thông qua phép biến đổi ngược lại gọi giải mã Sử dụng mã hóa nhằm tăng tốc độ truyền tin khả chống nhiễu hệ thống Đối với kênh có nhiễu, cần quan tâm đến đọ xác truyền tin hay tin truyền bị sai nhầm Ví dụ 1: X = {0,1} 0: mã hiệu 1: Là mã hiệu  Ta có mã hiệu 0, b/ Các thông số  Chiều dài trung bình mã : chiều dài trung bình n: Số từ mã tương ứng số tin nguồn : Chiều dài từ mã tương ứng với tin nguồn : xác suất xuất tin  Độ dài trung bình ngắn Mã có độ dài ngắn giải mã có độ dài trung bình khơng dài độ dài trung bình mã giải mã khác cho nguồn Ví dụ1: S1 S2 0.5 0.1 Code A 10 01 Code B 110 Mã A có độ dài trung bình = kí hiệu mã/tin Mã B có độ dài trung bình =0.5*1 + 0.1*3 =0.8 kí hiệu mã /tin  Vậy mã B có độ dài trung bình dài mã A  Tập ký hiệu mã dùng để biểu diễn gọi bảng ký hiệu mã, cịn số ký hiệu gọi số mã (m)  Độ đo từ mã: Để thuận tiện cho việc sử dụng mã hiệu, từ mã gán cho độ đo: trọng số c/ Phân loại mã Dựa vào độ dài mã: Mã có độ dài khơng đổi gọi mã Mã có độ dài thay đổi gọi mã không + Mã đều: {00, 01,10, 11} + Mã không đều: {0, 10, 011, 11001} Một mã có số mã m, chiều dài từ mã l số lượng từ mã n với ml gọi mã đầy, ngược lại gọi mã vơi + Mã đầy: {0, 1, 01, 00, 10, 11} + Mã vơi: {0, 10, 11}  Dựa vào trọng lượng từ mã: Mã có trọng lượng khơng đổi mã có trọng lượng thay đổi  Dựa vào khoảng cách từ mã kế nhau: Mã có khoảng cách khơng đổi mã có khoảng cách thay đổi  Dựa vào số mã: Mã nhị phân (cơ số 2), mã bát phân (cơ số 8), mã hexa (cơ số 16) Trong mã nhị phân dùng phổ biến  Dựa vào độ tin cậy: Mã phát sửa lỗi mã khơng thể phát sửa lỗi Ví dụ 2: Cho bảng ký hiệu mã A = {0, 1} + X1 = {00, 10, 11}  mã đều, vơi + X2 = {00, 01, 10, 11}  mã đều, đầy d/ Ưu điểm mã hiệu + Tính phân tách định việc giải mã + Tối ưu độ dài + Tối ưu khả sửa sai + Tối ưu thời gian giải mã e/ Phương pháp biểu diễn mã  Phương pháp liệt kê (bảng mã ASCII)  Sử dụng bảng mã để kê khai tất lớp tin từ mã tương ứng với lớp tin  Đơn giản, tiện dụng song cồng kềnh số lớp tin nguồn lớn  Cách liệt kê khơng thấy tính chất quan trọng Ví dụ: Tin Từ mã a 00 b 01 C 110 D 111  Cây mã  Cây mã gồm nút nhánh cây, gốc gọi nút gốc  Mỗi từ mã biểu diễn nút, tương ứng với đường dẫn từ gốc đến nút  Nút phân hai nhánh tương ứng với (bên trái) (bên phải)  Mỗi nút cuối tương đương với từ mã  Dựa vào mã, ta xác định mã đầy, mã vơi, mã khơng đều, mã Ví dụ: 00, 010, 10, 110, 111 0 1 10 00 0  Mặt tọa độ mã 010 110 111  Từ mã biểu diễn điểm hệ tọa độ chiều (l, b)  Thiết lập bề mặt có hai tọa dộ từ mã biểu diễn điểm  b= m: số mã c: trị ký hiệu thứ k từ mã l: chiều dài b: trọng số  Không thể tồn hai hay nhiều từ mã lại giống (n, b) Ví dụ: Tin a1 Từ mã 00 Chiều dài a2 010 a3 011 a4 10 l Trọng số b b Các - Căn tính prefix mã: l + Nhanh + Chống nhiễu - Căn dấu phân tách: + Chống nhiễu tốt + Hiệu suất thấp - Căn chiều dài từ mã: + Đơn giản + Chống nhiễu Tách mã Phương pháp giải mã sử dụng sau: giải mã nhận đoạn mã với độ dài độ dài từ mã dài Ví dụ 1: Xét biến ngẫu nhiên X = {x1, x2} có bảng mã tương ứng A= {a1 = 0, a2 = 01} Giả sử dãy mã nhận (cần giải mã) là: 0010000101001 Bảng thử mã: 01  Mã phân tách Có thể chi tiết hóa bước giải mã dãy từ mã sau: Nhận đoạn 00 -> Giải x1, lại Nhận tiếp ->01 -> Giải x2 Nhận tiếp 00 -> Giải x1, lại Nhận tiếp -> 00 -> Giải x1, lại Nhận tiếp -> 00 -> Giải x1, lại Nhận tiếp -> 01 -> Giải x2 Nhận tiếp 01 -> Giải x2 Nhận tiếp 00 -> Giải x1, lại Nhận tiếp -> 01 -> Giải x2 Kết dãy thơng báo là: x1x2x1x1x1x2x2x1x2 Ví dụ 2: X1 = {0, 10, 11} mã hóa nguồn A = {a, b, c}, x = abaac, y = 0100011 Tách mã: | 10 | | | 11  abaac Ví dụ 3: Bộ mã A (00, 01, 100, 1010, 1011) Nhận dãy kí hiệu 1000101001011101101 Phân tách thành: 100 | 01 | 01 | 00 | 1011 | 1011 | 01 Xây dựng bảng thử mã + Sắp xếp từ mã đề cho thành cột (đánh dấu cột cột 1) + So sánh từ mã ngắn với từ mã dài cột + Nếu từ mã ngắn giống phần đầu từ mã dài lấy phần phía sau trừ phần giống đầu đưa vào cột (cột 2) + Tiếp tục so sánh mã cột với từ mã cột 1, lấy phần lại trừ phần giống đầu ghi vào cột (cột 3) … + Tương tự với cột lại đối chiếu đến cột thứ n kết đối chiếu tổ hợp cột n - với cột + Làm cột phải điền khơng cịn thể thêm, cột thêm trùng với cột trước có chuỗi cột trùng với từ mã Ví dụ: B = {010, 0101, 10100} 010 0100 10 100 101 00 0101 10100 Không thể thêm cột => B mã phân tách  Để nhận biết mã có phân tích hay khơng, người thường dùng công cụ gọi bảng thử mã Mã phân tách Bộ mã chắn phân tách từ mã ngắn không phần đầu, phần cuối phần từ mã khác dài hơn, việc ghép hai hay nhiều từ mã lại thành chuỗi ký hiệu mã không tạo thành đoạn ký hiệu mã trùng với từ mã khác chúng Ví dụ: X = 01010100101, A = {010,0101,10100}  0101 | 010 | 0101  Mã tách Ví dụ: A = {00, 01, 100, 1010, 1011,1001,11111} 00 01 100 1010 1011 1001 11111  Các từ mã ngắn {00, 01} không phần đầu cuối từ mã dài A mã phân tách => Định lý: Điều kiện cần đủ để mã có tính phân tách khơng có tổ hợp mã cột từ j >= trùng với từ mã cột Mã không phân tách Bảng mã không tách bảng mã mà mã hóa thơng báo Msg ta nhận dãy từ mã ws, giải mã dãy từ mã ws ta nhận nhiều thơng báo Msg khác Ví dụ 1: X = {0,10,01}, A = {a, b, c}, y = 01010 | 10 | 10  abb = 1/3 01 | | 10  cab = 1/3 01 | 01 |  cca = 1/3  Bên nhận khơng biết xác bên phát phát mẫu tin  Mã khơng tách Ví dụ 2: B = {00, 01, 011, 100, 00010} chuỗi 000101100 00 01 011 1100 00010 010 100 11 0010 11 0010 100 00 =>Cột có tổ hợp mã 00 trùng từ mã 00 cột =>B mã không phân tách =>Mã có hai cách phân tách khác (00 | 01 | 011 | 00) (00010 | 1100) Ví dụ: A = {010, 0001, 0110, 1100, 00011, 00110, 11110, 101011} 010 0001 0110 1100 00011 00110 11110 101011 100 1110 01011 11 00 110 01 011 110 10 001 110 0011 0110 Không phân tách có hai dãy tin trùng Ví dụ 1: Xét biến ngẫu nhiên X = {x1, x2, x3, x4}, W = {w1 = 0, w2 = 1, w3 = 01, w4 = 10} Giả sử thông báo nguồn có nội dung: x1x2x3x4x3x2x1 Khi dãy mã tương ứng viết từ W có dạng: 0101100110 Nếu giải mã từ trái qua phải ta nhận kết quả: x1x2x1x2x2x1x1x2x2x1 Nhưng phương pháp khác ta nhận kết quả: x3x3x4x3x4 nhiều thông báo khác Ví dụ 2: E = {00, 01, 110, 111, 0111} 00 01 110 111 0111 11 10 111  Cột mã 111 trùng với cột mã 111  E mã khơng tách Ví dụ 3: B = {x1 = 00, x2 = 01, x3 = 011, x4 = 110, x5 = 00010} chuỗi 000101100 Không phân tách 00 01 011 1100 00010 010 100 Vì có hai cách phân tách: Nhận đoạn 000- > giải x1 Nhận tiếp -> 01 -> giải x2 Nhận tiếp 01-> giải x2 Nhận tiếp 10 Nhận tiếp 10 Không giải Nhận đoạn 000 -> x1 Nhận tiếp -> 01 -> x2 Nhận tiếp 011 -> x3 Nhân tiếp 00 -> x1 Sau phân tách: 00 | 01 | 011 | 00 Nhận đoạn 00010 -> x5 11 0010 11 0010 100 00 Nhận đoạn 1100 -> x4 Sau phân tách: 00010 | 1100  Vậy có đoạn mã trùng Độ Chậm Giải Mã Của Nguồn Tin a/ Định Nghĩa: Khi nhận dãy kí hiệu mã, để phân tách cách xác mã cần thỏa mãn điều kiện cần đủ dãy từ mã mã không trùng với dãy từ mã khác mã Do vậy, trường hợp có trùng nhau cột k, l với k khác l k, l ≥ giống mã phân tách trình tách mã khó khăn bên nhận phải có đủ hết số kí hiệu tách mã Hiểu đơn giản độ chậm giải mã trình giải mã chậm trễ  Quá trình giải mã chậm trễ Người ta gọi trình Độ Chậm Giải Mã Độ chậm giải mã số ký hiệu phải nhận đủ để phân tách (nhận dạng) từ mã Độ chậm giải mã vô hạn nhận hết tin tiến hành phân tách q trình phân tách có hai cột k, l với k khác l k, l ≥ giống mã phân tách có độ chậm giải mã vơ hạn b/ Cách tính độ chậm giải mã Bảng thử mã phân tách cho phép đánh giá độ chậm giải mã: Công thức: []nmin ≤ Tch ≤ [ ]nmax j: Số thử cột rỗng nmin & nmax: Độ dài từ mã ngắn dài Ví dụ 1: Xét Bộ Mã A = {00, 01, 100, 1010, 1011} có bảng thử mã sau: 00 01 100 1010 1011  Trong trường hợp này, cột từ cột rỗng, nghĩa mã phân tách Khơng có từ mã trùng với phần đầu từ mã khác nên nhận hết ký hiệu từ mã khơng có từ mã khác nhận ký hiệu làm phần đầu nên thời điểm cắt mã Độ chậm giải mã chiều dài từ mã Ví Dụ 2: Xét Bộ Mã A = {01, 10, 011, 100} có bảng thử mã sau: 01 10 011 100 00 11 11 00  Độ chậm giải mã vô hạn có chuỗi trùng cột & Độ trễ q trình lớn II CHƯƠNG TRÌNH Source code using System; using System.Collections.Generic; using System.Linq; namespace TTKTS { public struct DecodeTable { public List cols; } public struct ColTable { public int Index; public List Code; } public class Program { public static ColTable MakeColsFromBase(ColTable col, ColTable lastcol) { if(col.Code == null || col.Code.Count() x.Length).Where(x => ! x.Equals(s))) { if(compstr.Length >= s.Length) { var check = compstr.Substring(0, s.Length); if (check.Equals(s)) { var subed = compstr.Substring(s.Length); if (subed != null) { created.Code.Add(subed); } } } if (lastcol.Index != col.Index && compstr.Length < s.Length) { var check = s.Substring(0, compstr.Length); if (check.Equals(compstr)) { var subed = s.Substring(compstr.Length); if (subed != null) { created.Code.Add(subed); } } } } } //foreach(var str in created.Code) //{ // Console.WriteLine($"{created.Index} : {str}"); //} return created; } public static bool CheckDivideAble(DecodeTable basetable) { if (basetable.cols == null || basetable.cols.Count() x.Index==1).FirstOrDefault(); foreach(var c in basetable.cols.Where(x => x.Index != 1)) { bool hasMatch = c.Code.Intersect(basecol.Code).Any(); if (hasMatch) { return !hasMatch; } } return true; } public static bool CheckSpeed(DecodeTable basetable) { if (basetable.cols == null || basetable.cols.Count() x.Index != 1)) { foreach (var compcol in basetable.cols.Where(x => x.Index != && x.Index != col.Index)) { var col1 = col.Code.OrderByDescending(x => x); var col2 = compcol.Code.OrderByDescending(x => x); if (col1.SequenceEqual(col2)) { return false; } } } return true; } public static DecodeTable CreateFromBase(DecodeTable basetable) { if(basetable.cols == null || basetable.cols.Count() < 1) { throw new Exception("Null Table"); } if(basetable.cols.Count() >= 2) { if (!CheckDivideAble(basetable)) { Console.WriteLine("Code can not be divided"); return basetable; } } if(basetable.cols.Count() >= 3) { if (!CheckSpeed(basetable)) { Console.WriteLine("Code can be divided but the time it takes is infinite"); return basetable; } } var col = MakeColsFromBase(basetable.cols.OrderBy(x => x.Index).FirstOrDefault(), basetable.cols.OrderByDescending(x => x.Index).FirstOrDefault()); if (col.Code.Count() != 0) { basetable.cols.Add(col); CreateFromBase(basetable); } if(col.Code.Count() == 0) { Console.WriteLine("Code can be divided"); } return basetable; } public static void ShowTable(DecodeTable basetable) { foreach(var col in basetable.cols) { Console.Write($"{col.Index}\t"); } Console.Write($"\n"); var rownum = basetable.cols.OrderByDescending(x=>x.Code.Count).FirstOrDefault().Code.Count; for (int i = 0;i < rownum; i++) { foreach(var col in basetable.cols.OrderBy(x => x.Index)) { if (col.Code.Count > i) { Console.Write($"{col.Code[i]}\t"); } else { Console.Write($" \t"); } } Console.Write($"\n"); } } static void Main(string[] args) { Console.WriteLine("Input code set : "); Console.WriteLine("Example : 00,010, ,10011"); var input = Console.ReadLine(); try { input = input.Replace(" ", ""); var baseArr = input.Split(',').ToList(); var table = new DecodeTable(); table.cols = new List(); table.cols.Add(new ColTable() { Index = 1, Code = baseArr }); var finaleTable = CreateFromBase(table); ShowTable(finaleTable); } catch(Exception ex) { Console.WriteLine(ex.Message); } } } } Kết Demo ... thầy cô ! I LÝ THUYẾT Xây dựng chương trình bảng thử mã cho mã nguồn tin Tổng quan mã hiệu a/ Khái niệm Mã hiệu (code) tập hữu hạn ký hiệu phép ánh xạ tin/ bản tin nguồn tin thành dãy ký hiệu... độ dài mã: Mã có độ dài khơng đổi gọi mã Mã có độ dài thay đổi gọi mã không + Mã đều: {00, 01,10, 11} + Mã không đều: {0, 10, 011, 11001} Một mã có số mã m, chiều dài từ mã l số lượng từ mã n với... đủ để mã có tính phân tách khơng có tổ hợp mã cột từ j >= trùng với từ mã cột Mã không phân tách Bảng mã không tách bảng mã mà mã hóa thơng báo Msg ta nhận dãy từ mã ws, giải mã dãy từ mã ws

Ngày đăng: 11/04/2022, 08:57

HÌNH ẢNH LIÊN QUAN

 Tập các ký hiệu mã dùng để biểu diễn gọi là bảng ký hiệu mã, còn số các ký hiệu thì được gọi là cơ số mã (m) - Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin
p các ký hiệu mã dùng để biểu diễn gọi là bảng ký hiệu mã, còn số các ký hiệu thì được gọi là cơ số mã (m) (Trang 4)
 Sử dụng bảng mã để kê khai tất cả các lớp tin và từ mã tương ứng với mỗi lớp tin - Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin
d ụng bảng mã để kê khai tất cả các lớp tin và từ mã tương ứng với mỗi lớp tin (Trang 6)
Bảng mã không tách được là bảng mã mà khi mã hóa thông báo Msg ta sẽ nhận được một dãy các từ mã ws, và khi giải mã dãy các từ mã ws thì ta có thể nhận được nhiều thông báo Msg khác nhau. - Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin
Bảng m ã không tách được là bảng mã mà khi mã hóa thông báo Msg ta sẽ nhận được một dãy các từ mã ws, và khi giải mã dãy các từ mã ws thì ta có thể nhận được nhiều thông báo Msg khác nhau (Trang 11)
Ví dụ1: Xét Bộ Mã A= {00, 01, 100, 1010, 1011} có bảng thử mã như sau: - Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin
d ụ1: Xét Bộ Mã A= {00, 01, 100, 1010, 1011} có bảng thử mã như sau: (Trang 15)
Ví Dụ 2: Xét Bộ Mã A= {01, 10, 011, 100} có bảng thử mã như sau: - Xây dựng chương trình bảng thử mã cho một bộ mã của một nguồn tin
2 Xét Bộ Mã A= {01, 10, 011, 100} có bảng thử mã như sau: (Trang 15)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN