Bài tập lớn truyền dẫn
- 1 -
Bài tập môn học: Kỹ Thuật truyền dẫn
Bài I: Biểu diễn tín hiệu của một số mã đường dây và vẽ phổ
của chúng.
I.1. Mã nguồn chương trình Matlab:
1.Mã NRZ: file nrz_l.m
function y=nrz_l(x)
for i=1:length(x)
if x(i)==0
temp(i) = -1;
else
temp(i) = +1;
end;
end
y=temp;
2.Mã CMI: file cmi_1.m
function y = cmi(x);
polar = +1; %chon cuc tinh cua bit 1 dau tien la duong
for i=1:length(x)
if x(i)==1
temp(2*i-1) = polar;
temp(2*i) = polar;
polar = -polar; %xac dinh cuc tinh cho bit 1 tiep theo
else
temp(2*i-1) = -1;
temp(2*i) = +1;
end
end
y = temp;
Bài tập lớn truyền dẫn
- 2 -
3.Mã HDB3: File hdb3.m
function y = hdb3(x)
next_polar = +1;
b=0; %so bit B giua 2 bit V
i=1;
while i<= length(x)
if x(i)==1
temp(i)=next_polar;
next_polar = -next_polar;
b=b+1;
i=i+1;
else
if (i<=length(x)-3)&(x(i+1)==0) & (x(i+2)==0) & (x(i+3)==0)
%truong hop 4 bit 0 lien tiep
if mod(b,2)==1
temp(i) = 0; %bit 0
temp(i+1) = 0; %bit 0
temp(i+2) = 0; %bit 0
temp(i+3) = -next_polar;%bit V
next_polar = -next_polar;
b=0;
i=i+4;
else
temp(i) = next_polar; %bit B
temp(i+1) = 0; %bit 0
temp(i+2) = 0; %bit 0
temp(i+3) = next_polar; %bit V
next_polar = -next_polar;
b=0;
i=i+4;
end
else
temp(i)=0; %truong hop 3 bit ke tiep khac 000
i=i+1;
end
end
Bài tập lớn truyền dẫn
- 3 -
end
y=temp;
4. Mã AMI: File ami.m
function y=ami(x)
b=+1;
for i=1: length(x)
if x(i)==1
temp(i)=b;
b=-b;
else
temp(i)=0;
end
end
y=temp;
5. Mã Manchester: File manchester.m
function y= manchester(x)
for i=1 : length(x)
if x(i)==1
temp(2*i-1) = +1;
temp(2*i) = -1;
else
temp(2*i-1) = -1;
temp(2*i) = +1;
end
end
y=temp;
6. Mã Polar RZ: File polar_RZ
function y = polar_RZ(x)
for i=1:length(x)
if x(i)==1
temp(2*i-1) = 1;
temp(2*i) = 0;
else
temp(2*i-1) = -1;
temp(2*i) = 0;
end;
Bài tập lớn truyền dẫn
- 4 -
end
y=temp;
7. Mã Unipolar RZ: File unipolar_RZ.m
function y=unipolar_RZ(x)
for i=1:length(x)
if x(i)==1
temp(2*i-1) =1;
temp(2*i) =0;
else
temp(2*i-1) =0;
temp(2*i) =0;
end
end
y=temp;
I.2.Chương trình vẽ và phân tích phổ của tín hiệu ở dạng mã
đường dây
File maduongday.m
clear; %Xoa cac bien hien co
bits = 30; %so bit se khao sat
t = 1:30;
data2 = round(rand(1, bits));
%Ma hoa chuoi du lieu goc%
%hdb3 la mot ham duoc dinh nghia o file hdb3.m
%ami la mot ham duoc dinh nghia o file ami.m
%unipolar_RZ la mot ham duoc dinh nghia o file unipolar_RZ.m
disp('chon dang ma duong day');
disp('1: ma NRZ');
disp('2: ma HDB3');
disp('3: ma AMI');
disp('4: ma NRZ_L');
disp('----');
disp('10: RZ');
disp('20: ma polar_RZ');
Bài tập lớn truyền dẫn
- 5 -
disp('30: ma Manchester');
disp('40: ma CMI');
linecode = input('chon dang ma se phan tich: ');
switch linecode
%%Truong hop cac ma don bit day du
case {1}
data3 = data2;
TenDoThi='NRZ';
case {2}
data3 = hdb3(data2);
TenDoThi='HDB3';
case {3}
data3=ami(data2);
TenDoThi='AMI';
case {4}
data3=nrz_l(data2);
TenDoThi='NRZ-L';
%Truong hop cac ma co ve khong hay nua bit
case {10}
data3=RZ(data2);
data2=reshape([data2; data2],1,length(data2)*2);
t=0.5:0.5:30;
TenDoThi='RZ';
case {20}
data3=polar_RZ(data2);
data2=reshape([data2; data2],1,length(data2)*2);
TenDoThi='polar_RZ';
t=0.5:0.5:30;
case {30}
data3=manchester(data2);
data2=reshape([data2; data2],1,length(data2)*2);
TenDoThi='Manchester';
t=0.5:0.5:30;
case {40}
data3=cmi(data2);
data2=reshape([data2; data2],1,length(data2)*2);
Bài tập lớn truyền dẫn
- 6 -
TenDoThi='CMI';
t=0.5:0.5:30;
otherwise
error('nhap gia tri sai');
end
%Do thi thoi gian cua du lieu goc
subplot(3, 1, 1);
stairs(t,data2)
ylabel('Bien do');
title(TenDoThi);
axis([0 bits+1 -1.2 1.2]);
grid off;
%Do thi thoi gian cua du lieu da ma hoa
subplot(3, 1, 2);
stairs(t,data3);
ylabel(['Bien do']);
axis([0 bits+1 -1.2 1.2]);
grid off;
%Enconding using NRZ-L%
%Mo rong khong gian lay mau%
sampleRate = 2;
if mod(linecode,10)==0
Y1 = reshape(ones(sampleRate, 1)*data3, 1, sampleRate*bits*2);
else
Y1 = reshape(ones(sampleRate, 1)*data3, 1, sampleRate*bits);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%tinh FFT va ve do thi pho cong suat%
N=sampleRate*bits;
if mod(linecode,10) == 0
FFT_Y1 = abs(fft(Y1, N*2))/N/2;
FFT_Y1 = fftshift(FFT_Y1);
subplot(3, 1, 3);
F = [-N:N-1]./N;
plot(F, FFT_Y1);