Está en la página 1de 13

1

Bài tập 1
1. Giới thiệu chung:
Trong nghiên cứu các hệ thống thông tin vô tuyến, việc mô phỏng
các hệ thống là một giải pháp vô cùng tối ưu và tiện lợi. Nó giúp tiết kiệm
chi phí, thời gian, công sức. Chưa kể các hệ thống phức tạp, chỉ có trên lý
thuyết, tuy nhiên lại có thể biểu diễn được qua mô phỏng, phục vụ cho công
tác nghiên cứu, khai thác.
Trong bài tập 1, chúng ta sẽ tiến hành mô phỏng quá trình ánh xạ một
chuỗi tín hiệu ngẫu nhiên đã qua điều chế 16-QAM lên kênh truyền
AWGN. Cụ thể theo sơ đồ như sau:

Kênh
Dữ liệu Điều chế
Xử lý truyền
nhị phân 16-QAM
AWGN

Hình 1: Sơ đồ mô phỏng bài tập 1

Điều chế QAM (Quadrature Amplitude Modulation): điều chế biên


độ vuông góc, dễ hiểu hơn thì đây là phương pháp điều chế dựa trên việc
thay đổi pha và biên độ của sóng mang. QAM-N trong đó N = 2M (M là số
bit dùng để mã hóa cho một đơn vị vị trí trong đồ thị hình sao). Với QAM-
16 ta sẽ dùng 4 bit cho mọt vị trí.
Kênh truyền AWGN hay còn gọi là kênh tạp âm trắng AWGN là loại
tạp âm có đặc tính mật độ phổ tần số của nó là như nhau với mọi tần số.
Tức là, nó là nguồn tạp âm phát ra một lượng công suất như nhau trên một
đơn vị băng tần tại tất cả các tần số.

2. Các hàm được sử dụng trong Code:


Trong việc mô phỏng trên Matlab, với yêu cầu từ mục tiêu, ta cần sử
dụng một số hàm cơ bản nhưng cấp thiết phục vụ cho quá trình mô phỏng
như:
 randint(x): đây là hàm có sẵn trong chương trình, sử dụng
nhằm mục đích tạo ra các biến ngẫn nhiên theo phân bố chuẩn
tắc với giá trị trung bình là 0, phương sai 1 và độ lệch 1. Nôm
na, hàm randint(x) cho phép tạo ra một chuỗi bit nhị phân
ngẫu nhiên.

 reshape(x): cũng là một hàm có sẵn trong thư viện của Matlab,
hàm reshape(x) được sử dụng trong code nhằm xử lý tín hiệu
trước điều chế, tín hiệu sẽ được nhóm thành các nhóm k bit.

Lê Anh Đạt 1
2

 bi2de(x): dùng để chuyển đổi nhóm k bit tín hiệu nhị phân
thành symbol dạng thập phân.

 qammod(x): là hàm điều chế được sử dụng trong code, cụ thể


ta sẽ dùng điều chế 16-QAM.

 scatterplot(x): dùng để vẽ chòm sao tín hiệu

 awgn(x): là hàm được sử dụng với mục đích tạo ra kênh truyền
AWGN.
Ngoài ra còn một số lệnh hỗ trợ cho quá trình vẽ và biểu diễn tín
hiệu, cụ thể sẽ được nêu trong code.

3. Code:

%% BT 1 - Mo phong he thong bang Matlab


% SV: Le Anh Dat
% Lop: Mang Vien Thong - DHVT1B

%% Cai dat tham so cho he thong


M = 16; % Bac dieu che
k = log2(M); % He so dieu che cua mot ky tu
n = 3e4; % Kich thuoc mau
nsamp = 1; % Kich thuoc lay mau cua mot ky tu
hMod = modem.qammod(M); % Khoi tao dieu che QAM

%% Tao chuoi tin hieu


% Tao chuoi tin hieu ngau nhien dang cot
x = randint(n,1); % Chuoi tin hieu ngau nhien
% Ve 40 tin hieu dau tien
stem(x(1:40),'filled'); % Ve tin hieu (1:40)
title ('Bits Ngau Nhien');
xlabel ('Thu tu Bits');
ylabel ('Gia tri Bits');

%% Xu ly tin hieu
% Nhom cac bit ngau nhien thanh tung nhom k-bits
temp = reshape(x,length(x)/k.',k); % Tao nhom Bits
xsym = bi2de(temp); % Chuyen doi Nhi-Thap phan

%% Ve ky tu sau chuyen doi


% Ve 10 ky tu dau tien
figure; % Tao cua so hien thi moi
stem(xsym(1:10));
title('Ky Hieu Ngau Nhien');
xlabel ('Thu tu ky hieu');
ylabel ('Gia tri ky hieu');

%% Dieu che
% Dieu che 16-QAM
Lê Anh Đạt 2
3

y = qammod(xsym,M); % Ham dieu che


ytx = y;
scatterplot(ytx(1:5e3),1,0,'k*','h');
% Kenh truyen
% Gui tin hieu qua kenh truyen nhieu trang cong sinh AWGN
EbNo = 10; % Don vi dB
snr = EbNo + 10*log10(k)- 10*log10(nsamp);
ynoisy = awgn(ytx,snr,'measured');
% Tin hieu nhan
yrx = ynoisy;

%% Do thi chom sao


h = scatterplot(yrx(1:nsamp*5e3),nsamp,0,'g.');
hold on;
scatterplot(ytx(1:5e3),1,0,'k*',h);
title('Tin hieu Nhan');
legend('Tin hieu nhieu','Tin hieu phat');
axis([-5 5 -5 5]); % Tham so khung do thi
hold off;

4. Kết quả:
Sau khi run phần code ta nhận được kết quả gồm 4 figure như dưới:

Figure 1: Tín hiệu ngẫu nhiên tạo bởi hàm randint(x)

Lê Anh Đạt 3
4

Figure 2: Nhóm tín hiệu sau khi xử lý và biến đổi symbol

Figure 3: Biểu diễn đồ thị chòm sao tín hiệu 16-QAM

Lê Anh Đạt 4
5

Figure 4: Tín hiệu phát và tín hiệu ánh xạ lên kênh truyền

5. Nhận xét và kết luận:


Tại đầu phát, dữ liệu phát được tạo một cách ngẫu nhiên nhờ vào
hàm randint(n,1) trong đó n là số mẫu. Chuỗi đó tiếp tục được điều chế
QAM-16. Do đặc tính chỉ làm việc với các nhóm 4bit của mình, tín hiệu
trước khi điều chế cần thông qua một bước xử lí bao gồm các công việc
như nhóm chuỗi bit ( lệnh rashape(x,length(x)/k.’,k) ), lệnh này sẽ nhóm
chuỗi n bit thành các nhóm 4 bit và xếp thành một ma trận có độ lớn
length(x)/k hàng và k (4) cột.
Ma trận này sẽ là đầu vào của quá trình biến đổi symbol thông qua
hàm bi2de(). Từng nhóm 4bit sẽ chuyển thành một số thập phân (0-15).
Và sau đó là đưa vào điều chế.
Đối với kênh truyền AWGN, SNR của kênh sẽ được tính theo công
thức:
SNR = EbNo + 10*log10(k)- 10*log10(nsamp)
Trong đó EbNo = 10(dB). Tín hiệu cuối cùng sẽ được ánh xạ lên
kênh nhờ vào lệnh awgn(..,..).
Từ một chuỗi tín hiệu dữ liệu nhị phân ban đầu, qua quá trình xử lí
cũng như điều chế QAM-16 đã được ánh xạ lên kênh AWGN, tuy nhiên
tín hiệu mong muốn phát đi bị ảnh hưởng rất nhiều bởi các tín hệu nhiễu
xung quanh.

Lê Anh Đạt 5
6

Bài tập 2
1. Mô phỏng truyền dẫn BPSK qua kênh AWGN:
BPSK là phương pháp điều chế pha thường được sử dụng trong các
hệ thống thông tin vô tuyến. Hình dưới mô tả sơ đồ đơn giản của BPSK qua
kênh AWGN:

Z=Y+N X
Dữ liệu Điều chế Giải
nhị phân điều chế

X Y
AWGN N

BER

Hình 2: Sơ đồ truyền dẫn BPSK qua AWGN

2. Các hàm được sử dụng trong Code:


Để tiến hành mô phỏng trong Matlab ta cần sử dụng đến một số
lệnh như sau:
 norm(): là hàm dùng để tính chuẩn của vector và ma trận,
trong code được sử dụng để tính năng lượng bit Eb của tín
hiệu.

 sqrt(): hàm toán học căn bậc 2.

 semilogy(): dùng để vẽ đồ thị tỉ số BER.

 real(): hàm số thực

 for-end : vòng lặp có điều kiện dừng

3. Code:

%% BT 2(BPSKAWGN.m) - Mo phong he thong bang Matlab


% SV: Le Anh Dat
% Lop: Mang Vien Thong - DHVT1B
% Truyen dan BPSK qua kenh AWGN

%% Xoa du lieu cu
clear all;
clc;
%% Khai bao tham so
SNR_dB = 0:10;
SNR = 10.^(SNR_dB./10);
Lê Anh Đạt 6
7

N = 5*10^6;

%% Tao tin hieu BPSK gom cac bit +1 -1


s = 1-2*(randn(1,N)>=0.5);

%% Tinh toan nang luong bit tin hieu Eb


Eb = norm(s)^2/N;

%% Mat do pho AWGN


No=Eb./SNR;

%% Vong lap tinh toan BER


for k=1:length(SNR)
% Tao kenh AWGN
n=sqrt(No(k)./2).*(randn(1,N)+j*randn(1,N));

% Tin hieu thu


y = s + n;

% Tach tin hieu


x = sign(real(y));
Err = s - x;
noErr = length(find(Err~=0));
BER(k)= noErr/N;

% BER ly thuyet
BER_LT=1/2*erfc(sqrt(SNR));
end

%% Ve do thi
semilogy(SNR_dB,BER,'*',SNR_dB,BER_LT);
xlabel('SNR_dB');
ylabel('BER');
legend('BER mo phong','BER ly thuyet');
title('Truyen dan BPSK qua AWGN');
grid on;

Lê Anh Đạt 7
8

4. Kết quả:

Figure 1: Tỉ số BER của truyền dẫ BPSK qua AWGN

5. Nhận xét và kết luận:

Các giá trị của BER tại mỗi giá trị SNR đều khác nhau.
Kết quả mô phỏng và giá trị BER theo lý thuyết gần như hoàn toàn
trùng nhau.
BER tỉ lệ nghịch với SNR, điều này có nghĩa là khi SNR lớn thì độ
chính xác của thông tin từ máy phát đến máy thi cũng tăng theo.
Chuỗi dữ liệu X (theo sơ đồ) đầu vào được tao ra từ hàm randint() có
sẵn bao gồm các giá trị 0 và 1. Trong điều chế BPSK, X sẽ được ánh xạ
thành Y { -1;1 } thông qua phép ánh xạ:

𝑛ế𝑢 𝑋 = 0
𝑌 = { √𝐸𝑠
−√𝐸𝑠 𝑛ế𝑢 𝑋 = 1

Với Es = 1 trong Matlab, ta dễ dàng biểu diễn qua công thức:


S = 1-2*(randn(1,N)>=0.5)

Lê Anh Đạt 8
9

Chuỗi Y sau đó sẽ được cộng với tín hiệu nhiễu trên kênh truyền
AWGN và gửi tới phía thu. Tại đây, máy thu sẽ tách tín hiệu thu, tách lấy
phần thực trước sau đó thực hiện tách tín hiệu sử dụng. Cụ thể như:

𝐼𝐹 𝑍 ≥ 0 𝑌 = 1
𝐸𝑙𝑠 𝑍 < 0 𝑌 = 0
Trong Matlab, việc này được thực hiện nhờ vào hàm sign() và đặt
trong vòng lặp for – end. Tín hiệu sau tách ra được so sánh để tính toán
phẩm chất lỗi BER của hệ thống.

Bài tập 3
1. So sánh truyền dẫn QAM-4 và QAM-16 qua kênh AWGN:

2. Code:

%% BT 3(QAM-(4,16)-G) - Mo phong he thong bang Matlab


% SV: Le Anh Dat
% Lop: Mang Vien Thong - DHVT1B
% Chuong trinh tinh BER cua dieu che QAM,PSK qua kenh AWGN
va Rayleigh
% GV : Luu Vu Duc
%% Xoa du lieu
clc;
clear all;
%% Nhap Loai dieu che
M=input('Nhap vao cap dieu che QAM (M=4, 16, 64): ');
while ((M~=4)&&(M~=16)&&(M~=64))
M=input('Nhap vao cap dieu che PSK (M=4, 16, 64): ');
end
%% Nhap loai kenh truyen
Ctype=input('Nhap vao loai kenh truyen (G: AWGN, R:
Rayleigh): ','s');
while
((Ctype~='G')&&(Ctype~='g')&&(Ctype~='R')&&(Ctype~='r'))
Ctype=input('Nhap vao loai kenh truyen (G: AWGN, R:
Rayleigh): ','s');
end
%% Kiem tra thong tin va xu ly truoc dieu che
switch M
case 4
if(Ctype=='G' || Ctype=='g')
EbNodB=0:1:10;
sigLen=10^6; % So ky hieu gui di
else
EbNodB=0:3:24;
sigLen=2*10^5; % So ky hieu gui di
end
case 16

Lê Anh Đạt 9
1
0
if(Ctype=='G' || Ctype=='g')
EbNodB=0:1:13;
sigLen=10^6; % So ky hieu gui di
else
EbNodB=0:3:30;
sigLen=10^5; % So ky hieu gui di
end
case 64
if(Ctype=='G' || Ctype=='g')
EbNodB=0:2:18;
sigLen=2*10^5; % So ky hieu gui di
else
sigLen=2*10^5; % So ky hieu gui di
EbNodB=0:3:36;
end
otherwise
end
%% Dinh nghia tham so
m=log2(M); % So bit/ky hieu
EbNo=10.^(EbNodB./10);
Es = 2*(M-1)/3; %Nang luong ky hieu
if(Ctype=='G' || Ctype=='g')
g=1;
[BER] = qamBERCalAWGN(M, EbNo);%BER theo ly thuyet
[SER] = qamSERCalAWGN(M, EbNo);%SER theo ly thuyet
EqCoef=1;
else
% Tao pha dinh Rayleigh
g=1/sqrt(2)*(randn(1,sigLen)+j*randn(1,sigLen));
EqCoef=conj(g)./abs(g).^2; %One tap equalization
[BER] = qamBERCalRay(M, EbNo);%BER theo ly thuyet
[SER] = qamSERCalRay(M, EbNo);%SER theo ly thuyet
end
% Chom sao QAM
Const=qammod([0:M-1],M);
% Gray-Coded QAM Constellations
[ConstGray, Pos]=qamGrayCoded(Const,M);
% Tao chuoi bk chua cac so integer tu 0 den M-1 ngau nhien
va
% anh xa vao chom sao tin hieu
b=randint(1,sigLen,[0 M-1]); % Random intergers from 0:M-1
%Tin hieu khong duoc ma hoa Gray
Sig=Const(b+1);
%Tin hieu duoc ma hoa Gray
SigGray=ConstGray(b+1);
% Mat do pho AWGN
sigma=sqrt(Es./(2*m.*EbNo));
% Vong lap tinh toan BER theo Eb/No
for k=1:length(EbNo)
% Tao AWGN voi variance sigma^2
n=sigma(k)*(randn(1,sigLen)+j*randn(1,sigLen));
% Tin hieu thu khong ma hoa Gray
yk=Sig.*g+n;
Lê Anh Đạt 10
1
1
% Tin hieu thu co ma hoa Gray
ykGray=SigGray.*g+n;
%Tach song tin hieu khong ma hoa Gray
[bHat]=qamdemod(yk.*EqCoef,M);
%Tach song tin hieu khong ma hoa Gray
[bkHat]=qamdemod(ykGray.*EqCoef,M);
bHatGray(1,:)=Pos(bkHat+1);
% Tinh toan SER va BER
[noBitErr,NBER(k)]=biterr(bHat,b,m); % BER
[noSymErr,NSER(k)]=symerr(bHat,b); % SER
[noBitErr,GBER(k)]=biterr(bHatGray,b,m);% Gray-mapping BER
[noSymErr,GSER(k)]=symerr(bHatGray,b); %Gray-mapping SER
end
%Voi M=4, ham "qammod" cho ta chom sao tin hieu da ma hoa
Gray.
%Do do ta phai hoan doi cac gia tri BER va SER thu duoc o
tren.
if M==4
temp=NBER; NBER=GBER; GBER=temp;
end
%% Ve do thi
semilogy(EbNodB,BER,'-*',EbNodB,SER./m,'-<',
EbNodB,GBER,'-o',...
EbNodB,NBER,'-^')
hold on;
grid on;
semilogy(EbNodB,SER,'-.+',EbNodB,GSER,'-
.>',EbNodB,NSER,'-.p')
xlabel('E_b/N_o (dB)')
ylabel('BER, SER')
legend('BER: ly thuyet ',...
'BER: Gioi han tren ',...
'BER: Mo phong voi ma hoa Gray',...
'BER: Mo phong khong co ma hoa Gray ',...
'SER: Ly thuyet ',...
'SER: Mo phong voi ma hoa Gray',...
'SER: Mo phong khong co ma hoa Gray')

3. Kết quả:

Lê Anh Đạt 11
1
2

Hình 3.1: QAM-4

BER giới hạn, lý thuyết và dùng mã Gray gần như trùng nhau và khác nhau
với mỗi E0/N0. Khi không dùng mã Gray, BER sai rất nhiều so với lý thuyết.
Đối với SER dùng mã hay không đều gần như trùng nhau và sai lệch so với
lý thuyết.

Hình 3.2: QAM-16

BER và SER khác nhau đối với mỗi giá trị E0/N0.
Sử dụng mã Gray cho BER có sai số lớn hơn không dùng mã khi so sánh
với BER lý thuyết.
SER thì hầu như không có sự thay đổi gì so với lý thuyết.
Lê Anh Đạt 12
1
3

4. Nhận xét và kết luận:

Qua kết quả của việc dùng QAM-4 và QAM-16 để truyền dẫn tín hiệu trên
kênh AWGN kết luận:
BER, SER luôn là khác nhau với mỗi giá trị E0/N0.
Mã hóa Gray thường không thích hợp để truyền dẫn với bậc điều chế lớn (
thử nghiệm với QAM-64 nhiều lần đều cho kết quả như trên).
Lỗi symbol (SER) đều không có sự khác nhau quá nhiều khi có hoặc không
sử dụng mã Gray. Thường việc lỗi SER chỉ dẫn đến một bit lỗi.

Lê Anh Đạt 13

También podría gustarte