Tải bản đầy đủ (.pdf) (25 trang)

Giải thích code Matlab Cơ sở kỹ thuật thông tin vô tuyến PTIT PHẦN 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.1 MB, 25 trang )

HỌ VÀ TÊN: VŨ TIẾN ANH
MÃ SV: B18DCVT027
LỚP: D18DQVT03
GIẢI THÍCH MATLAB
Sim_FWC05: Chạy mơ phỏng và giải thích lệnh
Dịng lệnh
clc

Giải thích
Xóa cửa sổ lệnh

close all

đóng

clear

Xóa các mục khỏi
khơng gian làm việc,
giải phóng bộ nhớ hệ
thống
Số anten phát
Số anten thu
Tần số Doppler

N_Tx
=8
N_Rx = 4;
fD
= 10;
N_symbol = 100;


T_sim

= 0.1

H_Gausian
=
zeros(N_Rx,N_Tx,N_symbol);

Khơng có ký hiệu
2048
Thời gian mô phỏng
Thiết lập giá trị cho
biếH_gausian bằng tạo
một,mảng N_symbol
ma trận 0 kích thước
Rx x Tx

Ý nghĩa
Xóa hết tất
cả các lệnh
trong
command
window
Đóng các
figure (hình
vẽ đồ thị
minh họa
cho chương
trình.



H_Gausian(:,:,k) =
(randn(N_Rx,N_Tx) +
i*randn(N_Rx,N_Tx))/sqrt(2);

Thiết lập ma trận H

for k = 1:N_symbol

Vòng lặp k chạy từ 1
đến N_symbol
Tạo ma trận 0 H_Gau
với N_Rx hàng N_Tx
cột
Tạo ma trận H_Gau từ
ma trận H_gausian
Tạo ma trận 0
H_Rayleigh với N_rx
hàng N_Tx cột
Vòng lặp n chạy từ 1
đến N_Rx
Vịng lặp n chạy từ 1
đến N_Tx
Tính tốn H phainh
reyleigh cho từng
trường hợp m và n
tương ứng với N_Rx
và N_Tx

H_Gau= zeros(N_Rx,N_Tx);


H_Gau= H_Gausian(:,:,1);
H_Rayleigh=
zeros(N_Rx,N_Tx,N_symbol);
for m = 1:N_Rx
for n = 1:N_Tx
H_Rayleigh(m,n,:) =
(FWC_Rayleigh_Channel(T_sim,N_s
ymbol,fD) ...+
*FWC_Rayleigh_Channel(T_sim,N_s
ymbol,fD))/sqrt(2);
H_Ray= H_Rayleigh(:,:,1);
disp(' Ma tran kenh H');
disp(' Kich thuoc H');
disp(size(H_Ray))
disp(' Phan tich SVD cua H: [U, D, V]
= svd(H)');
[U_Gau, D_Gau, V_Gau] =
svd(H_Gau);

Tạo ma trận H_Ray từ
ma trận H_Rayleigh
Hiển thị : Ma tran
kenh H
Hiển thị : Kich thuoc
H
Hiển thị mảng H_Ray
Hiển thị : Phan tich
SVD cua H: [U, D, V]
= svd(H)

Tạo ma trận U_Gau,
D_Gau, V_Gau từ ma
trận H_Gau


[U_Ray, D_Ray, V_Ray] =
svd(H_Ray);
disp('Ma tran tien ma hoa V ');
disp('Kich thuoc size(V)');
disp(size(V_Ray));
disp('Ma tran hau ma hoa U ');
disp('Kich thuoc size(U)');
disp(size(U_Ray));
disp('Ma tran duong cheo D ');
disp(' Kich thuoc size(D)');
disp(size(D_Ray));
Kết quả mô phỏng

Tạo ma trận U_Ray,
D_Ray, V_Ray từ ma
trận H_Ray
Hiển thị: Ma tran tien
ma hoa
Hiển thị : Kich
thuoc size(V)
Hiển thị mảng V_Ray
Hiển thị : Ma tran hau
ma hoa U
Hiển thị : Kich thuoc
size(U)

Hiển thị mảng U_Ray
Hiển thị : Ma tran
duong cheo D
Hiển thị : Kich thuoc
size(D)
Hiển thị mảng D_Ray



Sim_FWC_06_01_MIMO_Capacity_vs_SNR
Câu lệnh
Clc ;
Clear ;

Giải thích
Xóa cửa sổ lệnh
Xóa các mục khỏi khơng
gian làm việc, giải phóng
bộ nhớ hệ thống

Close all ;
SNR_dB = [0:5:30]

Xóa tất cả hình đã chỉ định
Khai báo tham số/biến
SNR_dB chạy từ 0 đến 30
với bước nhảy là 5

SNR_linear = 10.^(SNR_dB/10.)


nT = 8

Khai báo tham số/ biến
SNR_linear
Khai báo tham số/ biến Niter
Khai báo tham số/ biến nT

nR = 4

Khai báo tham số / biến nR

n = min(nT,nR)

Khai báo tham số/ biến N
với N là giá trị nhỏ nhất
hoặc nT hoặc nR
Trả về ma trận nhận dạng n
xn
Tạo ra ma trận chờ (tất cả
các giá trị trong đó bằng 0)
Vòng lặp iter chạy từ 1
đếm 1000
Tạo ma trận H kênh
phadinh

N_iter

= 10000

I = eye(n)

C = zeros(l,length(SNR_dB))
for iter=1:N_iter
H=
sqrt(0.5)*(randn(nR,nT)
+j*randn(nR,nT));
if nR>=nT,
HH = H'*H;
else
HH = H*H';

Xét điều kiện nR với nT để
thực hiện câu lệnh.

Ghi chú


end
for i=1:length(SNR_dB)

C(i) = C(i)
+log2(real(det(I+SNR_linear
(i)/nT*HH)));
X= real(z)
D = det(X)

figure(1)

Kết thúc lệnh for nhỏ ở
trên
Dùng vịng lặp i chạy từ 1

đến length(SNR_dB)
Tính giá trị dung lượng
kênh
C
trả về phần thực của các
phần tử của mảng phức Z.
d = det (X) trả về định thức
của ma trận vuông X. Nếu
X chỉ chứa các mục số
nguyên thì kết quả d cũng
là một số nguyên.
Tạo ra cửa sổ chứa hình 1.

L = legend(s1);

Lệnh legend : Thêm chú
giải vào các trục

set(h1,'color','c')

Cài đặt h1

set(h1,'Name','Simulation for
MIMO_Ergodic_Capacity_vs_SNR');

Cài đặt các thuộc tính cho
h1

plot(SNR_dB,C,'r-s','LineWidth',[3.5])


vẽ gía trị C theo SNR_dB
lên
bảng hiển thị kết quả
Thêm tiêu đề cho các trục
hiện tại

T=title(strvcat(strcat('Ergodic MIMO
channel capacity',...
' when CSI is not available at the
transmitter')));

set(T,'fontname','.Vntime','fontsize',18,'col đặt font và màu
or','b');
set(gca,'fontname','.Vntime','fontsize',9);

Thêm chú thích cho hiển
thị


s1='MIMO: {\it N_T_x}=4,{\it
N_R_x}=4';
Hiển thị lưới chia phía dưới
đồ thị
Nối các chuỗi theo chiều
dọc
Nối các chuỗi theo chiều
ngang
bật chú thích trên đồ thị

grid on;

strvcat
strcat
legend(s1);
Kết quả mô phỏng
TH1 :
= 8;
= 4;

Ergodic MIMO channel capacity when CSI is not available at the transmitter
40
MIMO: NTx=4, NRx=4

35

Ergodic Capacity vs SNR [bps/Hz]

nT
nR

30

25

20

15

10

5


0

0

5

10

15

SNR [dB]

20

25

30


TH2 :
nT
nR

= 4;
= 4;
Ergodic MIMO channel capacity when CSI is not available at the transmitter
35
MIMO: NTx=4, NRx=4


Ergodic Capacity vs SNR [bps/Hz]

30

25

20

15

10

5

0

0

5

10

15

SNR [dB]

TH3:
nT
nR


= 2;
= 4;

20

25

30


Ergodic MIMO channel capacity when CSI is not available at the transmitter
22
MIMO: NTx=2, NRx=4

Ergodic Capacity vs SNR [bps/Hz]

20

18

16

14

12

10

8


6

4

2

0

5

10

15

20

25

SNR [dB]

→ Dung lượng tăng nhanh khi SNR tăng
Sim_FWC_06_02_MIMO_Capacity_vs_SNR.m
Lệnh
Clc ;
Clear ;

Ý nghĩa
Xóa cửa sổ lệnh
Xóa các mục khỏi
khơng gian làm việc,

giải phóng bộ nhớ hệ
thống

Close all ;

Xóa tất cả hình đã chỉ
định
Khai báo tham
số/biến SNR_dB chạy
từ 0 đến 30 với bước
nhảy là 5
Khai báo tham số/
biến SNR_linear =

SNR_dB = [0:5:30]

SNR_linear = 10.^(SNR_dB/10.)

SNR_dB
10

N_iter

= 10000

10
Khai báo tham số/
biến N-iter

Ghi chú


30


for Icase=1:5
if Icase==1,
nT=4; nR=4;
elseif Icase==2,
nT=2; nR=2;
elseif Icase==3,
nT=1; nR=2;
elseif Icase==4,
nT=2; nR=1;
else
nT=1; nR=1;

end
n

= min(nT,nR)

I

= eye(n)

C(Icase,:) = zeros(1,length(SNR_dB))

for iter=1:N_iter
H=
sqrt(0.5)*(randn(nR,nT)

+j*randn(nR,nT));
randn(nR,nT)

if nR>=nT,
HH = H'*H;
else
HH = H*H';

Lặp qua giá trị Icase
từ 1 tới 5
Xét các trường hợp:
+TH1: Icase =1 thì
nT=4 và nR=4
+TH2: Icase =2 thì
nT=2 và nR=2
+TH3: Icase =3 thì
nT=1 và nR=2
+TH4: Icase =4 thì
nT=2
và nR=1
+ Cịn lại thì nT = 1

nR = 1
Kết thức lệnh for trên
Gán giá trị n là giá trị
nhỏ nhất nT hoặc nR
Trả về ma trận nhận
dạng n cột n hàng và
có đường chéo chính
bằng 1

Tạo ra ma trận chờ có
1 hàng và
length(SNR-dB) cột
Vòng lắp bới iter
chạy từ 1 đến N_iter
Tạo ma trận H kênh
phadinh
Trả về ma trận nR x
nT với các giá trị bất
kỳ
Xét trường hợp nếu
nR>= nT thì HH =
H’*H
Ngược lại HH= H*H’


plot(SNR_dB,C(1,:),'b-o','LineWidth',3.5);
hold on;
plot(SNR_dB,C(2,:),'r<','LineWidth',3.0); hold on;
plot(SNR_dB,C(3,:),'rs','LineWidth',2.5); hold on;
plot(SNR_dB,C(4,:),'k>','LineWidth',2.0); hold on;
plot(SNR_dB,C(5,:),'g^','LineWidth',1.5); hold on;

Biễu diễn kết quả của
C theo SNR_dB

X = xlabel('SNR [dB]');

Đặt tên, font, màu
cho trục x,y


set(X,'fontname','.Vntime','fontsize',18,'col
or','b');
Y = ylabel('Ergodic Capacity vs SNR
[bps/Hz]');
set(Y,'fontname','.Vntime','fontsize',18,'col
or','b');
T=title(strvcat(strcat('Ergodic MIMO
channel capacity',...
' when CSI is not available at the
transmitter')));

Đặt cho figure

set(T,'fontname','.Vntime','fontsize',18,'col
or','b');
grid on;
strvcat
strcat
end

Kết quả mô phỏng

Nối các chuỗi theo
chiều dọc
Nối các chuỗi theo
chiều ngang
Kết thúc lệnh for trên.



Ergodic MIMO channel capacity when CSI is not available at the transmitter
35
MIMO: NTx=4, NRx=4
MIMO: NTx=2, NRx=2

Ergodic Capacity vs SNR [bps/Hz]

30

MIMO: NTx=1, NRx=2
MIMO: NTx=2, NRx=1
MIMO: N =1, N =1
Tx

25

Rx

20

15

10

5

0
0

5


10

15

20

25

30

SNR [dB]

=>Hiệu quả khi số anten phat = anten thu

Sim_FWC_06_03_OL_CL_MIMO_Capacity.m
Lệnh

Ý nghĩa

Clc ;
Clear ;

Xóa cửa sổ lệnh
Xóa các mục khỏi khơng
gian làm việc, giải phóng bộ
nhớ hệ thống

Close all ;
SNR_dB = [0:2:22]


Xóa tất cả hình đã chỉ định
Khai báo tham số/biến
SNR_dB chạy từ 0 đến 30
với bước nhảy là 5
Khai báo tham số/ biến

SNR_linear = 10.^(SNR_dB/10.)

Ghi
chú

SNR_dB

nT = 4

SNR_linear = 10 10
Khai báo tham số/ biến Niter
Khai báo tham số/ biến nT

nR = 4

Khai báo tham số / biến nR

N_iter

= 10000


n = min(nT,nR)


Khai báo tham số/ biến N
với N là giá trị nhỏ nhất hoặc
nT hoặc nR
I = eye(n)
Khởi tạo biến I với giá trị là
ma trận n x n
rho = 0.2
Khai báo biến Rho = 0.2
Rtx = [1 rho rho^2 rho^3; rho 1 rho rho^2; rho^2 Tạo ma trận chéo hóa Rtx
rho 1 rho; rho^3 rho^2 rho 1];
4x4
C_44_OL = zeros(1,length(SNR_dB)); C_44_CL Khởi tạo biến C_44_OL và
= zeros(1,length(SNR_dB));
C_44_CL có giá trị bằng ma
trận 0 kích thước 1x
length(SNR_dB)
sq2 = sqrt(0.5)
Khai báo biến sq2= √0.5
for iter=1:N_iter
Lặp N_iter lần với giá trị iter
thay đổi từ 1 tới N_iter
Hw = sq2*(randn(4,4) + j*randn(4,4));
Tạo biến Hw
H = Rrx^(1/2)*Hw*Rtx^(1/2);
Khởi tạo giá trị H
tmp = H'*H/nT;
Tạo biến tmp giá trị bằng
H(chueyern vi)*H/nT
Lamda = svd(H'*H);

Khởi tạo biến Lamda giá trị
bằng svd(H’*H)
for i=1:length(SNR_dB)
Lặp qua các giá trị SNR vừa
tạo ở trên
C_44_OL(i) = C_44_OL(i) +
C_44_OL(i) = C_44_OL(i) +
log2(det(I+SNR_linear(i)*tm p));
log2(det(I+SNR_linear(i)*tm
p));
P_opt = FWC_Water_Filling(Lamda,
Tính giá trị P_opt dựa vào
SNR_linear(i),nT);
hàm FWC_Water_filling
C_44_CL(i) = C_44_CL(i)
Tính giá trị C_44_CL thứ i
+log2(det(I+SNR_linear(i)/n
dựa vào giá trị SNR thứ i và
T*diag(P_opt)*diag(Lamda)) );
gán vào mảng C_44_CL
C_44_OL = real(C_44_OL)/N_iter; C_44_CL =
Lấy các giá trị phần thực của
real(C_44_CL)/N_iter
mảng giá trị C_44_OL và
C_44_CL
h1 = figure(1);
Tạo figure hiển thị kết quả
set(h1,'Name','MIMO_Ergodic_Capacity_vs_SNR Đặt màu , tên figure
for closed-loop and open-loop systems
Programmed by Nguyen Viet Dam PTIT')



plot(SNR_dB, C_44_OL,'b-o','LineWidth',[3.5]);

Mô phỏng kết quả

X = xlabel('SNR [dB]');
set(X,'fontname','.Vntime','fontsize',18,'color','b');
Y = ylabel('Ergodic Capacity vs SNR [bps/Hz]');
set(Y,'fontname','.Vntime','fontsize',18,'color','b');
grid on;
set(gca,'fontname','.Vntime','fontsize',12);
s1='Channel Unknown';
s2='Channel Known';
legend(s1,s2);

Đặt chú thích

Hiện lưới
Đặt chú thích

Hiện chú thích lên figure

Kết quả mơ phỏng
Ergodic capacities for the closed-loop and open-loop systems
25

Ergodic Capacity vs SNR [bps/Hz]

Channel Unknown

Channel Known

20

15

10

5

0

0

5

10

15

SNR [dB]

20

25


CÁC CÂU HỎI TRONG FILE TNTH
Bài 6: Mô phỏng kênh và hệ thống SVD MIMO





Kết quả mô phỏng kênh SVD MIMO trong môi trường truyền sóng pha đinh
Rayleigh
Ma trận H kênh phadinh Rayleigh:


Ma trận V_Ray (N_Rx x N_Rx):

Ma trận U_Ray (N_Tx x N_Tx) và Ma trận đường chéo D_Ray:(N_Rx x Ntx)::


Câu 2: Thực hiện mơ phỏng trên Matlab theo trình tự xử lý các bước cho mơ
hình kênh và hệ thống SVD MIMO tối ưu (Đọc mã chương trình mơ phỏng:
NVD_D12VT_SVD_MIMO Channel).
Bước 1:
+ Một hệ thống kênh MIMO có Nt anten phát và Nr anten thu
=> Tạo nên ma trận phức ngẫu nhiên H (NrxNt)

Bước 2:
+ Với giá trị tham số đầu vào T_sim, N_symbol, fD, sai số ngẫu nhiên x, qua
kênh Rayleigh sẽ tính được giá trị đầu ra y.

Kết quả và giải thích mơ phỏng em đã làm ở trên
Bài 7: Mô phỏng dung lượng kênh MIMO






Câu 2 + 3 : Hệ thống MIMO vòng hở (OL): (NVD_MIMO_CL_OL_Capacity) và
MIMO vịng kín (CL): (NVD_MIMO_CL_OL_Capacity)
√ Xác định và phân tích các tham số đầu vào của chương trình mơ phỏng:
Giống phần giải thích em đã làm ở trên
√ Xác định các đoạn mã chương trình thực hiện các khối chức năng của mơ hình

 Xác định ma trận H, ma trận Rxx và lamda

 Xác định dung lượng kênh vịng hở (OL)
√ Phân tích kết quả mơ phỏng:



×