You are on page 1of 28

Nhóm 5-10-Nguyễn Quôc Đạt-B18DCVT087

Kiểm tra
Môn: Cơ sở kĩ thuật thông tin vô tuyến

FWC05

1. Dịch code

Dòng lệnh Giải thích Ý nghĩa


Xóa cửa sổ lệnh Tạo môi trường
clc
chạy mô phỏng
Xóa các đề mục, Reset bộ nhớ, tối ưu
Clear
biến trong bộ nhớ bộ nhớ
Xóa tất cả các
Close all
phần tử đang chạy
N_Tx = 8; Thiết lập biến Gán giá trị cho
N_Tx anten phát
N_Rx = 4; Gán giá trị cho Gán giá trị cho anten
biến thu
N_Rx
fD = 10; Gán giá trị cho Khởi tạo tần số
biến fD Doppler có giá trị =
10
N_symbol = 100; Gán giá trị cho Tổng số ma trận là
biến N_symbol 100
T_sim = 0.1; Gán giá trị cho Thời gian mô phỏng
biến T_sim chương trình = 0,1
H_Gausian = Khởi tạo các ma Tạo 100 ma trận 0
zeros(N_Rx,N_Tx,N_symbol); trận 0 có kích thước 4x8
theo các biến cho
trước
for k = 1:N_symbol Tạo vòng lặp để Tạo ma trận phức
H_Gausian(:,:,k) = tạo ma trận ngẫu với giá trị ngẫu
(randn(N_Rx,N_Tx) + nhiên cho nhiên
i*randn(N_Rx,N_Tx))/sqrt(2); H_Gausian với
end mỗi k tương ứng

H_Gau = Khởi tạo ma trận Tạo ma trận 0 có


zeros(N_Rx,N_Tx); 0 kích thước 4x8
H_Gau = Gán cho H_Gau sẽ được gán
H_Gausian(:,:,1); H_Gau và giá trị của ma trận
H_Gausian có đầu tiên trong vòng
cùng giá trị, với k lặp
=1
H_Rayleigh = Khởi tạo các ma Tạo 100 ma trận 0
zeros(N_Rx,N_Tx,N_symbol); trận 0 có kích thước 4x8
theo các biến cho
trước
for m = 1:N_Rx Tạo vòng lặp cho Chạy đến từng vị trí
for n = 1:N_Tx biến m chạy từ 1 trong ma trận
đến 4, n chạy từ 1
đến 8
H_Rayleigh(m,n,:) Tính toán giá trị Sử dụng hàm
=(FWC_Rayleigh_Channel(T_sim,N_sym cho function
bol,fD)+ H_Rayleigh FWC_Rayleigh_Ch
i*FWC_Rayleigh_Channel(T_sim,N_sym với mỗi vị trí annel với tham số
bol,fD))/sqrt(2); đầu vào là
T_sim,N_symbol,fD
để
tính toán tham số y
đầu ra
tương ứng với m của kênh Rayleigh
và n để tạo ma trận phức
H_Ray = Gán cho
H_Rayleigh(:,:,1); H_Ray và
H_Rayleigh có
cùng giá trị, với k
=1
disp(' Ma tran kenh H'); Hiển thị ra màn
H_Ray hình ma trận
H_Ray
disp(' Kich thuoc H'); disp(size(H_Ray)) Hiển thị kích thước của ma trận H_Ray
ra màn hình
[U_Gau, D_Gau, V_Gau] = svd(H_Gau); Tính toán U, D, V Phân tích SVD của
[U_Ray, D_Ray, V_Ray] = với H biết trước H
svd(H_Ray);
disp(' Ma tran tien ma hoa V '); Hiển thị ra màn hình ma trận V_Ray
V_Ray

disp(' Kich thuoc size(V)'); Hiển thị kích thước của ma trận H_Ray
disp(size(V_Ray)); ra màn hình
disp(' Ma tran hau ma hoa U '); Hiển thị ra màn hình ma trận U_Ray
U_Ray

disp(' Kich thuoc size(U)'); Hiển thị kích thước của ma trận U_Ray
disp(size(U_Ray)); ra màn hình
disp(' Ma tran duong cheo D '); Hiển thị ra màn hình ma trận D_Ray
D_Ray

disp(' Kich thuoc size(D)'); Hiển thị kích thước của ma trận D_Ray
disp(size(D_Ray)); ra màn hình

2. Kết quả
- 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):

- Ma trận đường chéo D_Ray:(N_Rx x Ntx):

- Nhận xét:
+ Với số anten phát Tx = 4, Anten thu Rx= 8 => Ta thu được ma trận H kích thước 4x8
đúng theo như lý thuyết.
+ Ma trận U kích thước 4 x 4.
+ Ma trận V kích thước 8 x 8
+ Ma trận D kích thước 4 x 8 có 4 giá trị đơn không âm trên đường chéo chính của D.
+ Với mỗi ký hiệu đi qua kênh => kênh lấy mẫu một lần và H thay đổi theo mỗi kỹ
hiệu.
FWC06_01
1. Dịch code

Dòng lệnh Giải thích Ý nghĩa


Xóa cửa sổ lệnh Xóa tất cả văn
bản từ cửa sổ
clc câu lệnh trước
khi chạy câu
lệnh
Xóa các đề mục, Reset bộ nhớ,
Clear
biến trong bộ nhớ tối ưu bộ nhớ
Close all Đóng hết các đề
mục
SNR_dB = [0:5:30]; Lấy 7 điểm xét Xét nhiều giá
SNR đơn vị dB từ trị của
0 đến 30. Mỗi SNR
điểm cách nhau 5.
SNR_linear = 10.^(SNR_dB/10.); Tính tỉ lệ tín hiệu
trên nhiễu
N_iter = 10000; Gán giá trị cho Tổng số lượng
biến N_iter mẫu để mô
phỏng
nT = 8; Gán giá trị cho Tạo ma trận
biến nT có 8 cột, 4
nR = 4; Gán giá trị cho hàng (8 anten
biến nR phát, 4 anten
thu)
n = min(nT,nR); n được lấy giá trị
nhỏ nhất trong Tạo ma trận
khoảng nT đến nR đơn vị có kích
I = eye(n); Tạo ma trận đơn thước nxn
vị I
C = zeros(1,length(SNR_dB)); Gán cho C ma trận C được khởi
0 tạo với ma
trận 0 có kích
thước 1x7
for iter=1:N_iter Tạo vòng lặp lấy Lấy mẫu
mẫu 10000 lần (vì
N_iter=10000)
H = Tạo ma trận phức
sqrt(0.5)*(randn(nR,nT)+j*randn(nR,nT)); ngẫu nhiên cho H
có kích thước
nRxnT
if nR>=nT, HH = Nếu nR>=nT thì
H'*H; HH = H’ (ma trận
chuyển vị liên hợp
phức của
H)xH Xét điều kiện
để tính HH
else Nếu nR<nT thì
HH = H*H'; HH = HxH’ (ma
trận chuyển vị liên
hợp phức của H)
for i=1:length(SNR_dB) Tạo vòng lặp để Với mỗi ma
C(i) = tính C theo i tươngtrận HH sẽ
C(i)+log2(real(det(I+SNR_linear(i)/nT*HH))); ứng (i chạy từ 1 tính được
end đến 7) dung lượng C
tương ứng với
SNR
C = C/N_iter; Tính tỉ lệ Dung lượng tương ứng
với SNR trên tổng số mẫu

2. Phân tích kết quả


*TH1 (Nt>Nr):
Với Nt=8, Nr=4:
*TH1 (Nt=Nr):
Với Nt=4, Nr=4:

*TH1 (Nt<Nr):
Với Nt=2, Nr=4:

*Nhận xét:
- Nt và Nr càng tăng (kích thước ma trận càng lớn) thì Dung lượng C càng lớn -
SNR càng lớn thì Dung lượng C càng lớn

FWC06_02
1. Dịch code

Dòng lệnh Giải Ý nghĩa


thích
Xóa cửa Xóa tất cả văn
sổ lệnh bản từ cửa sổ
clc câu lệnh trước
khi chạy câu
lệnh
Xóa các Reset bộ nhớ,
đề mục, tối ưu bộ nhớ
Clear
biến trong
bộ nhớ
Đóng hết
Close all các đề
mục
SNR_dB = [0:5:30]; Lấy 7 Xét nhiều giá
điểm xét trị của
SNR đơn SNR
vị dB từ 0
đến 30.
Mỗi điểm
cách nhau
5.
SNR_linear = 10.^(SNR_dB/10.); Tính tỉ lệ
tín hiệu
trên nhiễu
N_iter = 10000; Gán giá Tổng số lượng
trị cho mẫu để mô
biến phỏng
N_iter
for Icase=1:5 Tạo vòng Chia ra 5
lặp cho trường để thấy
biến 5 cấu hình ma
Icase trận khác nhau
chạy từ 1
tới 5
if Icase==1, nT=4; Nếu Icase Trường hợp 1
nR=4; = 1 thì thì có ma trận
nT=4 và ngẫu nhiên
nR=4 4x4
elseif Icase==2, nT=2; Nếu Icase Trường hợp 2
nR=2; = 2 thì thì có ma trận
nT=2 và ngẫu nhiên
nR=2 2x2
elseif Icase==3, nT=1; Nếu Icase Trường hợp 3
nR=2; = 3 thì thì có ma trận
nT=1 và ngẫu nhiên
nR=2 1x2
elseif Icase==4, nT=2; Nếu Icase Trường hợp 4
nR=1; = 4 thì thì có ma trận
nT=2 và ngẫu nhiên
nR=1 2x1
else nT=1; nR=1; Nếu Icase Trường hợp 5
end = 5 thì thì có ma trận
nT=1 và ngẫu nhiên
nR=1 1x1
n = min(nT,nR); n được
lấy giá trị
nhỏ nhất Tạo ma trận
trong đơn vị có kích
khoảng thước nxn
nT đến
nR
I = eye(n); Tạo ma
trận đơn
vị I
C(Icase,:) = zeros(1,length(SNR_dB)); Gán cho C được khởi
C ma trận tạo với ma
0 trận 0 có
kích thước
1x7
for iter=1:N_iter Tạo vòng Lấy mẫu
lặp lấy 10000 lần (vì
mẫu N_iter=10000)
H = sqrt(0.5)*(randn(nR,nT)+j*randn(nR,nT)); Tạo ma
trận phức
ngẫu
nhiên cho
H
có kích
thước
nRxnT
if nR>=nT, HH = Nếu
Xét điều kiện
H'*H; nR>=nT
để tính HH
thì HH =
H’ (ma
trận
chuyển vị
liên hợp
phức của
H)xH
else Nếu
HH = H*H'; nR<nT thì
HH =
HxH’ (ma
trận
chuyển vị
liên hợp
phức của
H)
for i=1:length(SNR_dB) Tạo vòng Với mỗi ma
C(Icase,i) = lặp để trận HH sẽ
C(Icase,i)+log2(real(det(I+SNR_linear(i)/nT*HH))); tính C tính được dung
end theo i và lượng C tương
Icase ứng
tương ứng với SNR
(i chạy từ
1 đến 7,
Icase
chạy từ 1
đến
5)
C = C/N_iter; Tính tỉ lệ
Dung
lượng
tương ứng
với SNR
trên tổng
số mẫu

2. Phân tích kết quả


*Nhận xét:
- Số lượng Rx ảnh hưởng tới giá trị Dung lượng C nhiều hơn số lượng Tx
- Số lượng Rx, Tx càng lớn thì C càng lớn
- SNR càng lớn thì C càng lớn

FWC06_03
1. Dịch code
Dòng lệnh Giải thích Ý nghĩa
Xóa cửa sổ lệnh Tạo môi
clc trường chạy
mô phỏng
Xóa các đề mục, biến Reset bộ
Clear trong bộ nhớ nhớ, tối ưu
bộ nhớ
Xóa tất cả các phần tử
Close all
đang chạy
SNR_dB = [0:5:30]; Tạo một mảng giá trị từ Tạo giá trị
0 tới 30 mỗi giá trị cách SNR
nhau 5 đơn vị
SNR_linear = 10.^(SNR_dB/10.); Tính tỉ lệ tín hiệu trên
nhiễu
N_iter = 1000; Gán giá trị cho biến Tổng số
N_iter lượng mẫu
để mô phỏng
nT = 8; Gán giá trị cho biến nT Tạo ma trận
có 8 cột, 4
nR = 4; Gán giá trị cho biến nR hàng (8
anten phát, 4
anten thu)
n = min(nT,nR); lấy giá trị nhỏ nhất trong Tạo ma trận
2 giá trị nT và nR đơn vị có
I = eye(n); Tạo ma trận đơn vị I kích thước
nxn

rho = 0.2; Gán giá trị cho biến rho


sq2 = sqrt(0.5); Gán giá trị cho biến sq2 Tạo biến
1/căn bậc 2
Rtx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rtx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

Rrx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rrx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

C_44_OL = zeros(1,length(SNR_dB)); Tạo ma trận 0 cho


C_44_OL
C_44_CL = zeros(1,length(SNR_dB)); Tạo ma trận 0 cho C được khởi
C_44_CL tạo với ma
trận 0 có
kích thước
1x12
for iter=1:N_iter Tạo vòng lặp lấy mẫu Lấy mẫu
10000
lần (vì
N_iter=1000
)
Hw = sq2*(randn(4,4) + j*randn(4,4)); Tạo ma trận phức cho
biến Hw
H = Rrx^(1/2)*Hw*Rtx^(1/2); Công thức tính ma trận
H
tmp = H'*H/nT; Công thức tính tmp
Lamda = svd(H'*H); Công thức tính Lamda
for i=1:length(SNR_dB) Cho i chạy vòng lặp từ 1 Tạo vòng lặp
đến 12
C_44_OL(i) = C_44_OL(i) + Tính C_44_OL(i) theo Tính dung
log2(det(I+SNR_linear(i)*tmp)); tmp và i tương ứng (i lượng Open-
chạy từ 1 đến 12) Loop
P_opt = Tính P_opt dựa vào hàm Tính công
FWC_Water_Filling(Lamda,SNR_linear(i),nT) function suất P
; FWC_Water_Filling với
giá trị đầu vào là
Lamda,SNR_linear(i),n
T
)
C_44_CL(i) = Tính C_44_CL(i) theo Tính dung
C_44_CL(i)+log2(det(I+SNR_linear(i)/nT*di tmp và i tương ứng (i lượng
a g(P_opt)*diag(Lamda))); chạy từ 1 đến 12) Closed-Loop
C_44_OL = real(C_44_OL)/N_iter; Tính tỉ lệ tổng số giá trị thực của Dung
lượng C (Open-Loop) tính được trên
tổng số mẫu N_iter
C_44_CL = real(C_44_CL)/N_iter; Tính tỉ lệ tổng số giá trị thực của Dung
lượng C (Closed-Loop) tính được trên
tổng số mẫu N_iter

2. Phân tích kết quả


*Nhận xét:
- SNR càng lớn thì độ chênh lệch C giữa 2 kênh càng nhỏ
- Giá trị C của kênh nhớ lớn hơn giá trị C của kênh không nhớ
- SNR càng lớn thì giá trị C càng lớn

Bài 7
Bài 8:
Câu 1:
- Phân tích dung lượng kênh hệ thống MIMO vòng hở (OL- Open Loop- Channel
Unknown)

- SNR càng lớn thì giá trị C càng lớn


- Giá trị dung lượng C nhỏ nhất tại SNR bằng 0

- Mô phỏng dung lượng kênh MIMO theo SNR cho các cấu hình khác nhau
- Số lượng Rx ảnh hưởng tới giá trị Dung lượng C nhiều hơn số lượng Tx
- Số lượng Rx, Tx càng lớn thì C càng lớn
- SNR càng lớn thì C càng lớn
- Giá trị dung lượng C đạt lớn nhất tại SNR=30, ( MIMO: 4x4)

Câu 2:
- Tham số đầu vào của chương trình mô phỏng:
- 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
Rtx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rtx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

Rrx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rrx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

C_44_OL = zeros(1,length(SNR_dB)); Tạo ma trận 0 cho


C_44_OL

for iter=1:N_iter Tạo vòng lặp lấy mẫu Lấy mẫu


10000
lần (vì
N_iter=1000
)
Hw = sq2*(randn(4,4) + j*randn(4,4)); Tạo ma trận phức cho
biến Hw
H = Rrx^(1/2)*Hw*Rtx^(1/2); Công thức tính ma trận
H
tmp = H'*H/nT; Công thức tính tmp
Lamda = svd(H'*H); Công thức tính Lamda
for i=1:length(SNR_dB) Cho i chạy vòng lặp từ 1 Tạo vòng lặp
đến 12
C_44_OL(i) = C_44_OL(i) + Tính C_44_OL(i) theo Tính dung
log2(det(I+SNR_linear(i)*tmp)); tmp và i tương ứng (i lượng Open-
chạy từ 1 đến 12) Loop
P_opt = Tính P_opt dựa vào hàm Tính công
FWC_Water_Filling(Lamda,SNR_linear(i),nT) function suất P
; FWC_Water_Filling với
giá trị đầu vào là
Lamda,SNR_linear(i),n
T
)
C_44_OL = real(C_44_OL)/N_iter; Tính tỉ lệ tổng số giá trị thực của Dung
lượng C (Open-Loop) tính được trên
tổng số mẫu N_iter

- Thực hiện mô phỏng và phân tích kết quả:

- SNR càng lớn thì giá trị C càng lớn

Câu 3:
- Tham số đầu vào của chương trình mô phỏng:
- 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
Rtx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rtx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

Rrx = [1 rho rho^2 rho^3; rho 1 rho rho^2; Tạo ma trận cho Rrx
rho^2 rho 1 rho; rho^3 rho^2 rho
1];

C_44_CL = zeros(1,length(SNR_dB)); Tạo ma trận 0 cho C được khởi


C_44_CL tạo với ma
trận 0 có
kích thước
1x12
for iter=1:N_iter Tạo vòng lặp lấy mẫu Lấy mẫu
10000
lần (vì
N_iter=1000
)
Hw = sq2*(randn(4,4) + j*randn(4,4)); Tạo ma trận phức cho
biến Hw
H = Rrx^(1/2)*Hw*Rtx^(1/2); Công thức tính ma trận
H
tmp = H'*H/nT; Công thức tính tmp
Lamda = svd(H'*H); Công thức tính Lamda
for i=1:length(SNR_dB) Cho i chạy vòng lặp từ 1 Tạo vòng lặp
đến 12
P_opt = Tính P_opt dựa vào hàm Tính công
FWC_Water_Filling(Lamda,SNR_linear(i),nT) function suất P
; FWC_Water_Filling với
giá trị đầu vào là
Lamda,SNR_linear(i),n
T
C_44_CL(i) = Tính C_44_CL(i) theo Tính dung
C_44_CL(i)+log2(det(I+SNR_linear(i)/nT*dia tmp và i tương ứng (i lượng
g(P_opt)*diag(Lamda))); chạy từ 1 đến 12) Closed-Loop
C_44_CL = real(C_44_CL)/N_iter; Tính tỉ lệ tổng số giá trị thực của Dung
lượng C (Closed-Loop) tính được trên
tổng số mẫu N_iter

- Thực hiện mô phỏng và phân tích kết quả:

- SNR càng lớn thì giá trị C càng lớn

You might also like