Đề tài Xung mã PCM và mô phỏng trong Matlab
Mục Lục
Lời nói đầu 2
I: Các Phương Pháp Mã Hóa và Điều Chế .4
I1: Mã hóa .4
I2: Điều chế 5
II: Điều Chế Xung Mã PCM .5
II1: Lấy mẫu 6
II2: Lượng tử hóa .8
II3: Mã hóa .10
II4: Giải mã .13
III: Gới Thiệu Về Một Số Phương Pháp Mới .15
III1: PCM vi sai .15
III2: PCM thích ứng .16
IV: Mô Phỏng PCM trong MatLab .18
V: Đánh Gía Các Thành Viên .26
VI: Tài Liệu Tham Khảo .27
ểu diễn phân hoạch của tín hiệu bằng một vector mà các phần tử của nó là các điểm ranh giới giữa hai khoảng chia liên tiếp.Ví dụ nếu như tín hiệu có miền xách định R được phân hoạch thành các khoảng (-∞,0],(0,2],(2,4],(4,+∞].thì có thể biểu diễn sự phân hoạch này thành vector: >> partition = [0,2,4]; Tươ ngứng vớ i vector phân hoạch tín hiệu là vector biểu diễn bộmã tín hiệu. Các phần tử của nó là các giá tr ị thay thế trong mỗi khoảng chia tương ứng của phân hoạch. Nếu ta thay thế các giá tr ịtrong khoảng (-∞, 0] bằng -1, các giá tr ịtrong khoảng (0,2] bằng 1, các giá tr ị trong khoảng (2,4] bằng 3 và các giá tr ị trong khoảng (4, +∞] bằng 5 thì vector biểu diễn bộ mã sẽ là: >> codebook = [-1,1,3,5]; Để thực hiện quá trình lượ ng tửhoá, MATLAB cung cấ p hàm quantiz: >> [indx, quant, distor] = quantiz(sig, partition, codebook) Trongđó sig là tín hiệu tr ướ c khi lượng tử và partition,codebook lần lượt là phân hoạch và bộ mã lượng tử. Hàm quantiz trảvề: + Tín hiệu saukhi lượ ng tửhoá quant +vector indx có chiều dài bằng chiều dài tín hiệu, mỗi phần tửcủa nó là chỉ sốcủa giá tr ị tương ứng của tín hiệu trong bộ mã lượng tử. Nói cách khác, vector indx cho biết mỗi phần tử của tín hiệu vào nằm trong khoảng chia nào. Giữa các vector indx, quant và codebook có mối liên hệ: quant = codebook(indx+1); + Nhiễu lượng tử do phép lượng tử hoá này gây ra.( Nhiễu lượng tử là sai số bình phương trung bình giữa tín hiệu gốc và tín hiệu sau khi lượng tử). Ví dụ: >> parti=[0,2,4]; >> codebook=[-1,1,3,5]; >> samp=[-3,-1,1,1,5,3,5,4,2,1] >> [index,quantized]=quantiz(samp,parti,codebook); >> index’ cho biet thu tu muc luong tu ans = 0 0 1 1 3 2 3 2 1 1 >> quantized quantized = -1 -1 1 1 5 3 5 3 1 1 Trong các hệ thống thông tin số người ta thường phân hoạch miền giá trị của tín hiệu thành q khoảng bằng nhau với q=2v. Các giá trị thay thế chính là điểm giữa của mỗi khoảng chia.Mỗi giá trị lượng tử này lại được biểu diễn bằng một mã từ nhị phân có chiều dài v bit. Xét Ví Dụ: Bằng phương pháp điều chế PCM.thực hiện lượng tử hóa cho tín hiệu x(t)=sint,với mức lượng tử là 12,độ dài các khoảng chia bằng nhau,Vẽ tín hiệu trước và sau lượng tử. Tín hiệu x(t)=sint có miền giá trị là [-1.1] nên ta chia thành các khoảng chia có độ dài 0.2. t = [0:.1:2*pi]; % Các thờiđiểm lấy mẫu tín hiệu sinesig = sin(t); % Tín hiệu sine chưa lượng tử partition = [-1:.2:1]; % Phân hoạch thành 12 khoảng chia codebook = [-1.2:.2:1]; % Bộ mã lượng tử gồm 12 mức [index,quants] = quantiz(sig,partition,codebook); % Lượng t hoá. plot(t,sig,'x',t,quants,'.') legend(‘Tin hieu goc','Tin hieu sau khi luong tu hoa'); axis([-.2 7 -1.21.2]) Kết quả thu được minh họa trong hình dưới: Hình 1 2.2:Tối ưu hóa các thông số của quá trình lượng tử. Quá trình lượng tử làm phát sinh sai số giữa tín hiệu lượng tử với tín hiệu thực.Sai số này được gọi là nhiễu lượng tử .Ta có thế đánh giá nhiễu lượng tử bằng hàm quantiz đã đề cập ở phần trước đó.Vấn đề đặt ra ở đây là làm thế nào tối thiểu hóa loại nhiễu này.Nhiễu lượng tử phụ thuộc vào cách phân hoạch và tập các giá trị lượng tử được chọn.Nếu số khoảng chia càng nhiều thì nhiễu lượng tử càng nhỏ.Tuy nhiên giải pháp này không phải lúc nào cũng thực hiện được do những hạn chế khách quan trong hệ thống.Một phương pháp đơn giản hơn để tối thiểu hóa nhiễu lượng tử ở mức chấp nhận được mà không cần phân hoạch tín hiệu thành quá nhiều khoảng đó là phương pháp tối ưu hóa theo quy luật Lloyd.Giải thuật này dựa trên nguyên tắc huấn luyện,nghĩa là các thông số của quá trình lượng tử sẽ được chọn và cập nhật một cách thích nghi với từng loại tín hiệu đưa vào lượng tử. Qúa trình tối ưu hóa trên được thực hiện bằng hàm lloyd của MATLAB communications Toolbox. >> [partition, codebook] = lloyds(training_set, ini_codebook, tol) hoặc: >> [partition, codebook, distortion, rel_distortion] = lloyds(...) training_set là tập dữ liệu dùng để huấn luyện.Đó là một tín hiệu tiêu biểu của nguồn tin tức mà ta cần lượng tửhoá; ini_codebook là bộ mã khởi đầu do ta chọn; tol là sai số cho phép của quá trình huấn luyện (giá tr ị mặc định nếu không nhập thông số này là 10-7.Các kết quả xuất ra gồm phân hoạch và bộ mã đã tối ưu hoá (partition và codebook ),nhiễu lượng tử tuyệt đối (distortion) va tương đối (rel-distortion) của quá trình lượng tử. Ví dụ sau đây minh họa sự tối ưu hóa của các thông số của quá trình lượng tử dùng hàm lloyd trong MATLAB.Nhiễu lượng tử phát sinh từ hai quá trình lượng tử hóa chưa tối ưu và đã tối ưu sẽ được so sánh với nhau. Xét ví dụ Thực hiện lại quá trình lượng tử hóa tín hiệu x(t)=sint.với các thông số lượng tử đã được tối ưu hóa.So sánh nhiễu lượng tử trước và sau tối ưu hóa. % Bắtđầu với các thông sốlượng tử như ở ví dụ 14-2 t = [0:.1:2*pi]; sig = sin(t); partition = [-1:.2:1]; codebook = [-1.2:.2:1]; % Thực hiện tối ưu hoá với bộ mã khởiđầu là codebook. [partition2,codebook2] = lloyds(sig,codebook); [index,quants,distor] = quantiz(sig,partition,codebook); [index2,quant2,distor2] = quantiz(sig,partition2,codebook2); %So sánh nhiễu lượng tửtrước và sau khi tốưu hoá [distor, distor2] Kết quả xuất ra cửa sổ lệnh của MATLAB: ans = 0.0148 0.0024 Sau khi tối ưu hóa nhiễu lượng tử giảm đi là: 0.0148/0.0024= 6.2 lần. 2.3:Nén và dãn tín hiệu Trong các ứng dụng xử lý tín hiệu thoại (speech processing), trướ c khi lượng tử hoá,người tathường thực hiện nén (compress) tín hiệu theo hàm logarithm, mục đích là để tín hiệu ở mức biên độ nhỏ sẽ thay đổi nhiều mức hơn so với ở các giá tr ị biên độ lớn. do đó sai số lượng tử tương đối ở các mức biên độ nhỏ và lớn sẽ không chênh lệch nhau nhiều như đối với trường hợp không nén. Để khôi phục lại đúng tín hiệu ban đầu thì sau khi giải mã, ta phải đưa qua một bộ giãn tín hiệu (expander) có đặc tuyến truyền đạt là nghịch đảo của đặc tuyến của bộ nén (compressor).Sự kết hợp của bộ nén và bộ giãn tín hiệu gọi chung là bộ nén giãn tín hiệu (compander). Hai luật nén giãn thường được sử dụng trong xử lý tín hiệu thoại là luật μ dùng ở Bắc Mỹ và luật A dùng ở châu Âu: MATLAB cung cấp hàm Compand để thực hiện nén giãn dữ liệu.Hàm này hỗ trợ hai luật nén giãn A và μ nói trên. >> out = compand(in, param, v, method) In là tín hiệu vào còn out là tín hiệu ra V là biên độ đỉnh của tín hiệu vào Param là thông số của luật nén giãn Method cò thể nhận một trong các giá trị sau: Ví dụ .Thực hiện quá trình lượng tử hoá tín hiệu hàm mũ theo hai phương pháp:lượng tử hoá đều và l ượng tử hoá có nén giãn theo luật μ . So sánh sai số bình phươ ng trung bình của hai phươ ng pháp. Với phương pháp đầu tiên ta sử dụng tr ực tiếp hàm quantiz đối với tín hiệu lũy thừa. Tín hiệu được phân hoạch thành các khoảngđều nhau có chiều dài bằng 1. Với phương pháp thứ hai , đầu tiên ta sử dụng hàm compand để nén tín hiệu theo luật μ, sau đó dùng hàm quantiz để lượng tử hoá tín hiệu thu đượ c và cuối cùng lại dùng hàm compand để phục hồi tín hiệu ban đầu. Kết quả xuất ra gồm hai sai số bình phương trung bình của hai phương pháp và đồ thị biểu diễn tín hiệu gốc và tín hiệu đã được nén .Có thể thấy rằng sai số lượng tử ở phương pháp thứ hai nhỏ hơn so với ở phương pháp thứ nhất. Mu = 255; % Thông sốcho bộnén giãn theo luật μ sig = -4:.1:4; sig = exp(sig); % Tín hiệu hàm mũcần lượng tử V = max(sig); % 1. Lượng tửhoáđều (không néngiãn) . [index,quants,distor] = quantiz(sig,0:floor(V),0:ceil(V)); % 2. Sửdụng cùng phânhoạch và bộmã lượng tửnhưng có nén trước khi lượngtử % hoá và giải nén sauđó compsig = compand(sig,Mu,V,'mu/compressor'); [index,quants] =quantiz(compsig,0:floor(V),0:ceil(V)); newsig =compand(quants,Mu,max(quants),'mu/expander'); distor2 = sum((newsigsig).^2)/length(sig); [distor, distor2] % Hiển thịsai sốlượng tửủa hai phươngpháp. plot(sig); % Vẽtín hiệu gốc . hold on; plot(compsig,'r--'); % Vẽtín hiệuđã nén giãn. legend('Tin hieu goc','Tin hieu nen gian','Location','NorthWest') Sai số lượ ng tử: ans = 0.5348 0.0397 Đồ thị dạng tín hiệu: BẢNG ĐÁNH GIÁ CÁC THÀNH VIÊN TRONG NHÓM I: Danh sách các thành viên nhóm 5. 1: Nguyễn Quốc Quân Nhóm Trưởng 2: Nguyễn Văn Hùng 3: Nguyễn Văn Khoái 4: Hoàng Văn Lâm 5: Nguyễn Văn Tiến Lâm II: Nội dung đóng góp của các thành viên trong nhóm. Phần 1: Các Phương Pháp Mã Hóa và Điều Chế. Nguyễn Quốc Quân với Nguyễn Văn Hùng Phần 2: Điều Chế Xung Mã PCM Cả Nhóm Phần 3: Giới Thiệu Một Số Phương Pháp Mới Cả Nhóm Phần 4: Mô Phỏng PCM Trong MathLab Cả nhóm Chịu trách nhiêm tổng hợp và Thiết kế nội dung Nhóm Trưởng và Nguyễn Văn Hùng III: Đánh Gía Của Trưởng Nhóm Qua quá trình làm việc thì em thấy các thành viên trong nhóm cũng đã nhiệt tình và tất cả các thành viên cũng đã nỗ lực hết mình vì công việc của cà nhóm. Nhưng đôi lúc cũng vẫn còn tình trạng dựa dẫm ỉ nại vào các thành viên khác trong nhóm, nhưng các bạn cũng đã rất hăng hái và nhiệt tình làm việc khi được nhóm trưởng triệu tập và giao nhiệm vụ. Mỗi thành viên cũng đã hoàn thành tốt nhiêm vụ của mình khi trưởng nhóm giao và khoán công việc cho mỗi thành viên. Chính vì vậy mà em xin được đánh giá các thành viên như sau. Theo sự đánh giá của em thì chỉ mang tính cá nhân, tức là sự nhận xét các thành viên là hoàn toàn nằm trong sự nhìn nhận của cá nhân em. Chưa phải là của cả nhóm, vậy mong thầy chỉ lấy bài đánh giá của em để tham khảo thôi ạ. Dưới đây là bảng nhận xét và đánh giá của em. Hà nội ngày 15 tháng 11 năm 2012 Tên Thành Viên Mức Độ Hoàn Thành Công Việc Được Giao Thái Độ Làm Việc Điểm Nguyễn Quốc Quân 10/10 10/10 10/10 Nguyễn Văn Hùng 10/10 10/10 10/10 Nguyễn Văn Khoái 10/10 10/10 10/10 Hoàng Văn Lâm 10/10 10/10 10/10 Nguyễn Văn Tiến Lâm 9/10 10/10 9,5/10 VI: Tài Liệu Tham Khảo [1].Giáo trình Matlab và ứng dụng trong viễn thông-TS.Phạm Hồng Liên [2].Thực Hành Xử Lý Số Tín Hiệu Với Matlab-TS.Hồ Văn Sung. [3].Luận Văn Tốt Nghiệp Khảo Sát Tín Hiệu Điều Chế Bằng Matlab-DDHQGTP.HCM [4].Webside:
File đính kèm:
- Đề tài Xung mã PCM và mô phỏng trong Matlab.docx