Báo cáo
Thí nghiệm thơng tin số
Sinh viên: Nguyễn Văn Cơng
Lớp: Điện tử 2 – K56
MSSV: 20115466
Hà Nội ngày 28 tháng 3 năm 2014
BÀI SỐ 1
Q trình ngẫu nhiên của tín hiệu
Bài 1.1.
Code matlab
x=-5:0.1:5 % tao x la 1 mang cac phan tu trong khoang (-5,5), cach nhau 0.1
Px=exp(-x.^2/2)/sqrt(2*pi); % ham phan bo xs
plot(x,Px); % ve do thi ham phan phoi xs
title(‘ham phan bo xs theo dinh luat phan phoi chuan’); % ten do thi
xlabel(‘x’); % dien ten truc x
ylabel(‘y’); % dien ten truc y
Bài 1.1.
Code matlab
len=100000;
% do dai cia qua trinh ngau nhien.
x=randn(1,len); % tao qua trinh ngau nhien trong phan phoi chuan
step=.1;
k=-5:step:5;
% tao khoang cach
% khoang cach xet trong khoang (-5,5)
px=hist(x,k)/len/step; % tinh so vecto trong cac khoang duoc cho boi k
stem(k,px);
% ve do thi roi rac
Px_lythuyet = exp(-k.^2/2)/ sqrt(2*pi); % ham phan bo ly thuyet
hold on;
% giu do thi vua ve
plot(k,Px_lythuyet);
% ve do thi ham phan bo xs phan phoi chuan
title('phan bo xac suat Gauss'); % tieu de do thi
xlabel('x');
ylabel('p(x)');
% truc hoanh
% truc tung
legend('Ly thuyet','Mo phong');
hold of;
Thay đổi độ dài của quá trình ngẫu nhiên trong bài 1.2 lên thành len=1000000
BÀI SỐ 2
Lượng tử hóa tuyến tính
Bài 2.1
Code matlab
t=0:0.01:20;
xt=sin(randn()+t).*cos(rand()*t);
[inx xqt]= lquan(xt,-1,1,randint(1,1,3)+2);
plot(t,xt,'b',t,xqt,'r');
grid on;
BÀI SỐ 3
Tạp âm lượng tử trong kỹ thuật lượng tử hóa tuyến tính
Bài 3.1
Code matlab
N=1000;
x=2*rand(1,N)-1;
% x phan bo deu tu -1 den 1
nbit= 1:10;
% so bit luong tu tu 1 den 10
SNqR= zeros(size(nbit));
% khoi tao mang SNqR chua ket qua
SNqR_lt= 6.02 * nbit;
% Mang chua SNqR tinh theo ly thuyet
Ps=sum(x.^2)/N;
% cong suat tin hieu x
for i=1:size(nbit,2)
[inx xq]=lquan(x,-1,1,nbit(i));
eq= x-xq;
Pq=sum(eq.^2)/N;
SNqR(i)=10*log(Ps/Pq);
end
plot(nbit,SNqR,'b',nbit,SNqR_lt,'r');
title('Do thi mo phong');
xlabel('nbit');
ylabel('SNqR');
legend( 'Mo phong','ly thuyet');
grid on;
Bài 3.2
Tương tự bài 3.1, thay đổi tín hiệu x là tín hiệu điều hịa
X=sin(linspace(1,5,N));
N=1000;
x=sin(linspace(1,5,N));
nbit= 1:10;
SNqR= zeros(size(nbit));
SNqR_lt= 6.02 * nbit;
Ps=sum(x.^2)/N;
for i=1:size(nbit,2)
[inx xq]=lquan(x,-1,1,nbit(i));
eq= x-xq;
Pq=sum(eq.^2)/N;
SNqR(i)=10*log(Ps/Pq);
end
plot(nbit,SNqR,'b',nbit,SNqR_lt,'r');
title('Do thi mo phong');
xlabel('nbit');
ylabel('SNqR');
legend( 'Mo phong','ly thuyet');
grid on;
BÀI SỐ 4
Mật độ phổ năng lượng và hàm tự
tương quan của tín hiệu
Bài 4.1
Code matlab
L=500;
% do dai cua qua trinh ngau nhien
x=randn(1,L);
% tao qua trinh ngau nhien theo phan phoi chuan
[acorr_x,n]=xcorr(x);
% ham tu tuong quan cua x, dong thoi lay cac gia tri truc %hoanh va bien n
plot(n,acorr_x); % ve do thi ham tu tuong quan
title(' Do thi ham tu tuong quan ');
xlabel('x');
% truc hoanh
ylabel('r(x)');
% truc tung
% tieu de do thi
Thay đổi tín hiệu x bằng tín hiệu có biên độ tăng dần từ -1 đến 1
Tín hiệu sin
Bài 4.2
Code matlab
N=200; % so luong tan so roi rac du lon
L=50;
% do dai cua qua trinh ngau nhien
x=randn(1,L);
% x la qua trinh ngau nhien theo phan phoi chuan
w=linspace(0,2*pi,N);
%w là khoang tan so (0,2*pi) voi N tan so roi rac
fx=freqz(x,1,w);
% bien doi fourier cua x tai cac tan so roi rac trong w
esd_x=fx.*conj(fx);
% mat do pho nang luong cua x
plot(w/(2*pi),esd_x);
% do thi mat do pho nang luong
title('do thi mat do pho nang luong'); % tieu de do thi
xlabel('w/2\pi');
ylabel('ESD(x)');
Tìm hàm tự tương quan và vẽ đồ thị so sánh.
Code matlab
N=1000;
% so luong tan so roi rac du lon
L=500; % do dai cua qua trinh ngau nhien
x=randn(1,L);
% x la qua trinh ngau nhien theo phan phoi chuan
w=linspace(0,2*pi,N);
% w là khoang tan so (0,2*pi) voi N tan so roi rac
fx=freqz(x,1,w);
% bien doi fourier cua x tai cac tan so roi rac trong w
esd_x=fx.*conj(fx);
% mat do pho nang luong cua x
plot(w/(2*pi),esd_x);
% do thi mat do pho nang luong
hold on;
title(‘do thi mat do pho nang luong và ham tu tuong quan’);
xlabel(‘w/2\pi);
[acorr_x,n]=xcorr(x);
% ham tu tuong quan
ft_acorr_x=freqz(acorr_x,1,w).*exp(j*w*(L-1));
plot(w/(2*pi),real(ft_acorr_x),’r:’);
% do thi ham tuong quan
legend(‘ESD(w)’,’R(w)’);
hold of;
BÀI SỐ 5
Mã đường dây NRZ
Bài 5.1
Matlab code
len=100000; % do dai dong bit mo phong
SNR_db=0:2:8 % tao vecto SNR_db
SNR=10.^(SNR_db/10); % doi SNR tu decibel sang lann
bsignal=(rand(1,len)>=0.5);
NRZ_signal=bsignal*2-1; % bien doi dong bit 0 1 sang -1 1
N0=1./SNR;
% phuon sai cua tap am= cong suat tap am
% cho tin hieu di qua kenh nhieu trang va giai dieu che
for i=1:length(SNR_db)
noise=sqrt(N0(i))*randn(1,len); % tap am noise
r_signal=NRZ_signal+ noise; % tin hieu thu duoc = tin hieu NRZ ben
%phat+ tap am noise
NRZ_decoded=sign(r_signal); % giai ma tin hieu NRZ thu duoc
Pe(i)=symerr(NRZ_signal, NRZ_decoded)/len;
end
plot(SNR_db,Pe,'bo--'); % ve do thi
Bài 5.2
Code matlab
len=100000; % do dai dong bit mo phong
SNR_db=0:2:8 % tao vecto SNR_db
SNR=10.^(SNR_db/10); % doi SNR tu decibel sang lann
% tao dong bit nhi phan
bsignal=(rand(1,len)>=0.5);
NRZ_signal=bsignal*2-1; % bien doi dong bit 0 1 sang -1 1
N0=1./SNR;
% phuon sai cua tap am= cong suat tap am
% cho tin hieu di qua kenh nhieu trang va giai dieu che
for i=1:length(SNR_db)
noise=sqrt(N0(i))*randn(1,len); % tap am noise
r_signal=NRZ_signal+ noise; % tin hieu thu duoc = tin hieu NRZ ben
%phat+ tap am noise
NRZ_decoded=sign(r_signal); % giai ma tin hieu NRZ thu duoc
Pe(i)=symerr(NRZ_signal, NRZ_decoded)/len;
end
plot(SNR_db,Pe,'bo--'); % ve do thi
hold on;
Pe_lythuyet=(1/2)*(1-efr(sqrt(SNR/2)));
plot(SNR_db,Pe_lythuyet,'rx--'); % ve do thi ly thuyet
title('ty le loi bit BER theo ti le tin hieu tren tap am SNR');
xlabel('SNR [db]');
ylabel('BER');
legend('Mo phong','ly thuyet');
hold on;
BÀI SỐ 6
Điều chế QPSK
Bài 6.1
Code matlab
len=50000;
bsignal = (rand(1,len) >=0.5); % tao dong bit ngau nhien do dai len
qpsk_signal=[];
for i= 1:2:length(bsignal)
if bsignal(i)==0&bsignal(i+1)==0
qpsk_signal((i+1)/2)= exp(j*3*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*5*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*7*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*pi/4);
end
end
plot(qpsk_signal,'o'); % ve tin hieu dieu che len do thi
hold on;
t=0:0.01:2*pi;
plot(exp(j*t),'b--');
xlabel('I');
ylabal('Q');
title('bieu do chom sao qpsk');
Bài 6.2
Code matlab
len=50000;
bsignal = (rand(1,len) >=0.5); % tao dong bit ngau nhien do dai len
qpsk_signal=[];
for i= 1:2:length(bsignal)
if bsignal(i)==0&bsignal(i+1)==0
qpsk_signal((i+1)/2)= exp(j*3*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*5*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*7*pi/4);
elseif bsignal(i)==0&bsignal(i+1)==1
qpsk_signal((i+1)/2)= exp(j*pi/4);
end
end
Es=std(qpsk_signal).^2;
SNR_db=6;
SNR=10^(SNR_db/10);
N0=Es/SNR;
noise=sqrt(N0/2)*(randn(size(qpsk_signal))+ j*randn(size(qpsk_signal)));
output_signal=qpsk_signal+ noise;
plot(qpsk_signal,'ro');
t=0:0.01:2*pi;
plot(exp(j*t),'r--');
xlabel('I');
ylabel('Q');
title('tin hieu qpsk dieu che di qua kenh nhieu trang voi SNR=6db');
hold of;
BÀI SỐ 7
Mô phỏng điều chế QPSK
qua kênh nhiều Gauss
Bài 7.
Code matlab
function ber=QPSK_map(n,bit,snr)
%n- number of bit
%bit
%snr-Signal Noise Ratio
s=[];
for i=1:2:n
if bit(i)==0&bit(i+1)==0
s((i+1)/2)=exp(j*pi/4);
elseif bit(i)==0&bit(i+1)==1
s((i+1)/2)=exp(j*3*pi/4);
elseif bit(i)==1&bit(i+1)==1
s((i+1)/2)=exp(j*5*pi/4);
elseif bit(i)==1&bit(i+1)==0
s((i+1)/2)=exp(j*7*pi/4);
end
end
es=var(s);
eb=es/2;
n_0=eb/10^(snr/10);
noise=sqrt(n_0/2)*(randn(size(s))+j*randn(size(s)));
r=s+noise;
t=0:0.01:2*pi;
d=[];
bit1=[];
a=[0 0 0 1 1 1 1 0];
for i=1:n/2
d(1)=(real(r(i))-real(exp(j*pi*1/4)))^2+(imag(r(i))-imag(exp(j*pi/4)))^2;
m=1;
for k=2:4
d(k)=(real(r(i))-real(exp(j*pi*(2*k-1)/4)))^2+(imag(r(i))-imag(exp(j*(2*k-1)*pi/4)))^2;
if d(k)<=d(m)
m=k;
end
end
bit1=[bit1 a(2*m-1) a(2*m)];
end
ber=sum(xor(bit,bit1))/n
end
.
SNR
BER
0
0,064
2
0.028
4
0.0069
6
0.0012
BÀI SỐ 8
Xác suất lỗi bít trong điều chế QPSK
Bài 8.1
Code matlab
n=50000;
snr=[0:1:10];
bit=randn(1,n)>0.5;
ber=[ ];p=[ ];
for i=1:length(snr)
ber(i)=QPSK_map(n,bit,snr(i));
gamma_b(i)=10^(snr(i)/10);
p(i)=erfc(sqrt(2*gamma_b(i))/sqrt(2))/2;
end
symilog(snr,ber,'-',snr,p,'--');
legend('Mo phong','Ly thuyet');
title('BER/SNR');
xlabel('SNR');
ylabel('BER');