You are on page 1of 6

% ví dụ 4.

40
% phân bố Gamma
nameDist='Gamma';
a=1;
b=2;
% số lượng mẫu cần tạo
N=10000;
r=random(nameDist,a,b,[N 1]);
% vẽ dồ thị hítogram
histfit(r,100,nameDist)
set(gcf,'color','white');

% ví dụ 4.41
% Số mức lượng tử
Mu = 255;
% Tín hiệu hàm mũ
t = -4:0.1:4;
sig = exp(t);
V = max(sig);
% Lượng tử tín hiệu partition = 0:2^6-1;
partition = 0:2^6-1;
codebook=0:2^6;
[~,~,distor1] = quantiz(sig,partition,codebook)

% Nén tín hiệu theo luật mu


compsig = compand(sig,Mu,V,'mu/compressor');
[~,quants] = quantiz(compsig,partition,codebook);
% Giải nén tín hiệu theo luật mu
newsig = compand(quants, Mu,max(quants), 'mu/expander');
distor2 = sum((newsig-sig).^2)/length(sig)

% Vẽ tín hiệu
plot([sig' compsig'],'linewidth', 2);
legend('Tín hiệu gốc', 'Tín hiệu đã nén','location', 'nw')
set(gcf,'color', 'white');

% ví dụ 4.42
t = [0:.1:4*pi];

% Tạo tín hiệu cos


sig = cos(t);

% Chia vùng
partition=[-1:.2:1];
% Từ mã
codebook = [-1.2:.2:1];

% Lượng tử
[index,quants] =quantiz(sig,partition,codebook);

% Vẽ tín hiệu trước và sau khi lượng từ


plot(t,sig,'x',t,quants,'.','linewidth',2)

% Chú thích cho hình


legend('Tín hiệu gốc','Tín hiệu lượng từ','fontname','Time New Roman');

% Điều chỉnh vùng vẽ theo trục x và trục y của hình


axis([-.2 max(t) -1.2 1.2])
set(gcf,'color','white');
xlabel('t');

% ví dụ 4.43
% Thời gian của tín hiệu, chọn 1 chu kỳ với một bước mẫu là 0.1
t = [0:.1:2*pi];
% Tạo tín hiệu cos
sig = sin(t);

% Chia vùng
partition = [-1:.2:1];

% Từ mã
codebook=[-1.2:.2:1];

% Lượng tử
[index,quants,distor] =quantiz(sig,partition,codebook);

% Vẽ tín hiệu trước và sau khi lượng tử


plot(t,sig,'x',t,quants,'.','linewidth',2)

% Tối uu dùng Lloyds


[partition,codebook] = lloyds(sig,codebook)
[index,quants,distor] =quantiz(sig,partition,codebook);

% Vẽ trên cùng đô thị


hold on
% Vẽ tín hiệu trước và sau khi lượng tử
plot(t,quants,'.','linewidth',2)
% Chú thích cho hinh
legend('Tín hiệu gốc','Tín hiệu lượng từ','Tin hiệu lượng từ dùng Lloyds');
% Điều chỉnh vùng vẽ theo trục x và trục y của hình
axis([-.2 max(t) -1.2 1.2])
set(gcf,'color', 'white');
xlabel('t');

% ví dụ 4.44
% y(k)=x(k-1)
predictor = [0 1];
partition = [-1:.1:.9];
codebook = [-1:.1:1];
t=[0:pi/50:2*pi];

% Tạo tín hiệu gốc


x = sawtooth(3*t);

% Luong tu DPCM
encodedx=dpcmenco(x,codebook,partition,predictor);

% Phục hồi tin hiệu lượng tử DPCM


decodedx=dpcmdeco(encodedx,codebook,predictor);

% Vẽ hình so sánh
plot(t,x,t,decodedx,'--')
legend('Tín hiệu gốc','Tín hiệu DPCM','Location','North Outside');
set(gcf,'color', 'white');

% Sai số của lỗi trung bình bình phương


distor= sum((x-decodedx).^2)/length(x)

%ví dụ 4.45
% Mã hóa Huffman
dict = huffmandict(1:6,[.5 .125 .125 .125 .0625 .0625]);
S = randi([1 6],1,10)
enS = huffmanenco(S,dict)
deS = huffmandeco(enS,dict)

%ví dụ 4.46
% Đặc tính dữ liệu
counts = [99 1];

% Chiều dài dữ liệu


N=1000;

% Dữ liệu nhiệt độ theo phân bố cho trước


sig = randsrc(1,N,[1 2;counts/100]);
% Mã hóa số học
sig_en = arithenco(sig,counts);

%. Chiều dài dữ liệu sau mà hóa


sig_len = size(sig_en)
% ví dụ 4.47
% chiều dài mỗi bit
N = 20;

% Tạo tín hiệu vào toán 1


x=ones(N,1);
% Khởi tạo đối tượng CRC
h=crc.generator('Polynomial',[1 0 1 1 1],'InitialState',[0 0 0 0],'FinalXOR',[1
1 1 1]);

% Tạo dữ liệu chén với mã CRC


x_crc = generate(h,x);

% Chèn lỗi vào tín hiệu nhận


x_crc(1:2) = ~x_crc(1:2);

% Khởi tạo bộ kiểm tra CRC


h=crc.detector('Polynomial',[1 0 1 1 1],'InitialState',[0 0 0 0],'FinalXOR',[1
1 1 1]);

% Kiểm tra mã CRC phía thu


[x_,error]=detect(h,x_crc);

% Kiểm tra có lỗi hay không?


error

% Tính số lỗi
sum(x~=x_)

% ví dụ 4.48
% Thiết lập mã Hamming
k = 11;
n = 15;
data = randi([0 1],k,1);
TxData = encode(data,n,k,'hamming/binary');

% Trường hợp l
% Sai 1 bit tại bắt thứ 3
RxData = TxData;
RxData(3)=~ RxData(3);
decData = decode(RxData,n,k,'hamming/binary');
numerr=sum(data~= decData)

% Trường hợp 2
% Sai hai bit 1 và 2
RxData = TxData;
RxData(1:2)=~RxData(1:2);
decData = decode(RxData,n,k,'hamming/binary');
numerr = sum(data~=decData)

% ví dụ 4.49
%Mã vòng(n,k)= (15,5)
n=15;
k=5;
%Khởi tạo dữ liệu
data=randi([0 1],k,1);
%Khi tạo đa thức vòng
gpol=cyclpoly(n,k);
%Tạo ra ma trận sinh
parmat=cyclgen(n,gpol);
%Tạo ra bảng giải mã syndrome
trt=syndtable(parmat);
%Mã hóa vòng
TxData=encode(data,n,k,'cyclic/binary',gpol);

%%Trường hợp 1: sai 4 bit từ 4 đến 7


RxData=TxData;
RxData(4:7)=~RxData(4:7);
decData=decode(RxData,n,k,'cyclic/binary',gpol,trt);
numerr=biterr(data,decData)

%%Trường hợp 2: sai 6 bit từ 1 đến 6


RxData=TxData;
RxData(1:6)=~RxData(1:6);
decData=decode(RxData,n,k,'cyclic/binary',gpol,trt);
numerr=biterr(data,decData)
%Vidu 4.50
M=4;

%Chiều dài từ mã
n=2^M-1;

%Chiều dài bản tin


k=5;
%Số lượng từ mã để mã hóa
nwords=10;
%Chuyển sang trường GF
msgTx=gf(randi([0 1],nwords,k));

%Mã hóa
enc=bchenc(msgTx,n,k);

%Kiểm tra khả năng sửa lỗi của mã, giá trị ne là giá trị số lỗi mà mã BCH
%có khả năng sửa được
ne=bchnumerr(n,k);

%%Trường hợp 1: Số lỗi sai bằng khả năng sửa lỗi


noisycode1=enc+randerr(nwords,n,1:ne);
[msgRx1,numerr1]=bchdec(noisycode1,n,k);
%Các vị trí trên vector numerr1 bằng 1 là bit sai
sum(numerr1==-1)

%%Trường hợp 2: Số lỗi sai hơn khả năng sửa lỗi


noisycode2=enc+randerr(nwords,n,1:ne+1);
[msgRx2,numerr2]=bchdec(noisycode2,n,k);
sum(numerr2==-1)

You might also like