HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
-----
-----
BÀI TẬP LỚN
MƠN HỌC: MƠ PHỎNG HỆ THỐNG TRUYỀN THƠNG
NHĨM 01
Giảng viên
Sinh viên
Mã sinh viên
Lớp
SĐT
Email
:
:
:
:
:
:
NGÔ THỊ THU TRANG
NGUYỄN GIA LONG
B17DCVT224
D17CQVT08-B
0378590701
Hà Nội, tháng 11 năm 2020
Nhiệm vụ 1:
Mơ phỏng q trình nén và PCM cho tín hiệu tương tự, trong đó tín hiệu tương tự dạng
thoại đầu vào được mô tả bởi công thức sau:
với Ai lần lượt là [1, 2, 3] và ϕi lần lượt là [0, pi/2, 3pi/2], tần số fi được xác định từ
mã số của mỗi sinh viên theo biểu thức fi = ix100 Hz với i lần lượt là 3 số cuối cùng
trong mã số sinh viên.
− Tại phía phát, thực hiện nén tín hiệu trên theo luật µ với hệ số nén µ=2.
− Sau đó, thực hiện chuyển đổi tín hiệu vừa nén thành tín hiệu số nhị phân theo
phương pháp PCM đều để làm nguồn tín hiệu đầu vào cho nhiệm vụ 2.
− Thực hiện ngược lại quá trình chuyển đổi bit nhị phân thành tín hiệu tương tự
dạng âm thoại ban đầu với quá trình ngược quá trình trên.
Phần 1: Mơ tả hệ thống mơ phỏng và các tham số được sử dụng trong mô
phỏng
Tham số :
f1 = 200 Hz
f2 = 200 Hz
f3 = 400 Hz
Tần số lấy mẫu: fs = 8KHz
A=[1, 2, 3]
ϕi lần lượt là [0, pi/2, 3pi/2]
fi = ix100 Hz
µ=2
Mơ tả bằng sơ đồ khối quá trình
Sơ dồ khối trên Simulink
Phần 2: Trình bày kết quả mô phỏng và nhận xét đánh giá
Figure 1: Biễu diễn tín hiệu gốc
Figure 2: Biễu diễn tín hiệu gốc và sau khi khôi phục
Figure 3: Biễu diễn mẫu trước và sau khi nén
Figure 4: Biễu diễn phổ tín hiệu gốc, tín hiệu lượng tử hóa
và tín hiệu sau khi khơ phục
Nhận xét :
Tín hiệu hình sin trước và sau khi lấy mẫu và lượng hóa rồi khơi phục gần như khơng có
khác biệt . Điều này chứng tỏ q trình mơ phỏng truyền dẫn thu phát không xảy ra lỗi .
Phương pháp lượng tử hóa cho ra kết quả tốt trong việc thu phát tín hiệu
Phần 3: Mã chương trình được viết để mơ phỏng hệ thống và chú giải
Nén tín hiệu
function [y,a] = mulaw(x,mu)
% Mu-law tuyen tinh cho PCM ko deu
% x - chuoi vao
% mu - hang so mu
% y - dau ra bi nen
% a - bien do max
a = max(abs(x));
y = sign(x).*(a*log(1+mu*abs(x)/a)/log(1+mu));
Lượng tử hóa
function [code,xq,sqnr] = uniform_pcm(x,M)
% x = chuoi dau vao
% M = so muc luong tu lay mau
% code = chuoi dau ra
% xq = chuoi luong tu trc ma hoa
% sqnr = ty le tin hieu nhieu luong tu theo dB
Nb = log2(M);
Amax = max(abs(x));
delta = 2*Amax/(M-1);
Mq = -Amax:delta:Amax;
MI = 0:M-1;
xq = zeros(size(x));
xcode = xq;
for k = 1:M
ind=find(x>Mq(k)-delta/2 & x<= Mq(k)+delta/2);
xq(ind)=Mq(k);
xcode(ind)=MI(k);
end
sqnr = 20*log10(norm(x)/norm(x-xq));
code = de2bi(xcode,Nb,'left-msb');
Giải nén
function x = invmulaw(y,mu,a)
% Nghich dao cua phi tuyen tinh mu-law
% mu - hang so mu
% y - chuoi nen dau vao
% x - chuoi giai nen dau ra
x = sign(y).*(exp(abs(y)*log(1+mu)/a)-1)*(a/mu);
Tính tốn phổ
function [f,Pf] = spectrocal(t,x)
% Chuong trinh tinh toan pho
% t - vector thoi gia
% x - vector mau dau vao
% f - vector tan so
% Pf - uoc luong PSD cua x
Ns = length(x);
Ts = t(2)-t(1);
f = (-Ns/2:Ns/2-1)/(Ns*Ts);
Pf = fft(x,Ns);
Pf = fftshift(Pf)/Ns;
Pf = abs(Pf).^2;
Chương trình chính
close all; clear; clc
f = [200 200 400];
Tp = 1/200;
phi = [0 pi/2 3*pi/2];
A = [1 2 3];
fs = 8000;
Np = 3;
Ts = 1/fs;
t = 0:Ts:Np*Tp;
s = A(1)*cos(2*pi*f(1)*t + phi(1)) + A(2)*cos(2*pi*f(2)*t + phi(2)) +
A(3)*cos(2*pi*f(3)*t +phi(3));
mu = 2;
M = 2^8;
[y,amax] = nen(s,mu);
[code,yq,sqnr] = luongtu_pcm(y,M);
xq = giainen(yq,mu,amax);
figure(1)
plot(t,s,'b--','linewidth',2);
title ('Bieu dien tin hieu goc');
xlabel('thoi gian (s)');
ylabel('bien do');
grid on
figure(2)
plot(t,xq,'g','linewidth',2);
hold on
plot(t,s,'b--','linewidth',2);
title (' tin hieu goc va sau khoi phuc');
xlabel('thoi gian (s)');
ylabel('bien do');
legend ('Tin hieu sau khoi phuc','Tin hieu goc');
grid on
figure(3)
stem(t,s);
hold on;
stem (t,y);
title('Mau truoc va sau bo nen');
xlabel('thoi gian (s)');
ylabel('bien do');
legend('Truoc khi nen','Sau khi nen');
grid on
figure(4)
subplot(3,1,1);
[f,Xf] = pho(t,s); semilogy(f,Xf);grid;
title('Pho tin hieu goc');
subplot(3,1,2);
[f,Yf] = pho(t,yq); semilogy(f,Yf);grid;
title('Pho tin hieu luong tu hoa');
subplot(3,1,3);
[f,Zf] = pho(t,xq); semilogy(f,Zf);grid;
title('Pho tin hieu khoi phuc');
Nhiệm vụ 2:
Mô phỏng hệ thống truyền dẫn số để truyền tín hiệu số thu được sau khi nén và
chuyển đổi PCM từ nhiệm vụ 1 trong khoảng 15s. Trong trường hợp không thực hiện lấy
nguồn tin từ nhiệm vụ 1 được hãy thay thế bằng một chuỗi tín hiệu nhị phân ngẫu nhiên
tương đương. Mỗi sinh viên sẽ lựa chọn một trong các kĩ thuật điều chế sau cho hệ thống
mơ phỏng của mình:
- Điều chế DPSK nếu số cuối cùng trong mã sinh viên là lẻ
- Điều chế QPSK nếu số cuối cùng trong mã sinh viên là chẵn
Sử dụng mơ hình mơ phỏng tương đương băng gốc, tín hiệu phát có thể được biểu
diễn như sau:
trong đó dk là các kí hiệu (symbol) phức được xác định từ chuỗi bản tin đầu vào và kỹ
thuật điều chế; Tsym là chu kỳ của symbol; φ0 là pha của tín hiệu phát và p(t) xác định
dạng xung được phát,
Phần 1: Mô tả hệ thống mô phỏng bằng sơ dồ khối và xác định tham số
của hệ thống
Các tham số chính của hệ thống:
Rbit = 7.
/ – Tốc độ dữ liệu
Nbit = 1000 – Số lượng bit thực hiện mô phỏng
Coi 0 = 0
Fsam = 7.
- Tần số lấy mẫu
Fc = 5.
- Tần số sóng mang
Thực hiện mơ phỏng theo chuẩn Es=1.
QPSK.
-
Tín hiệu truyền qua kênh AWGN
( )
( )= ( )+ ( )
-
n(t) là nhiễu Gauss trắng cộng giá trị phức gồm hai thành phần tạp âm vng
góc nI(t) và nQ(t)
-
Trong mỗi chu kỳ ký hiệu Ts lấy mẫu tín hiệu sn(t) và xác định pha của tính
hiện lấy mẫu đó dnk = dk + xk , k= 1, 2, 3, …, N; N là số chu kỳ ký hiệu Ts
- d= là thành phần nhận được từ tín hiệu phát
-
xk là một biến ngẫu nhiên gây ra bởi tạp âm.
Sơ đồ khối
Phần 2: Trình bày kết quả mơ phỏng
a) Dạng sóng tín hiệu tại đầu ra bộ điều chế
b) Dạng sóng tín hiệu khi đi qua kênh AWGN
c) Dạng sóng tín hiệu sau khi được khơi phục
d)
Biểu đồ chịm sao tín hiệu QPSK
e) Phổ tín hiệu sau điều chế
g) Phổ tín hiệu sau khi khơi phục
h) Đường cong bit lỗi QPSK
Phần 3:Mã chương trình viết để mơ phỏng hệ thống và chú giải
d=randint (1,1000);%chuoi nhi phan dau vao.
L=length(d);
SNR=15; %y so tin hieu tren tap am.
y=1;
N=5*10^6;%toc do du lieu.
Fc=10^7;%tan so song mang.
T=1/N;%thoi gian truyen bit.
t=0:T*L/(30*L-1):T*L;
%tao chuoi dk gom 1,-1,j va -j.
for x=1:2:L
if d(x)==0 && d(x+1)==0 dk((y1)*60+1:y*60)=1; y=y+1;
elseif d(x)==0 && d(x+1)==1 dk((y-1)*60+1:y*60)=j;
y=y+1;
elseif d(x)==1 && d(x+1)==1 dk((y-1)*60+1:y*60)=-1; y=y+1;
elseif d(x)==1 &&d(x+1)==0
dk((y-1)*60+1:y*60)=-j;
y=y+1;
end
end
end
end
end
%tao tin hieu phat st voi pha cua tin hieu phat la pi/4.
st=dk*exp(j*pi/4);
st _awgn=awgn(st,SNR,'measured');%tin hieu qua kenh
AWGN.
% Ve dang tin hieu ban dau
subplot(3,1,1) stairs(d)
axis([0 100 -1.5 1.5]) title( 'Chuoi
ban dau' ) subplot(3,1,2) stairs(b)
axis([0 100 -0.5 1.5]) title( 'Chuoi
phat' )
subplot(3,1,3)
plot(t,a)
title( 'Chuoi QPSK phat di' )
%Giai dieu che ban tin QPSK.
%tim pha cua tin hieu tai phia thu.
for x=1:60*L/2
if angle(st_awgn(x))<=pi/2 && angle(st_awgn(x))>0 phi(x)=pi/4;
elseif angle(st_awgn(x))<=pi && angle(st_awgn(x))>pi/2 phi(x)=3*pi/4;
elseif angle(st_awgn(x))<=0 && angle(st_awgn(x))>-pi/2
phi(x)= 7*pi/4;
elseif angle(st_awgn(x))<=-pi/2 && angle(st_awgn(x))>-pi phi(x)=5*pi/4;
end
end
end
end
end
%tim lai vecto phat.
z=1;
for x=30:60:60*L/2
if phi(x)==pi/4
r((z-1)*30+1:z*30)=0;
r(z*30+1:z*30+30)=0;
z=z+2;
elseif phi(x)==3*pi/4
r((z-1)*30+1:z*30)=0;
r(z*30+1:z*30+30)=1; z=z+2;
elseif phi(x)==5*pi/4
r((z-1)*30+1:z*30)=1;
r(z*30+1:z*30+30)=1;
z=z+2;
elseif phi(x)==7*pi/4
r((z-1)*30+1:z*30)=1;
r(z*30+1:z*30+30)=0;
z=z+2;
end
end
end
end
end
%ve bieu do chom sao QPSK.
h=scatterplot(st_awgn,1,0,'xb');
hold on
scatterplot(st,1,0,'or',h)
title('bieu do chom sao tin hieu QPSK')
%ve dang song tin hieu.
for x=1:30*L
sdc(x)=cos(2*pi*Fc*t(x)+ angle(st(x)));
sdc_awgn(x)=cos(2*pi*Fc*t(x)+angle(st_awgn(x)));
end
figure(2)
plot(t,sdc)
title('dang song tin hieu tai dau ra bo dieu che')
figure(3)
plot(t,sdc_awgn);
title('dang song tin hieu khi qua kenh awgn')
figure(4)
plot(t,r)
title('dang song tin hieu sau khi duoc khoi phuc')
%pho tin hieu dieu che.
f=(-30*L/2:30*L/2-1)/(30*L*(t(2)-t(1))); pho_dc=fft(sdc,30*L);
pho_dc=fftshift(pho_dc);
figure(5)
plot(f,abs(pho_dc).^2/(30*L)) title('pho tin hieu
sau dieu che')
%pho tin hieu khi qua kenh awgn.
pho_awgn=fft(sdc_awgn,30*L);
pho_awgn=fftshift(pho_awgn); figure(6)
plot(f,abs(pho_awgn).^2/(30*L)) title('pho tin hieu
qua kenh awgn')
%pho tin hieu khi khoi phuc tai phia thu.
pho_r=fft(r,30*L);
pho_r=fftshift(pho_r);
figure(7)
plot(f,abs(pho_r).^2/(30*L))
title('pho tin hieu khi duoc khoi phuc')
%ve duong cong xac xuat loi.
%tao chuoi bit ngau nhien QPSK.
Dk=randint(1,5*10^5,[0 3]);
Phi=2*pi*Dk/4 + pi/4;
sk=exp(j*Phi);
SNRdB=0:15;%dB
for k=1:length(SNRdB)
st=awgn(sk,SNRdB(k),'measured');
for c=1:length(Dk)
if angle(st(c))<=pi/2 && angle(st(c))>0 phi(c)=pi/4;
elseif angle(st(c))<=pi && angle(st(c))>pi/2 phi(c)=3*pi/4;
elseif angle(st(c))<=3*pi/2 && angle(st(c))>pi phi(c)= 5*pi/4;
elseif angle(st(c))<=2*pi && angle(st(c))>3*pi/2 phi(c)=7*pi/4;
end
end
end
end
end
error=phi-phi;
%tim so symbol sai.
so_loi=length(find(error~=0));
BER(k)=so_loi/(5*10^5);
end
% BER theo ly thuyet truyen dan QPSK la:
BER_lt=erfc(sqrt(10.^(SNRdB./10)));
%ve do thi.
figure(8)
semilogy(SNRdB,BER,'*',SNRdB,BER_lt);
xlabel('SNR')
ylabel('BER')
legend('theo mo phong','theo ly thuyet')
title('duong cong bit loi QPSK')
grid
r((z-1)*30+1:z*30)=1;
r(z*30+1:z*30+30)=0;
z=z+2;
end
end
end
end
end
%ve bieu do chom sao QPSK.
h=scatterplot(st_awgn,1,0,'xb');
hold on
scatterplot(st,1,0,'or',h)
title('bieu do chom sao tin hieu QPSK')
%ve dang song tin hieu.
for x=1:30*L
sdc(x)=cos(2*pi*Fc*t(x)+ angle(st(x)));
sdc_awgn(x)=cos(2*pi*Fc*t(x)+angle(st_awgn(x)));
end
figure(2)
plot(t,sdc)
title('dang song tin hieu tai dau ra bo dieu che')
figure(3)
plot(t,sdc_awgn);
title('dang song tin hieu khi qua kenh awgn')
figure(4)
plot(t,r)
title('dang song tin hieu sau khi duoc khoi phuc') %ve mat(chua lam
duoc).
% Mau mat cua tin hieu tai cac diem tren he thong %ve pho cua tin hieu.
%pho tin hieu dieu che. f=(-30*L/2:30*L/2-1)/(30*L*(t(2)-t(1)));
pho_dc=fft(sdc,30*L); pho_dc=fftshift(pho_dc);
figure(5)
plot(f,abs(pho_dc).^2/(30*L)) title('pho tin hieu
sau dieu che')
%pho tin hieu khi qua kenh awgn.
pho_awgn=fft(sdc_awgn,30*L);
pho_awgn=fftshift(pho_awgn); figure(6)
plot(f,abs(pho_awgn).^2/(30*L)) title('pho tin hieu
qua kenh awgn')
%pho tin hieu khi khoi phuc tai phia thu.
pho_r=fft(r,30*L);
pho_r=fftshift(pho_r);
figure(7)
plot(f,abs(pho_r).^2/(30*L))
title('pho tin hieu khi duoc khoi phuc')
%ve duong cong xac xuat loi.
%tao chuoi bit ngau nhien QPSK.
Dk=randint(1,5*10^5,[0 3]);
Phi=2*pi*Dk/4 + pi/4;
sk=exp(j*Phi);
SNRdB=0:15;%dB
for k=1:length(SNRdB)
st=awgn(sk,SNRdB(k),'measured');
for c=1:length(Dk)
if angle(st(c))<=pi/2 && angle(st(c))>0 phi(c)=pi/4;
elseif angle(st(c))<=pi && angle(st(c))>pi/2 phi(c)=3*pi/4;
elseif angle(st(c))<=3*pi/2 && angle(st(c))>pi phi(c)= 5*pi/4;
elseif angle(st(c))<=2*pi && angle(st(c))>3*pi/2 phi(c)=7*pi/4;
end
end
end
end
end
error=phi-phi;
%tim so symbol sai.
so_loi=length(find(error~=0));
BER(k)=so_loi/(5*10^5);
end
% BER theo ly thuyet truyen dan QPSK la:
BER_lt=erfc(sqrt(10.^(SNRdB./10)));
%ve do thi.
figure(8)
semilogy(SNRdB,BER,'*',SNRdB,BER_lt);
xlabel('SNR')
ylabel('BER')
legend('theo mo phong','theo ly thuyet')
title('duong cong bit loi QPSK')
grid
Mô phỏng Monte Carlo
clear
N = 5*10^7; % number of symbols
Es_N0_dB = [ -3:14]; % multiple Eb/N0 values ipHat =
zeros(1,N);
for ii = 1:length(Es_N0_dB)
ip = (2*(randi(1,N)>0.5) -1) + j*(2*(rand(1,N)>0.5) -1); % s = (1/sqrt(2))*ip; %
normalization of energy to 1
n = 1/sqrt(2)*[randi(1,N) + j*N)]; % white guassian noise, 0dB variance
y = s + 10^( -Es_N0_dB(ii)/20)*n; % additive white gaussian noise
% demodulation
y_re = real(y); % real
y_im = imag(y); % imaginary
ipHat(find(y_re < 0 & im 0)) = -1 + -1*j; ipHat(find(y_re
>= 0 & im > 0)) = 1 + 1*j; ipHat(find(y_re < 0 & im >= 0))
= -1 + 1*j; ipHat(find(y_re >= 0 & im < 0)) = 1 - 1*j;
nErr(ii) = size(find([ip - ipHat]),2); % couting the number of errors
end
simSer_QPSK = nErr/N;
theorySer_QPSK = erfc(sqrt(0.5*(10.^(Es_N0_dB/10)))) (1/4)*(erfc(sqrt(0.5*(10.^(Es_N0_dB/10)) ))).^2;
close all
figure
semilogy(Es_N0_dB,theorySer_QPSK, 'b. -');
hold on
semilogy(Es_N0_dB,simSer_QPSK, 'mx -');
axis([ -3 15 10^ -5 1])
grid on
legend( 'theory -QPSK' , 'simulation -QPSK' );