HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÁO CÁO HỌC TẬP
ĐA TRUY NHẬP VÔ TUYẾN
Sim_MA06 và Sim_MA07
Giảng Viên: Nguyễn Viết Đảm
Hà1Nội
Sim_MA06:
Trực quan hóa nguyên lý hoạt động hệ thống truyền dẫn OFDM
trên cơ sở thực hiện FFT/FFT và chèn/khử CP
2
3
4
5
6
7
8
Phần matlab:
MA_06_Basis_OFDM_System_Modeling_2.m
Câulệnh
stt
Giải thích
1
clc;
clear all; close all;
2
FFTsize
= 8;
CPsize = 2;
data= 0.5*(sign(rand (1,FFTsize)-0.5)+1);
data= 2*data-1
data_IFFT= ifft(data) data_IFFT_CP =
[data_IFFT(FFTsize-CPsize+1:FFTsize)
data_IFFT];
data_CPR= data_IFFT_CP(CPsize+1:FFTsize
+CPsize);
data_FFT= fft(data_CPR)
data_des1
=
zeros(1, length(data));
for i = 1:length(data_FFT) if data_FFT(i) >= 0
data_des1(i) = 1;
else
data_des1(i) = -1;
end
end
error_vector1 data~=data_des1;
num_error1 sum(error_vector1);
BER1
num_error1/FFTsize
BER_op
= sum(sign(real(data_FFT))
~=data)/FFTsize
3
4
5
6
7
11
9
-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
- Đóng hết các đè mục
Khai báo gia srij tham số
Tạo cho các bit kích thước FFT: BPSK
bước 1: Quy trình IFFT bước 2: thêm
CP
bước 3: loại bỏ CP
bước 4: Quy trình IFFT
Quyết định và xác định lỗi
để xác định lỗi (so sánh)
Tổng số lỗi
giải pháp tối ưu tối ưu
MA_06_CP_insert.m
stt
1
2
3
4
5
Câu lệnh
function [CP_insert] =
MA_06_CP_insert(N,V)
O_I = zeros(V,N); O_V_N_V =
zeros(V,N-V);
I_V = eye(V);
for i=1:V
O_I(i,:) = [O_V_N_V(i,:) I_V(i,:)] ;
end
I_N = eye(N);
CP_insert = [O_I;I_N];
Giải thích
Khởi tạo function
MA_06_CP_insertvới 2 tham số đầu vào V,N;
-tao ma trận 0
- tao ma trận đơn vị
Tạo vòng lặp
Tạo ma trận đơn vị
MA_06_CP_Remove.m
Stt
1
2
3
Câu lệnh
Giải thích
Khởi tạo function MA_06_CP_ Remove
với 2 tham số đầu vào
V,N;
-tao ma trận 0
- tao ma trận đơn vị
function [CP_Remve] =
MA_06_CP_Remove(N,
V)
CP_Remve
=
zeros(N,N+V); O_V
=
zeros(N,V);
I_N
= eye(N);
for i =1:N
CP_Remve(i,:) =
[O_V(i,:) I_N(i,:)];
end
Tạo vòng lặp
10
MA_06_FFT_matrix.m
Stt
1
2
3
Câu lệnh
function [W] = MA_06_FFT_matrix(N)
W = zeros(N);
for m =1:N
for i= 1:N
W(m,i) = exp(j*2*pi/N*(m-1)*(i-1));
end
end
Giải thích
Khởi tạo function MA_06_CP_
matrixvới 1 tham số đầu vào
N;
-tạo ma trận 0
Tạo vòng lăpj
MA_06_IFFT_matrix.m
stt
1
2
3
4
Câu lệnh
function [W_H] = MA_06_IFFT_matrix(N)
W_H = zeros(N);
for i =1:N
for m= 1:N
W_H(i,m) =
exp(j*2*pi/N*(i-1)*(m-1));
end
end
W_H = 1/sqrt(N)*W_H;
Giải thích
Khởi tạo function MA_
MA_06_IFFT_matrixvới 1
tham số đầu vào N;
Tạo ma trận 0
Taọ vòng lặp
11
MA_06_OFDM_Principle.m
stt
1
Câu lệnh
2
N
= 4;
V
= 2;
X1
= 1:N;
[W_H]
=
MA_06_IFFT_matrix(N);
[W]
=
MA_06_FFT_matrix(N);
[CP_insert] =
MA_06_CP_insert(N,V);
[CP_Remve]
=
MA_06_CP_Remove(N,V);
Mode = 1; if
3
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
Với N=4, V=2
Tao các ma trận khác nhau
clc;
clear;
ở chế độ 1:
-nếu Chế độ = 1;
-nếu khác X1
Mode == 1
=
0.5*(sign(rand(1,N)- 0.5)+1);
else
5
6
7
8
9
5
X1
=
0.5*(sign(rand(1,N)-0.5)+1);
end
Test_IFFT_FFT_matrix
abs(W_H*W);
Test_CP_inser_remove
=
= CP_Remve*CP_insert;
data_IFFT
Kiểm tra IFFT / FFT;
Quy trình IFFT
= sqrt(N)*ifft(X1,N);
data_IFFT_CP = [data_IFFT(NV+1:N) data_IFFT];
data_CPR
=
data_IFFT_CP(V+1:N+V);
data_FFT
=
(1/sqrt(N))*fft(data_CPR,N)
Test_IFFT_FFT_matrix
abs(W_H*W);
Test_CP_inser_remove
thêm CP
loại bỏ CP
Quy trình IFFT
=
= CP_Remve*CP_insert;
12
Kiểm tra IFFT / FFT;
Sim_MA_06_PSD_OFDM.m
Stt
2
3
4
5
6
Câu lệnh
deta_f
=
20;
BW_channel
=
200;
num_subcarrier
=
round(BW_channel/deta_f); T_ofdm =
1/deta_f;
R_ofdm
=
1/T_ofdm;
Tb
=
T_ofdm/num_subcarrier; Rb = 1/Tb;
A
=
10;
A1
=
A^2*Tb;
AA
=
A^2*T_ofdm;
f_i
=
deta_f:deta_f:BW_channel+deta_f; f
=
Rb:BW_channel+4*deta_f;
fc
=
3*max(f);
f2
=
f:1:(fc+BW_channel+4*deta_f);
PSD_ofdm_in
= A1*(sinc((f*Tb)).^2);
PSD_RF_SC
= A1*(sinc(((f2-fc)*Tb)).^2);
PSD_OFDM=zeros(num_subcarrier,max(size(f)));
PSD_OFDM_RF=zeros(num_subcarrier,
max(size(f2)));
for k = 1:num_subcarrier
PSD_OFDM(k,:)
=
AA*(sinc((f-f_i(k))*T_ofdm))
.^2;
PSD_OFDM_RF(k,:)
=
AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2;
end
figure
subplot plot
hold on
xlabel
ylabel grid
on; set
13
Giải thích
- Không gian sóng mang con
- Băng thông của kênh
- Số lượng sóng mang con
hoặc vòng kênh con
- thời gian
-các thông số dầu vào cơ bản
- PSD đầu vào của Khối điều
chế OFFDM
- PSD đầu ra của Khối điều
chế OFFDM
- PSD đầu ra của Khối điều
chế OFFDM
- bảng hiển thị kết quả
- Đặt title, font, color cho trục
x và y
-Vẽ thêm 1 đồ thị khác vào
cùng cửa sổ figure
Đặt chú thích cho từng
trường hợp hiển thị trên
figure
Sim_MA07:
Mô hình hóa và mô phỏng hiệu năng BER cho hệ thống truyền dẫn
BPSK-OFDM dùng mã kênh trong môi trường kênh AWGN
14
15
16
17
Phần mô phỏng
Sim_MA_07_BPSK_OFDM_AWGN_ChannelCode.m
St t
1
2
3
4
5
6
7
8
9
Câu lệnh
clc; clear all; close all;
SNR = [0:1:9];
FFTsize
= 512;
CPsize
= 20;
numRun
= 10^3;
NumBits
=
FFTsize*numRun;
mode_Sim = 2
Codding_Type
= 1;
if mode_Sim ==2
if Codding_Type == 1 k0 = 1;
G
= [1 1 1;1 0
1];
elseif Codding_Type == 2 k0
= 1;
G
= [1 1 1 1 0
0 1;1 0 1 1 0 1 0];
else
k0
= 2;
G
= [0 0 1 0 1
0 0 1;0 0 0 0 0 0 0 1;1 0 0 0
0 0 0 1];
end
end
for n = 1:length(SNR), errCount = 0;
for k = 1:numRun
numSymbols = FFTsize;
data =
0.5*(sign(rand(1,numSymbols)- 0.5)+1);
data2 =
2*data-1;
if mode_Sim ==2inputSymbols
= FWC_COV_Encoder(G,k0,data);
inputSymbols
= 2*inputSymbols-1;
else
inputSymbols
18
= 2*data-1;
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
- Đóng hết các đè mục
-Lấy 10 điểm xét SNR đơn vị dB từ 0 đến 9.
Mỗi điểm cách nhau 1
-Chế độ mô phỏng =2
-Mã hóa loại 1
-Nếu chế độ mô phỏng = 2 và mã hóa loại 1
thì ta có:
k0 = 1;
G = [1 1 1; 1 0 1];
-Nếu chế độ mô phỏng = 2 và mã hóa loại 2
thì ta có:
k0 = 1;
G = [1 1 1 1 0 0 1; 1 0 1 1 0 1 0];
--Nếu chế độ mô phỏng = 2 và mã hóa loại
khác thì ta có:
k0 = 2;
G = [0 0 1 0 1 0 0 1;0 0
0 0 0 0 0 1;1 0 0 0 0 0
0 1];
Cho biến j chạy giá trị từ 1 tới 10
(length(SNR))
+ Hàm sign: dùng để lấy dấu (lấy
-1 hoặc 1)
+ Hàm rand(1,numSymbols): Lấy 1000 giá
trị ngẫu nhiên trong khoảng từ 0 đến 1
Nếu chế độ mô phỏng = 2 thì
inputSymbolsđược tính bằng hàm function:
FWC_COV_Encoder(G,k0,dat a);
Nếu chế độ mô phỏng loại khác thì
inputSymbols = 2*data-1;
10
11
12
13
14
TxSamples =
sqrt(length(inputSymbols))*if ft
(inputSymbols,length(inputSym bols));
numSymbols = length(inputSymbols);
Tx_ofdm
=
[TxSamples(numSymbolsCPsize+1:numSymbols) TxSamples];
numSymbols_2
=
length(inputSymbols);
tmp =
randn(1,numSymbols_2+CPsize);
noisePower =
10^(-SNR(n)/10);
RxSymbols = Tx_ofdm +
sqrt(noisePower)*tmp;
EstSymbols_1
=
RxSymbols(CPsize+1:numSymbols
_2
+CPsize);
Y
=
fft(EstSymbols_1,
length(EstSymbols_1));
17
18
19
20
Chèn CP
Kênh% AWGN
Loại bỏ CP
IFT (Giải điều chế OFDM)
Phát hiện và quyết định
15
16
-FFT (Điều chế OFDM)
EstSymbols_1
= Y;
EstSymbols_1
=
sign(real(EstSymbols_1));
for i = 1:length(EstSymbols_1)
if EstSymbols_1(i)>0
Decis(i)= 1; else
Decis(i)= 0;
end
end
if mode_Sim==2
EstSymbols =
FWC_COV_Dencoder(G,k0,Decis);
else
EstSymbols = EstSymbols_1;
if mode_Sim==2
I
=
find((data-EstSymbols) == 0); else
I
=
find((data2-EstSymbols) == 0);
end
errCount
= errCount + (FFTsizelength(I));
19
end
Cho biến I chạy giá trị từ 1 tới 10
(length(EstSymbols_1))
-nếu EstSymbols_1(i)>0 thì Decis(i)= 1;
- ngược lại Decis(i)= 0;
Nếu chế độ mô phỏng = 2 thì EstSymbols
= FWC_COV_Dencoder(G,k0,De
cis);
Nếu chế độ mô phỏng loại khác thì
EstSymbols = EstSymbols_1;
Nếu chế độ mô phỏng = 2 thì I
= find((data-EstSymbols)
== 0);
Nếu chế độ mô phỏng loại khác thì I
=
find((data2-EstSymbols)
== 0);
Lỗi được đối chiếu
21
SER(n,:)
=
errCount / (FFTsize*numRun);
figure subplot plot hold on xlabel ylabel
grid on;
set
20
bảng hiển thị kết quả
Đặt title, font, color cho trục x và y
-Vẽ thêm 1 đồ thị khác vào cùng cửa sổ
figure
Đặt chú thích cho từng trường hợp hiển thị
trên figure
- Xem thêm -