Mã hóa mỗi ký tự trên bằng phương pháp Shannon, tính hiệu suất và độ dư thừa của bộ mã.. Mã hóa mỗi ký tự trên bằng phương pháp Fano, tính hiệu suất và độ dư thừa của bộ mã.. Mã hóa mỗi
Trang 1111Equation Chapter 1 Section 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA ĐIỆN – ĐIỆN TỬ
LÝ THUYẾT THÔNG TIN
BÀI TẬP BÁO CÁO
KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG
Người hướng dẫn
TS Từ Lâm Thanh
NHÓM 6
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2024
Trang 2TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
KHOA ĐIỆN – ĐIỆN TỬ
LÝ THUYẾT THÔNG TIN
BÀI TẬP BÁO CÁO
KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG
Trang 3LỜI CẢM ƠN
Em xin chân thành cảm ơn thầy Từ Lâm Thanh– giảng viên khoa Điện – Điện
Tử đã trang bị những kiến thức cần thiết cũng như hỗ trợ tận tình giúp em trong quá
trình thực hiện bài báo cáo Do những thiếu sót về kiến thức chuyên ngành cũng nhưkinh nghiệm thực tiễn, nên đề tài của em vẫn còn nhiều khiếm khuyết mong các thầy(cô) giảng viên có thể quan tâm, góp ý để đề tài của em có thể ngày càng đầy đủ vàhoàn thiện hơn
TP Hồ Chí Minh, ngày 22 tháng 11 năm 2024 Tác giả
ii
Trang 4TRƯỜNG ĐẠI HỌC TÔN ĐỨC
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
1
Lê Nguyễn Nhựt
Thuận(nhóm trưởng)
41901047
1 Tìm tất cả các chữ cái trong chuỗi trên
và tính xác suất của nó
2 Mã hóa mỗi ký tự trên bằng phương pháp Shannon, tính hiệu suất và độ dư thừa của bộ mã .Mức độ hoàn thành 100%
Duy
42101293
5 Mã hóa mỗi ký tự trên bằng phương pháp Huffman cơ số 3, tính hiệu suất và
độ dư thừa của bộ mã.Mức độ hoàn thành100%
3 Nguyễn Anh Tuấn 419010
59
3 Mã hóa mỗi ký tự trên bằng phương pháp Fano, tính hiệu suất và độ dư thừa của bộ mã Mức độ hoàn thành 100%
Quân
42000705
3 Tổng hợp và làm ppt 100%
5 Trương Công An
Bình
42000991
4 Thuyết trình và đưa ra kết luận 100%
6 Võ Đinh Hoàng
Linh
42001046
4 Mã hóa mỗi ký tự trên bằng phương pháp Huffman cơ số 2, tính hiệu suất và
độ dư thừa của bộ mã Mức độ hoàn
iii
Trang 5thành 100%
iv
Trang 6MỤC LỤC
DANH MỤC HÌNH VẼ VI DANH MỤC CÁC CHỮ VIẾT TẮT VII CÂU 1: 8
1.1 C ODE PYTHON 81.2 KẾT QUẢ 8
Trang 7DANH MỤC HÌNH VẼ
Hình 1 1: Đáp án câu 1 9Hình 1 2: Đáp án câu 2 13
vi
Trang 8DANH MỤC CÁC CHỮ VIẾT TẮT
vii
Trang 9LÝ THUYẾT THÔNG TIN
Trang 8
Câu 1:
Đề bài: Tìm tất cả các chữ cái trong chuỗi trên và tính xác suất của nó và mã hóa các
ký tự trên bằng phương pháp shannon
1.1 Code python
from collections import Counter
import math
# Chuỗi đầu vào
chuoi = ('LE NGUYEN NHUT THUAN LE DINH MINH DUY NGUYEN ANHTUAN NGUYEN ANH QUAN '
'TRAN CONG AN BINH VO DINH HOANG LINH Dai hoc Ton Duc Thang LyThuyet Thong Tin')
Trang 10LÝ THUYẾT THÔNG TIN
Trang 9
print("Xác suất của từng ký tự:")
for char, prob in xac_suat_ky_tu.items():
for char, prob in sorted_probs:
code_length = math.ceil(-math.log2(prob)) # Độ dài mã
codes[char] = bin(int(cumulative_prob * (2 ** code_length)))[2:].zfill(code_length)
Trang 11LÝ THUYẾT THÔNG TIN
Trang 10
Câu 2:
# Hiển thị mã Shannon
print("\nMã Shannon của từng ký tự:")
for char, code in shannon_codes.items():
print(f"\nĐộ dài mã trung bình: {avg_code_length}")
# Tính hiệu suất và độ dư thừa
efficiency = round(entropy / avg_code_length, 3)
redundancy = round(1 - efficiency, 3)
print(f"Hiệu suất: {efficiency}")
print(f"Độ dư thừa: {redundancy}")
Trang 12LÝ THUYẾT THÔNG TIN
Trang 13LÝ THUYẾT THÔNG TIN
"Le Nguyen Nhut Thuan",
"Le Dinh Minh Duy",
"Nguyen Anh Tuan",
"Nguyen Anh Quan",
"Truong Cong An Binh",
"Vo Dinh Hoang Linh"
]
chuoi = " ".join(names) + " Dai hoc Ton Duc Thang Ly thuyet thong tin"
# Tính xác suất xuất hiện của mỗi ký tự
tanso = Counter(chuoi)
LÝ THUYẾT THÔNG TIN
Trang 14LÝ THUYẾT THÔNG TIN
Trang 13
tong_ky_tu = sum(tanso.values())
# Tính xác suất của mỗi ký tự
xacsuat = {k: v / tong_ky_tu for k, v in tanso.items()}
# Mã hóa Fano (Đơn giản)
# Tính entropi, hiệu suất và độ dư thừa
entropi = -sum(p * math.log2(p) for p in xacsuat.values())
do_dai_tb = sum(len(ma_fano[k]) * p for k, p in xacsuat.items())hieu_suat = entropi / do_dai_tb
du_thua = 1 - hieu_suat
# Hiển thị kết quả
LÝ THUYẾT THÔNG TIN
Trang 15LÝ THUYẾT THÔNG TIN
Trang 14
print("Ký tự\tXác suất\tMã Fano")
for ky_tu, p in xacsuat.items():
print(f"{ky_tu}\t{p:.4f}\t\t{ma_fano[ky_tu]}")print(f"\nEntropi: {entropi:.4f} bits/ký tự")
print(f"Độ dài trung bình: {do_dai_tb:.4f} bits/ký tự")print(f"Hiệu suất: {hieu_suat:.4f}")
print(f"Độ dư thừa: {du_thua:.4f}")
Trang 16LÝ THUYẾT THÔNG TIN
Trang 17LÝ THUYẾT THÔNG TIN
Trang 16
Độ dư thừa: 0.0434
Câu 4:
Đề bài: Mã hóa mỗi ký tự trên bằng phương pháp Huffman cơ số 2, tính hiệu suất và
độ dư thừa của bộ mã
4.1 Code Python
import collections
import math
import heapq
# Chuỗi ban đầu
text = "Dai hoc Ton Duc Thang Ly Thuyet Thong Tin Le Nguyen Nhut Thuan
Le Dinh Minh Duy Nguyen Anh Tuan Nguyen Anh Quan Truong Cong An Binh Vo Dinh Hoang Linh"
# Loại bỏ khoảng trắng để không tính vào tần suất
text = text.replace(" ", "")
# Bước 1: Tính xác suất xuất hiện của từng ký tự
total_chars = len(text)
char_counts = collections.Counter(text)
char_probs = {char: count / total_chars for char, count in char_counts.items()}
# Bước 2: Mã hóa Huffman
Trang 18LÝ THUYẾT THÔNG TIN
def lt (self, other):
return self.freq < other.freq
# Sắp xếp các ký tự theo thứ tự bảng chữ cái trước khi đưa vào heap
def build_huffman_codes(node, prefix="", code={}):
if node is not None:
if node.char is not None:
LÝ THUYẾT THÔNG TIN
Trang 19LÝ THUYẾT THÔNG TIN
Trang 18
code[node.char] = prefix
else:
build_huffman_codes(node.left, prefix + "0", code)
build_huffman_codes(node.right, prefix + "1", code)
entropy = -sum(prob * math.log2(prob) for prob in char_probs.values())
# Tính độ dài trung bình của mã Huffman
average_code_length = sum(char_probs[char] * len(code) for char, code in huffman_codes.items())
# Tính hiệu suất và độ dư thừa
efficiency = entropy / average_code_length
redundancy = 1 - efficiency
# Hiển thị kết quả theo thứ tự xác suất giảm dần
sorted_chars = sorted(char_counts.items(), key=lambda item: char_probs[item[0]], reverse=True)
print(f"{'Ký tự':<10} {'Tần suất':<10} {'Xác suất':<10} {'Mã hóa':<10}")
LÝ THUYẾT THÔNG TIN
Trang 20LÝ THUYẾT THÔNG TIN
print(f"\nEntropy của nguồn: {entropy:.4f}")
print(f"Độ dài trung bình của mã Huffman: {average_code_length:.4f}") print(f"Hiệu suất của mã: {efficiency:.4f}")
print(f"Độ dư thừa của mã: {redundancy:.4f}")
4.2 Kết quả
LÝ THUYẾT THÔNG TIN
Trang 21LÝ THUYẾT THÔNG TIN
Trang 20
LÝ THUYẾT THÔNG TIN
Trang 22LÝ THUYẾT THÔNG TIN
tukhoa = ["Dai hoc Ton Duc Thang", "Ly thuyet thong tin"]
LÝ THUYẾT THÔNG TIN
Trang 23LÝ THUYẾT THÔNG TIN
ky_tu = sorted(xac_suat.items(), key=lambda x: x[1], reverse=True)
LÝ THUYẾT THÔNG TIN
Trang 24LÝ THUYẾT THÔNG TIN
xac_suat[ky_tu_1[0] + ky_tu_2[0]] = ky_tu_1[1] + ky_tu_2[1]
ky_tu.append((ky_tu_1[0] + ky_tu_2[0], xac_suat[ky_tu_1[0] + ky_tu_2[0]])) ma_huffman = {}
for ky_tu, xs in xac_suat.items():
print("\nMã hóa Huffman cơ số 3 cho mỗi ký tự:", ma_huffman_3)
LÝ THUYẾT THÔNG TIN
Trang 25LÝ THUYẾT THÔNG TIN
Độ dài trung bình của mã Huffman cơ số 3: 5.4766355140186915
Hiệu suất mã hóa Huffman cơ số 3: 0.6834822412938067
Độ dư thừa của mã hóa Huffman cơ số 3: 0.31651775870619325
LÝ THUYẾT THÔNG TIN
Trang 26LÝ THUYẾT THÔNG TIN
Trang 25
TÀI LIỆU THAM KHẢO
Sách:
[1] Lập trình Matlab và ứng dụng của nhà xuất bản khoa học kỹ thuật
LÝ THUYẾT THÔNG TIN