Báocáo đề tài nghiên cứu khoa giảicác bàitoán Lý thuyết thông tin
Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên MỤC LỤC MỞ ĐẦU PHẦN I TỔNG QUAN CHUNG VỀ ĐỀ TÀI Trong nước .2 Quốc tế .2 Phần mềm Matlab 3.1 Khởi động, chương trình Matlab .2 a Khởi động .2 b Thoát .3 c Thực thi lệnh 3.2 Biểu thức Matlab a Biểu thức b Biến Matlab c Hàm Matlab 3.3 Ma trận Matlab .4 a Nhập ma trận b Tổng cột chuyển vị c Đường chéo ma trận .6 d Trích phần tử e Dùng dấu hai chấm số f Các phép toán ma trận 3.4 Function 3.5 Hàm phụ 3.6 Vẽ đồ thị hàm plot, subplot 10 a Cú pháp .10 b Khai báo màu, kiểu nét đánh dấu điểm liệu .11 Vẽ nhiều đồ thị figure 13 PHẦN II TĨM TẮT LÍ THUYẾT MƠN HỌC LÝ THUYẾT THÔNG TIN 14 Cơ sở lý thuyết thông tin thống kê .14 Đo lường thông tin 14 a Định nghĩa 14 b Đơn vị đo lường thông tin 14 c Lượng thông tin hậu nghiệm 14 Ứng dụng Matlab vào giải toán Lý thuyết thông tin Page Học viện công nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên d Lượng thôn tin chéo 14 e Lương thông tin tổn hao .14 f Kênh không nhiễu 14 g Kênh đứt (nhiễu tuyệt đối) 14 1.2 Entropy nguồn rời rạc 14 a Định nghĩa 14 b Tính chất: 15 c Phân loại .15 d Tính chất entropy hợp entropy có điều kiện 15 e Lượng thông tin tương hỗ: 16 1.3 Entropy vi phân nguồn liên tục .16 a Một số tính chất bản: .16 b Đinh lý: .16 c Entropy vi phân hợp: 16 d Entropy vi phân có điều kiện: .16 e Lượng thông tin tương hỗ 16 1.4 Dung lượng kênh rời rạc 17 a Tốc độ phát nguồn rời rạc 17 b Lượng thơng tin trung bình nguồn phát đơn vị thời gian Đơn vị bit/s .17 c Độ thừa nguồn rời rạc 17 d Lượng thông tin truyền qua kênh đơn vị thời gian 17 e Khả phát nguồn rời rạc 17 f Khả thông qua kênh 17 g Tính chất: 17 Mã hóa nguồn .18 Định nghĩa 18 Mã hoá 18 2.2 Bộ mã .18 a Độ dài trung bình .18 b Cơ số mã 18 c Bộ mã đầy, mã vơi 18 d Đánh giá hiệu phép mã hoá 18 e Phương sai độ dài trung bình mã 18 2.3 Mã suy biến: 18 Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên 2.4 Mã prefix 19 2.5 Mã Huffman 19 Mã hóa kênh 20 PHẦN III MỘT SỐ DẠNG BÀI TẬP LÝ THUYẾT THÔNG TIN .21 Dạng liên quan đến entropy 21 Dạng tìm ma trận sinh G, ma trận kiểm tra H dạng hệ thống mã vịng tuyến tính C(l,k) với đa thức sinh g(x) cho trước 22 Dạng liệt kê từ mã, đánh giá khả phát sửa lỗi mã 23 Dạng sử dụng thuật tốn chia dịch vịng bẫy lỗi để tìm lại từ mã phát C(l,k) biết đa thức sinh g(x), đa thức từ mã nhận v(x) 23 Ứng thuật tốn bước tìm từ mã đầu thiết bị mã hoá hệ thống theo phương pháp chia 24 Dạng Huffman, đánh giá hiệu mã hoá, giải mã từ mã theo từ mã vừa xây dựng 26 Dạng xây dựng tổng kiểm tra cho dấu mã, xây dựng sơ đồ chức giải mã đa số, thực giải mã cho từ mã nhận .27 PHẦN IV XÂY DỰNG HÀM 28 Hàm tính entropy 28 Hàm tìm ma trận sinh ma trận kiểm tra dạng hệ thống Bài tập 2.11 đến 2.18 29 Hàm liệt kê từ mã, đánh giá khả phát sửa lỗi mã 30 Hàm chia hai đa thức trường nhị phân 31 Thuật tốn chia dịch vịng bẫy lỗi Bài tập 2.22-2.25 32 Thuật toán bước Bài tập 3.14-3.17 33 Hàm thực mã hoá Huffman Bài tập 3.19-3.23 35 Hàm thực thiết lập hệ tổng kiểm tra Bài tập 4.1-4.3 36 Hàm tìm lại từ mã phát phương pháp giải mã ngưỡng 37 PHẦN V KẾT QUẢ CHẠY MÔ PHỎNG MỘT SỐ HÀM 40 Ví dụ 40 Ví dụ 41 KẾT LUẬN 43 TÀI LIỆU THAM KHẢO 44 Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên MỞ ĐẦU Mục tiêu - Giúp sinh viên làm quen với hoạt động nghiên cứu khoa học, rèn luyện kỹ làm việc nhóm - Xây dựng thư viện Matlab giúp củng cố hỗ trợ giải tốn mơn học Lý thuyết thơng tin Nợi dung - Tìm hiểu, sử dụng ngơn ngữ lập trình Matlab - Tóm tắt kiến thức môn học Lý thuyết thông tin, phân loại loại tập - Áp dụng ngôn ngữ lập trình Matlab xây dựng thu viện hỗ trợ giải tốn điển hình mơn học Lý thuyết thông tin Báo cáo chúng em trình bày vấn đề sau: Đề tài: Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Phần Tổng quan chung đề tài hướng dẫn sử dụng phần mềm Matlab Phần Tóm tắt lý môn học lý thuyết thông tin Phần Một số dạng lý thuyết thông tin tiêu biểu Phần Kết số hàm Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên PHẦN I TỔNG QUAN CHUNG VỀ ĐỀ TÀI Trong nước Ngày nay, thành tựu cách mạng khoa học kĩ thuật ngày, làm thay đổi sống người Cùng với bùng phát khoa học cơng nghệ, nhu cầu tính tốn xử lí phép tốn cách nhanh chóng cần thiết MATLAB đời giúp giải vấn đề MATLAB cho phép tính tốn số với ma trận, vẽ đồ thị hàm số hay biểu đồ thơng tin, thực thuật tốn, tạo giao diện người dùng liên kết với chương trình máy tính viết nhiều ngơn ngữ lập trình khác MATLAB giúp đơn giản hóa việc giải tốn tính tốn kĩ thuật so với ngơn ngữ lập trình truyền thống C, C++ Không sử dụng môi trường tính tốn số mà với người dùng cịn tự lập trình hàm, chương trình phục vụ cho mục đích sử dụng Chính MATLAB sử dụng rộng rãi hoc tập, giảng dạy ngành khoa học kĩ thuật Ở Việt Nam, MATLAB sử dụng rộng rãi nghành công nghệ kĩ thuật : Công nghệ kĩ thuật điện - điện tử, Kĩ thuật điều khiển tự động hoá, Kĩ thuật xây dựng, Cơng nghệ hố học, Cơng nghệ sinh học… Matlab cịn cơng cụ hữu hiệu hỗ trợ đắc lực cho thầy trò việc học tập, giảng dạy nghiên cứu Không ngoại lệ Lý thuyết thông tin, MATLAB tỏ cơng cụ tính tốn, xử lý vơ hiệu Đề tài này, chúng em thực giải tốn Lý thuyết thơng tin cơng cụ MATLAB Chúng em hy vọng việc thực tốn Lý thuyết thơng tin cơng cụ giúp việc dạy học thầy trò thêm trực quan, dễ tiếp cận gây nhiều hứng thú cho học trị Từ giúp cơng việc dạy học trở nên hiệu nhất, khắc sâu kiến thức cho sinh viên Với kiến thức vững chúng em thiết nghĩ sinh viên trở thành kĩ sư Điện tử, Viễn thông giỏi, không vững vàng bắt tay vào cơng việc mà cịn có nhiều cơng trình nghiên cứu, đóng góp cho khoa học công nghệ nước nhà Quốc tế Các nhà nghiên cứu giới tập trung tìm hiểu, triển khai ứng dụng Matlab nhiều năm qua MATLAB công cụ sử dụng nhiều lĩnh vực, bao gồm xử lý tín hiệu ảnh, truyền thông, thiết kế điều khiển tự động, đo lường kiểm tra, phân tích mơ hình tài chính, hay tính toán sinh học Với hàng triệu kĩ sư nhà khoa học làm việc môi trường công nghiệp môi trường hàn lâm, MATLAB ngôn ngữ tính tốn khoa học Phần mềm Matlab MATLAB sản phẩm phần mềm công ty MathWorks Inc Ưu điểm bật MATLAB khả tính tốn biểu diễn đồ hoạ kỹ thuật nhanh chóng, đa dạng xác cao Thư viện hàm MATLAB bao gồm nhiều chương trình tính tốn con; Các chương trình giúp người sử dụng giải nhiều loại toán khác nhau, đặc biệt toán ma trận, số phức, hệ phương trình tuyến tính phi tuyến MATLAB cho phép xử lý liệu biểu diễn đồ hoạ không gian 2D 3D với nhiều dạng đồ thị thích hợp, giúp người sử dụng trình bày kết tính tốn cách trực quan thuyết phục Thêm vào đó, phiên MATLAB ngày phát triển nhiều module phần mềm bổ sung, gọi Toolbox (bộ công cụ) với phạm vi chức chuyên dụng cho chuyên ngành cụ thể 3.1 Khởi đợng, chương trình Matlab a Khởi động Cách Nhấp đúp trái chuột vào biểu tượng Matlab desktop Cách Start \ Programs \ Matlab … Ứng dụng Matlab vào giải toán Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thông Báo cáo đề tài nghiên cứu khoa học sinh viên b Thoát Cách File \ Exit Cách Crtl + Q Cách >> quit c Thực thi lệnh >> + nhấn Enter 3.2 Biểu thức Matlab a Biểu thức Một biểu thức Matlab chứa các: Biến (variable) Con số (number) / số (constant) Phép toán (operator) Hàm (function) Một số ví dụ >> a = (1+sqrt(5))/2 a= 1.6180 >> b = abs(3+4i) b= >> c = exp(log(realmax)) huge = 1.7977e+308 b Biến Matlab Không cần khai báo kiểu, số chiều, độ dài biến Mỗi tên xuất với phép gán, Matlab tạo biến cấp phát nhớ cho Nếu biến cũ, thay đổi nội dung thực phép gán Biến đặc biệt “ans”: lưu giá trị phép toán vừa tính Lệnh “who” “whos”: cho biết thơng tin biến hữu Ví dụ: >> x = x= >> y = y= Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thông Báo cáo đề tài nghiên cứu khoa học sinh viên >> x + y ans = Quy tắc đặt tên biến: Bắt đầu chữ cái, chữ cái, chữ số dấu gạch “_” Các chữ phân biệt chữ hoa, chữ thường Ví dụ: Hợp lệ: “x”, “a_b1”, “v1” Không hợp lệ: “_a”, “1x”, “abc*” c Hàm Matlab Matlab cung cấp phong phú đa dạng cáchàm tốn học, từ sơ cấp đến cao cấp Có loại hàm Matlab Built-in fuction: hàm sẵn có Ví dụ: sin(), sqrt(), exp(), … M-file function: hàm viết tập tin m Matlab Ví dụ: gamma(), sinh(), … Chú ý: Không thể thấy source code hàm built-in Ngược lại, xem chỉnh sửa source code hàm lưu file m Để biết thêm thơng tin số hàm có sẵn Matlab ta sử dụng “>>help”: 3.3 Mục đích Cách thực Xem cách sử dụng hàm >> help ten_ham Tìm kiếm hàm lĩnh vực >>help\Funtions-Categorical List dùng chức Search Tìm tên hàm >>help \ Functions – Alphabetical List tìm Index Tìm hiểu vấn đề Chẳng hạn lĩnh vực toán >>help \ Mathematics Ma trận Matlab Thế mạnh Matlab so với ngôn ngữ lập trình khác tính tốn nhanh ma trận a Nhập ma trận Nhập trực tiếp danh sách phần tử Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên VD: Nhập trực tiếp danh sách phần tử: >>A = [16 13; 10 11 8; 12; 15 14 1] A= 16 13 10 11 12 15 14 Dấu [ ] mở đầu kết thúc nhập ma trận Dấu ; kết thúc dòng Các phần tử cách khoảng trắng dấu , Phát sinh ma trận hàm sẵn có >>zeros(n) Ma trận >>ones(m,n) Ma trận >>eye(n) Ma trận đơn vị >>diag([a, b, c,…]) Ma trận đường chéo >>magic(n) Ma phương >>Rand(m,n) Ma trận số thực ngẫu nhiên Ví dụ: >>Z = zeros(2,4) Z= 0000 0000 >>F = 5*ones(2,3) F= 555 555 Nhập từ file Giả sử ta có file “matrix.txt” có nội dung sau (các số cách khoảng trắng) 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0 Dòng lệnh >>load matrix.txt đọc file “matrix.txt”, tạo biến có tên magik, ma trận phần tử có file matrĩ.txt Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên Tạo ma trận file m File m file văn ghi dịng lệnhMatlab Có thể soạn thảo MATLAB Editor trình soạn thảo văn Lưu file có m Gõ tên file để thực thi nội dung dòng lệnh file Ví dụ: tạo file có nội dung sau: A=[ 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0]; Lưu với tên matrix.m Dòng lệnh >>matrix đọc file tạo biến A ma trận b Tổng cột chuyển vị A= 16 10 15 >> sum(A) ans = 34 34 >> A’ ans = 16 10 11 13 >> sum(A’) ans = 34 34 11 14 13 12 34 34 12 15 14 34 34 c Đường chéo ma trận A= 16 10 15 11 14 13 12 >> diag(A) ans = 16 10 Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng Báo cáo đề tài nghiên cứu khoa học sinh viên d Trích phần tử Trích phần tử >>A(4,2) ans = 15 Trích nhiều phần tử Sử dụng dấu “[,]” để liệt kê vị trí cần trích Ví dụ: A = [2 3; 7], x = [9 1] A([2,1],2) → [6 4]’ , x([2,4]) →4 Có thể sử dụng dấu “:” để trích dãy phần tử Ví dụ: A(2,1:3) , x(3:-1:1) e Dùng dấu hai chấm số Ví dụ: A(1:k,j) gồm k số cột thứ j ma trận A >>sum(A(1:4,4)) //tính tổng số cột thứ ma trận A Dấu hai chấm đứng tồn phần tử dịng cột Từ khoá “end” chỉ số cuối dịng cột Ví dụ: >>A(:,end) //chỉ tồn phần tử cột cuối f Các phép toán ma trận Cho ma trận A= 012 723 541 B= 352 427 146 A+B 11 10 68 A-B -4 -4 -5 A*B 10 19 32 51 46 32 37 44 A^m >>A^2 = Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page Học viện cơng nghệ bưu viễn thơng % % Báo cáo đề tài nghiên cứu khoa học sinh viên Vecto da thuc sinh g Dau ra: % Ma tran sinh G o dang he thong % Ma tran kiem tra H o dang he thong % % Su dung % mtransinh(l,k,[g0 g1 g2 ]) % Tham khao: % Ham cua Matlab: eye() Go help eye() de biet them chi tiet % Ham NSD dinh nghia: G=zeros(1,l); f1=fopen('output.txt','w'); for i=1:k fprintf(f1,'*)i = %d => p%d(x)=x^%d mod g(x)\n',i-1,i-1,l-k+i-1); r=chia2dathuc([zeros(1,l-k+i-1),1],g); fprintf(f1,'\tp%d(x)=\t',i-1); for j=1:length(r) if(r(j)==1) fprintf(f1,' + x^%d',j-1); end end r=[r,zeros(1,l-length(r))]+[zeros(1,l-k+i-1),1,zeros(1,k-i)]; fprintf(f1,'\n\tg%d(x)=\t',i-1); for j=1:l if(r(j)==1) fprintf(f1,' + x^%d',j-1); end end fprintf(f1,'\n \tg%d=',i-1); for j=1:l fprintf(f1,'%2d',r(j)); end fprintf(f1,'\n'); G=[G;r]; end G(1,:)=[];h=size(G); fprintf(f1,'Ma tran sinh G: \n'); for i=1:h(1) for j=1:h(2) fprintf(f1,'%3d',G(i,j)); end Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page 29 Học viện cơng nghệ bưu viễn thông Báo cáo đề tài nghiên cứu khoa học sinh viên fprintf(f1,'\n'); end H=[eye(l-k),(G(:,1:l-k))']; h=size(H); fprintf(f1,'Ma tran kiem tra H : \n'); for i=1:h(1) for j=1:h(2) fprintf(f1,'%3d',H(i,j)); end fprintf(f1,'\n'); end; fclose(f1); Hàm liệt kê từ mã, đánh giá khả phát sửa lỗi bộ mã VD: Bài tập 2.19 Cho mã khối nhị phân tuyến tính dạng hệ thống (5,2) có ma trận sinh G = Liệt kê tất từ mã mã Bộ mã có khả phát sửa lỗi sai? function [ C,Dmin ] = lietketuma(G) % Ham: lietketuma(G) % Ham lam nhiem vu: Ham liet ke tu ma, danh gia kha nang phat hien va sua loi cua bo ma % Dau vao: G ma tran sinh % Dau ra: Cac tu ma cua bo ma % Dmin: Kha nang phat hien loi = Dmin - 1; Sua duoc (Dmin -1])/2 lay phan nguyen duoi % Ham cua Matlab: % Ham nguoi dung dinh nghia : [k,l]=size(G); aNum=0:2^k-1; a=dec2bin(aNum,2)-'0'; C=mod(a*G,2); Dmin=l; for i=2:2^k-1 if sum(C(i,:))=length(b))%lap den da thuc a > da thuc b p(length(a)-length(b)+1)=1; c=[zeros(1,length(a)-length(b)),b]; a=mod(a+c,2); if (a==zeros(1,length(a))) a=0; break; else while (a(length(a))==0) a(length(a))=[]; end end end r=a;% end Thuật toán chia dịch vòng bẫy lỗi Bài tập 2.22-2.25 VD: Bài tập 2.22 Cho mã cyclic C(7,4,3) có đa thức sinh g(x) = + x +x3 Giả sử từ mã nhận mã có dạng v(x) = x6 + x5 + x4 + x3 0001111 Sử dụng thuật tốn chia dịch vịng (bẫy lỗi) để tìm lại từ mã phát? function timtuma( l,k,d,g,a ) Ứng dụng Matlab vào giải tốn Lý thuyết thơng tin Page 31 Học viện cơng nghệ bưu viễn thông Báo cáo đề tài nghiên cứu khoa học sinh viên % Ham: timtuma(l,k,d,g,a) % tu Ham lam nhiem vu: Su dung thuat toan chia dich vong bay loi tim lai % ma da phat thong qua ma tran sinh g va tu ma nhan duoc a % Dau vao: % Kich thuoc bo ma: l % k % Khoang cach hamming (Khoang cach ma toi thieu): d % Ma tran sinh: g % Tu ma nhan duoc a % Dau ra: % Tu ma da phat % % Su dung % mtransinh(l,k,d,[g0 g1 g2 ],[a0 a1 a2 ]) % Tham khao: % Ham cua Matlab: length(), zeros() % Ham NSD dinh nghia: t=ceil((d-1)/2); f1=fopen('output.txt','w'); fprintf(f1,'t=[d0-1/2]=%d\n',t); for i=0:l-1 fprintf(f1,'*)i=%d : S%d(x)=x^%d *r(x) mod g(x)\n',i,i,i); r=chia2dathuc([zeros(1,i),a],g); fprintf(f1,'\t S%d(x)= ',i); for j=1:length(r) if(r(j)==1) fprintf(f1,' + x^%d',j-1); end end fprintf(f1,'\n\t w(S%d(x))= %d\n',i,sum(r)); if(sum(r)