BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA VIỄN THƠNG 1
----------------
ĐA TRUY NHẬP VƠ TUYẾN
BÀI THỰC HÀNH MA_06 VÀ MA_07
Giảng viên:
Nguyễn Viết Đảm
Hà Nội - 2021
ĐỒN ĐỨC TÌNH - B18DCVT362
SIM_MA_06
1.1 Mục tiêu
Làm sáng tỏ q trình xây dựng mơ hình và ngun lý hoạt động của hệ thống truyền
dẫn OFDM trên cơ sở IFFT/FFT và chèn khử CP
Trực quan hóa nguyên lý hoạt động trên cơ sở mô tả và mô phỏng Matlab
1.2 Nội dung
TRANG 1
TRANG 2
TRANG 3
TRANG 4
TRANG 5
TRANG 6
TRANG 7
TRANG 8
TRANG 9
1.3 Sim_MA_06_PSD_OFDM
1.3.1 Câu lệnh Matlab
%========================================================================
%======================= Sim_MA_06_PSD_OFDM =============================
%========================================================================
TRANG 10
clc;
clear;
close all;
%========================================================================
deta_f
=
20;
%
BW_channel/num_subcarrier=Subcarrier space;
% Corhence
Bandwidth of channel;15KHz
BW_channel
=
200;
% bandwidth of
channel = 20MHz
% num_subcarrier =
ceil(BW_channel/deta_f);
% Number of
subcarrier or subchannel round
num_subcarrier =
round(BW_channel/deta_f);
% Number of
subcarrier or subchannel
T_ofdm
=
1/deta_f;
% OFDM time
R_ofdm
=
1/T_ofdm;
Tb
=
T_ofdm/num_subcarrier;
Rb
=
1/Tb;
% ceil function
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;
% f_BB
=
-Rb:4*Rb;
fc
=
3*max(f);
f2
=
-f:1:(fc+BW_channel+4*deta_f);
% PSD of input of OFFDM Modulation Block
PSD_ofdm_in = A1*(sinc((f*Tb)).^2);
PSD_RF_SC
= A1*(sinc(((f2-fc)*Tb)).^2);
% PSD of output of OFFDM Modulation Block
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(k,:)
= rand(1)*AA*(sinc((f-f_i(k))*T_ofdm)).^2;
PSD_OFDM_RF(k,:)
= AA*(sinc((f2-f_i(k)-fc)*T_ofdm)).^2;
% PSD_OFDM_RF(k,:)
= rand(1)*AA*(sinc((f2-f_i(k)-fc)*T_ofdm)).^2;
end
figure(1)
%-----------------------subplot(2,2,1);
plot(f,PSD_ofdm_in,'r','LineWidth',3);
xlabel('Tần số [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_I_n_p_u_t_ _o_f_
_O_F_D_M','FontName','.VnTime','color','b','FontSize',14);
title(['Mật độ phổ công suất PSD của tín hiệu đầu vào khối OFDM với tốc
độ là R_b =',num2str(Rb),'b/s'],...
'FontName','.VnTime','color','b','FontSize',9);
grid on;
%-----------------------subplot(2,2,2);
plot(f2,PSD_RF_SC,'m','LineWidth',3);
xlabel('Tần số [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_S_C_R_F','FontName','.VnTime','color','b','FontSize',14);
TRANG 11
ON C TèNH - B18DCVT362
title(['Mật độ phổ công suất PSD của tín hiệu SC_R_F với tốc độ là R_b
=',num2str(Rb),'b/s',...
';F_R_F=',num2str(fc),'H_Z'],...
'FontName','.VnTime','color','b','FontSize',9);
grid on;
%-----------------------subplot(2,2,3);
for k = 1:num_subcarrier
plot(f,PSD_OFDM(k,:),'b','LineWidth',2);
hold on
end
xlabel('TÇn sè [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_O_F_D_M','FontName','.VnTime','color','b','FontSize',14);
title(['PSD cđa tÝn hiƯu OFDM: BW_C_h_a_n_n_e_l_
=',num2str(BW_channel),...
' H_Z ; Num_S_u_b_c_a_r_r_i_e_r =',num2str(num_subcarrier),...
'; Subcarrier_S_p_a_c_e =',num2str(deta_f),'H_Z'],...
'FontName','.VnTime','color','b','FontSize',9);
grid on;
%-----------------------subplot(2,2,4);
for k = 1:num_subcarrier
plot(f2,PSD_OFDM_RF(k,:),'b','LineWidth',2);
hold on
end
xlabel('TÇn sè [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_O_F_D_M_R_F','FontName','.VnTime','color','b','FontSize',14);
title(['PSD cđa tÝn hiƯu OFDM_R_F: BW_C_h_a_n_n_e_l_
=',num2str(BW_channel),...
' H_Z ; Num_S_u_b_c_a_r_r_i_e_r =',num2str(num_subcarrier),...
'; Subcarrier_S_p_a_c_e
=',num2str(deta_f),'H_Z',';f_R_F=',num2str(fc),'H_Z'],...
'FontName','.VnTime','color','b','FontSize',9);
grid on;
PSD_OFDM_sum_RF = sum(PSD_OFDM_RF,'double');
%==============================================
figure(2)
%-----------------------subplot(2,1,1);
for k = 1:num_subcarrier
plot(f2,PSD_OFDM_RF(k,:),'b','LineWidth',2);
hold on
end
h11 = plot(f2,PSD_RF_SC,'r','LineWidth',3);
hold on
h12 = plot(f2,PSD_OFDM_sum_RF,'+r','LineWidth',4);
xlabel('TÇn sè [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_O_F_D_M_ _R_F &
SC_R_F','FontName','.VnTime','color','b','FontSize',14);
title(['So sanh PSD cđa tÝn hiƯu OFDM_R_F & SC_R_F: BW_C_h_a_n_n_e_l_
=',num2str(BW_channel),...
TRANG 12
ĐỒN ĐỨC TÌNH - B18DCVT362
' H_Z ; Num_S_u_b_c_a_r_r_i_e_r =',num2str(num_subcarrier),...
'; Subcarrier_S_p_a_c_e
=',num2str(deta_f),'H_Z',';F_R_F=',num2str(fc),'H_Z'],...
'FontName','.VnTime','color','b','FontSize',12);
grid on;
K
= legend('PSD cđa OFDM_R_F','PSD cđa SC_R_F','PSD cđa OFDM_S_U_M__R_F');
set(K, 'fontname','.Vntime','fontsize',13);
%-----------------------subplot(2,1,2)
plot(f2,PSD_OFDM_sum_RF,'b','LineWidth',2);
hold on
plot(f2,PSD_RF_SC,'r','LineWidth',3);
xlabel('TÇn sè [H_z]','FontName','.VnTime','color','b','FontSize',12);
ylabel('PSD_O_F_D_M_ _R_F &
SC_R_F','FontName','.VnTime','color','b','FontSize',14);
title(['PSD cđa tÝn hiƯu OFDM_R_F & SC_R_F: BW_C_h_a_n_n_e_l_
=',num2str(BW_channel),...
' H_Z ; Num_S_u_b_c_a_r_r_i_e_r =',num2str(num_subcarrier),...
'; Subcarrier_S_p_a_c_e
=',num2str(deta_f),'H_Z',';F_R_F=',num2str(fc),'H_Z'],...
'FontName','.VnTime','color','r','FontSize',12);
grid on;
L
= legend('PSD cña OFDM_S_U_M_-_R_F','PSD cđa SC_R_F');
set(L, 'fontname','.Vntime','fontsize',13);
%==========================================================================
Câu lệnh
Giải thích
Ghi
chú
Clc;
Xóa tất cả đầu vào và đầu ra từ màn
hình Command Window
Clear;
Xóa tất cả các biến khỏi vùng làm
việc, giải phóng bộ nhớ hệ thống
Close all;
Đóng tất cả xóa tất cả các số liệu mà
khơng xử lý được ẩn.
deta_f
=
20;
Băng thông SM con
BW_channel
=
200;
Băng thông tổng
num_subcarrier =
round(BW_channel/deta_f);
Số kênh con = 𝐵ă𝑛𝑔 𝑡ℎô𝑛𝑔 𝑘ê𝑛ℎ 𝑐𝑜𝑛
T_ofdm
=
1/deta_f;
Độ dài của ký hiệu OFDM
R_ofdm
=
1/T_ofdm;
Tốc độ một ký hiệu OFDM
Tb
=
T_ofdm/num_subcarrier;
𝐵ă𝑛𝑔 𝑡ℎô𝑛𝑔 𝑡ổ𝑛𝑔
Chu kỳ ký hiệu kênh con
TRANG 13
ĐỒN ĐỨC TÌNH - B18DCVT362
Rb
=
1/Tb;
Tốc độ ký hiệu kênh con
A
A1
AA
=
=
=
10;
A^2*Tb;
A^2*T_ofdm;
Biên độ
f_i
=
deta_f:deta_f:BW_channel+deta_f;
f
=
Rb:BW_channel+4*deta_f;
Khoảng xét của tần số
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(((f2fc)*Tb)).^2);
Tần số kênh con
PSD_OFDM
=
zeros(num_subcarrier,max(size(f)));
PSD_OFDM_RF
=
zeros(num_subcarrier,max(size(f2)));
Tạo ma trận cho phổ tín hiệu
for k = 1:num_subcarrier
PSD_OFDM(k,:)
=
AA*(sinc((f-f_i(k))*T_ofdm)).^2;
% PSD_OFDM(k,:)
=
rand(1)*AA*(sinc((ff_i(k))*T_ofdm)).^2;
PSD_OFDM_RF(k,:)
=
AA*(sinc((f2-f_i(k)-fc)*T_ofdm)).^2;
% PSD_OFDM_RF(k,:)
=
rand(1)*AA*(sinc((f2-f_i(k)fc)*T_ofdm)).^2;
end
Vịng for cho phép tính
num_subcarrier mẫu phổ tại đầu
ra
figure(1);
Hàm: figure để tạo một figure mới Đồ
Tần số kênh tổng
Phổ tín hiệu đầu vào OFDM
OFDM tại đầu ra bộ điều chế
để vẽ đồ thị.
mơ
phỏng
subplot(2,2,1);
Chia figure để vẽ các hình
plot(f,PSD_ofdm_in,'r',
'LineWidth',3);
Vẽ đồ thì biểu diễn PSD của tín
hiệu tại đầu vào khối OFDM theo
tần số f
plot(f2,PSD_RF_SC,'m',
'LineWidth',3);
Vẽ đồ thì biểu diễn PSD của tín
xlable, ylable, title
Tạo tên trục tương ứng
for k = 1:num_subcarrier
plot(f,PSD_OFDM(k,:),'b',
'LineWidth',2);
hold on
end
Vòng for cho việc vẽ đồ thị PSD
hiệu SC theo tần số f2
của các mẫu tín hiệu đơn sóng
mang tại đầu ra bộ điều chế theo
tần số f
TRANG 14
thị
ĐỒN ĐỨC TÌNH - B18DCVT362
for k = 1:num_subcarrier
plot(f2,PSD_OFDM_RF(k,:),'b',
'LineWidth',2);
hold on
end
Vịng for cho việc vẽ đồ thị PSD
của các mẫu tín hiệu OFDM RF
khác tại đầu ra bộ điều chế theo
tần số f2
1.3.2 Mơ phỏng và nhận xét
Nhận xét:
- Hình 1: Phổ tần của tín đầu vào OFDM có độ rộng phổ là 2/Tb (Hz), trung tâm tại f =
0.
- Hình 2: Phổ tần của tín hiệu SCRF (kênh con) có độ rộng phổ là 2/Tb. Tần số trung tâm
tại f = fRF
TRANG 15
ĐỒN ĐỨC TÌNH - B18DCVT362
- Hình 3: Phổ tần của các mẫu tín hiệu đầu vào OFDM có độ rộng phổ là 2/TOFDM. Mẫu
tín hiệu có sự chồng lấn phổ - tăng hiệu suất phổ.
- Hình 4: Phổ của các mẫu tín hiệu OFDMRF tương tự phổ tần của các mẫu tín hiệu đầu
vào OFDM, duy nhất khác nhau tại điểm bắt đầu của phổ từ f = fRF.
Nhìn chung, các kênh con trùng nhau về tần số nhưng không giao thoa lẫn nhau, tăng
hiệu suất phổ, giảm chi phí và tiết kiệm phổ tần
1.4 MA_06_CP_insert
1.4.1 Câu lệnh Matlab
%-----------------------------------------------------------------------%------------------------- MA_06_CP_insert ----------------------------%-----------------------------------------------------------------------function [CP_insert] = MA_06_CP_insert(N,V)
% CP_insert-----------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];
Câu lệnh
Giải thích
function [CP_insert] =
MA_06_CP_insert(N,V)
Tạo function MA_06_CP_insert với đầu vào
O_I
= zeros(V,N);
Khai báo O_I là mảng toàn 0
O_V_N_V
= zeros(V,N-V);
Khai báo 0_V_N_V là mảng toàn 0 gồm V
là N & V. Đầu ra là CP_insert.
hàng và N-V cột.
I_V
= eye(V);
Khai báo I_V là ma trận đơn vị kích thước
VxV
for i=1:V (*)
O_I(i,:) = [O_V_N_V(i,:)
I_V(i,:)]
Vịng for cho I chạy từ 1:V
- O_I hàng thứ i của tất cả các cột =
[O_V_N_V(i,:) I_V(i,:)]
I_N
= eye(N);
CP_insert = [O_I;I_N];
Khai báo I_N là ma trận đơn vị NxN
Gán CP_insert = [O_I;I_N]
TRANG 16
Ghi chú
ĐỒN ĐỨC TÌNH - B18DCVT362
1.4.2 Kết quả
[CP_insert] = MA_06_CP_insert(8,2)
CP_insert =
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1.5 MA_06_CP_Remove
1.5.1 Câu lệnh Matlab
%-----------------------------------------------------------------------%------------------------- MA_06_CP_Remove ----------------------------%-----------------------------------------------------------------------function [CP_Remve] = MA_06_CP_Remove(N,V)
% CP_Remove-----------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
Câu lệnh
Giải thích
function [CP_Remve] =
MA_06_CP_Remove(N,V)
Tạo function MA_06_CP_Remove với đầu
O_I
= zeros(V,N);
CP_Remve
=
zeros(N,N+V);
O_V
= zeros(N,V);
I_N
= eye(N);
Khai báo CP_Remve là mảng toàn 0 gốm N
vào là N & V. Đầu ra là CP_Remove.
hàng, N+V cột
TRANG 17
Ghi chú
ĐỒN ĐỨC TÌNH - B18DCVT362
for i =1:N
CP_Remve(i,:) =
[O_V(i,:) I_N(i,:)];
end
Vịng for cho I chạy từ 1:N
- CP_Remve(i,:) (hàng thứ i của tất cả các cột
) = [O_V(i,:) I_N(i,:)];
1.5.2 Kết quả
>> [CP_Remve] = MA_06_CP_Remove(8,2)
CP_Remve =
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
1.6 MA_06_OFDM_Principle
1.6.1 Câu lệnh Matlab
clc;
clear;
N
= 4;
V
= 2;
%input('Enter N =');
%input('Enter V =');
X1
[W_H]
[W]
[CP_insert]
[CP_Remve]
= 1:N;
=
MA_06_IFFT_matrix(N);
=
MA_06_FFT_matrix(N); % note W=inv(W_H) W*W_H = I
=
MA_06_CP_insert(N,V);
=
MA_06_CP_Remove(N,V);
Mode = 1;
if Mode == 1
else
X1
%
X1
= 0.5*(sign(rand(1,N)-0.5)+1);
= 2*X1-1;
end
%--------------------------------X2 = X1';
X3 = W_H*X2; % IFFT
X4 = X3';
X5 = X4';
TRANG 18
ĐỒN ĐỨC TÌNH - B18DCVT362
X6 = CP_insert*X5;
X7 = X6';
X8 = X7';
X9 = CP_Remve*X8;
X10 = X9';
X11 = X10';
X12 = W*X11; % FFT
X13 = X12'
% ===== Check for IFFT/FFT; CP_insert_remove
% X13_T = abs(X13)
Test_IFFT_FFT_matrix
= abs(W_H*W);
Test_CP_inser_remove
= CP_Remve*CP_insert;
% Test_CP_inser_remove2
= CP_insert*CP_Remve
% ===== Check for System Modeling
X1;
X13;
%
Test_I_O = xor(X1,X13); % Note khong dung X1~=X13
%==================================================
% IFFT & FFT Princeples
% step 1: IFFT process
data_IFFT
= sqrt(N)*ifft(X1,N);
% step 2: add CP
%
data_IFFT=data_IFFT';
data_IFFT_CP = [data_IFFT(N-V+1:N) data_IFFT];
% step 3: remove CP
%
data_IFFT_CP= data_IFFT_CP';
data_CPR
= data_IFFT_CP(V+1:N+V);
% step 4: IFFT process
data_FFT
= (1/sqrt(N))*fft(data_CPR,N)
1.6.2 Kết quả
X13 =
1.0000 - 0.0000i 2.0000 - 0.0000i 3.0000 - 0.0000i 4.0000 + 0.0000i
data_FFT =
1
2
3
4
1.7 MA_06_IFFT_FFT_matrix
1.7.1 Câu lệnh Matlab
clc
clear;
% solution 1: belong to matrix W_H & W
display('SOLUTION 1: belong to Generation OF MATRIX');
W_H
= [1 1 1 1;
1 exp(j*2*pi/4) exp(j*4*pi/4) exp(j*6*pi/4);
1 exp(j*4*pi/4) exp(j*8*pi/4) exp(j*12*pi/4);
1 exp(j*6*pi/4) exp(j*12*pi/4) exp(j*2*3*3*pi/4)];
TRANG 19
ĐỒN ĐỨC TÌNH - B18DCVT362
W_H=1/2*W_H
W
= [1 1 1 1;
1 exp(-j*2*pi/4) exp(-j*4*pi/4) exp(-j*6*pi/4);
1 exp(-j*4*pi/4) exp(-j*8*pi/4) exp(-j*12*pi/4);
1 exp(-j*6*pi/4) exp(-j*12*pi/4) exp(-j*2*3*3*pi/4)];
W=1/2*W
test = abs(W_H*W);
display('tich ma tran W_H*W');
disp(test);
display(' so lieu vao ma tran IFFT (W_H)');
x11 = 1:4
display(' dau ra IFFT sau khi nhan ma tran W_H (W_H*x11)');
x12 = W_H*x11'
display(' dau ra FFT sau khi nhan ma tran W');
x13 = W*x12
display(' so sanh I/O cua IFFT & FFT o dang ma tran');
test2
= x11~=round(x13')
display('SOLUTION 2: belong to Generation OF MATRIX');
% clear;
clc;
N= 4;
W_H_2 = zeros(N);
for i =1:N
for m= 1:N
W_H_2(i,m) = exp(j*2*pi/N*(i-1)*(m-1));
end
end
W_H_2 = 1/sqrt(N)*W_H_2
W_H
W_H_2~=W_H
W_2 = zeros(N);
for m =1:N
for i= 1:N
W_2(m,i) = exp(-j*2*pi/N*(m-1)*(i-1));
end
end
W_2 = 1/sqrt(N)*W_2
W
W_2~=W
1.7.2 Kết quả
W_H_2 =
0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i
0.5000 + 0.0000i 0.0000 + 0.5000i -0.5000 + 0.0000i -0.0000 - 0.5000i
0.5000 + 0.0000i -0.5000 + 0.0000i 0.5000 - 0.0000i -0.5000 + 0.0000i
0.5000 + 0.0000i -0.0000 - 0.5000i -0.5000 + 0.0000i 0.0000 + 0.5000i
TRANG 20
ĐỒN ĐỨC TÌNH - B18DCVT362
W_H =
0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i
0.5000 + 0.0000i 0.0000 + 0.5000i -0.5000 + 0.0000i -0.0000 - 0.5000i
0.5000 + 0.0000i -0.5000 + 0.0000i 0.5000 - 0.0000i -0.5000 + 0.0000i
0.5000 + 0.0000i -0.0000 - 0.5000i -0.5000 + 0.0000i 0.0000 + 0.5000i
ans =
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
W_2 =
0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i
0.5000 + 0.0000i 0.0000 - 0.5000i -0.5000 - 0.0000i -0.0000 + 0.5000i
0.5000 + 0.0000i -0.5000 - 0.0000i 0.5000 + 0.0000i -0.5000 - 0.0000i
0.5000 + 0.0000i -0.0000 + 0.5000i -0.5000 - 0.0000i 0.0000 - 0.5000i
W=
0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i 0.5000 + 0.0000i
0.5000 + 0.0000i 0.0000 - 0.5000i -0.5000 - 0.0000i -0.0000 + 0.5000i
0.5000 + 0.0000i -0.5000 - 0.0000i 0.5000 + 0.0000i -0.5000 - 0.0000i
0.5000 + 0.0000i -0.0000 + 0.5000i -0.5000 - 0.0000i 0.0000 - 0.5000i
ans =
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
TRANG 21
ĐỒN ĐỨC TÌNH - B18DCVT362
1.8 MA_06_IFFT_FFT_AWGN
1.8.1 Câu lệnh Matlab
%-----------------------------------------------------------------------%------------------------- MA_06_IFFT_FFT_AWGN -------------------------%-----------------------------------------------------------------------clc;
clear all;
close all;
%--------------------------------------------FFTsize
= 1000;
CPsize
= 25;
snr_in_dB
= 10;
noisePower
= 10^(-snr_in_dB/10);
%---------------------------------------------% Generate for FFTsize bits: BPSK
data
= 0.5*(sign(rand(1,FFTsize)-0.5)+1);
data
= 2*data-1;
%---------------------------------------------% IFFT & FFT Princeples
% step 1: IFFT process
data_IFFT
= ifft(data);
% step 2: add CP
data_IFFT_CP = [data_IFFT(FFTsize-CPsize+1:FFTsize) data_IFFT];
% step 3: AWGN channel
tmp
= randn(1,FFTsize+CPsize);
RV_Gausian
= tmp*noisePower;
RxSymbols
= data_IFFT_CP + RV_Gausian;
% step 4: remove CP
data_CPR
= RxSymbols(CPsize+1:FFTsize+CPsize);
% step 5: IFFT process
data_FFT
= fft(data_CPR);
%%%%% decision and determine error
% solution 1:
% Hard decision
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
% to determine error (comparesion)
error_vector1
= data~=data_des1;
% errCount & number of errors
num_error1
= sum(error_vector1);
BER1
= num_error1/FFTsize
% solution 2:
% Hard decision
data_des2
= sign(real(data_FFT));
% to determine error (comparesion)
error_vector2
= data~=data_des2;
% errCount & number of errors
num_error2
= sum(error_vector2);
TRANG 22
ĐỒN ĐỨC TÌNH - B18DCVT362
BER2
= num_error2/FFTsize
% optimal solution optimal
BER_op = sum(sign(real(data_FFT))~=data)/FFTsize
1.8.2 Các bước tiến hành
Bước 1: Thiết lập tham số mô phỏng SNR = 5
FFTsize = 16
CPsize = 4;
errCount = 0;
Bước 2: Điều chế Q-PSK
numSymbols = FFTsize; % note
tmp1 = round(rand(2,numSymbols));
tmp2 = tmp1*2 - 1;
data = (tmp2(1,:) + j*tmp2(2,:))/sqrt(2);
inputSymbols = data;
Bước 3: Điêu chế OFDM bởi IFFT
TxSamples
=
sqrt(FFTsize)*ifft(inputSymbols);
Bước 4: Chèn CP
Tx_ofdm
=
[TxSamples(numSymbols-
CPsize+1:numSymbols)
TxSamples];
Bước 5: Tạo kênh AWGN và dữ liệu tmp = randn(2,numSymbols+CPsize);
qua kênh AWGN.
complexNoise
=
(tmp(1,:)
+
i*tmp(2,:))/sqrt(2);
noisePower = 10^(-SNR/10);
RxSymbols
=
Tx_ofdm
+
sqrt(noisePower)*complexNoise;
Bước 6: Khử CP
EstSymbols
=
RxSymbols(CPsize+1:numSymbols+CPsize);
Bước 7: Giải điều chế OFDM bởi Y = fft(EstSymbols,FFTsize); % dau ra cua
FFT
FFT
Bước 8: Tách sóng quết định cứng
EstSymbols = Y;
EstSymbols = sign(real(EstSymbols)) +
i*sign(imag(EstSymbols));
EstSymbols1 = EstSymbols;
EstSymbols = EstSymbols/sqrt(2);
TRANG 23
ĐỒN ĐỨC TÌNH - B18DCVT362
Bước 9: So sánh kiểm tra lỗi và đếm I = find((inputSymbols-EstSymbols) == 0);
lỗi
Bước 10: Đếm lỗi
errCount
=
errCount
+
(numSymbols-
length(I));
SER = errCount / (numSymbols);
Bước 11: Hiển thị kết quả mô phỏng disp('Du lieu dau vao IFFT = ')
disp(data);
disp('Du lieu dau sau quyet dinh = ')
disp(EstSymbols);
disp('Kiem tra su khac nhau vao/ra he thong')
disp(data~=EstSymbols);
disp('So ky hieu loi = ')
disp(sum(data~=EstSymbols));
disp('SER = ')
disp(sum(data~=EstSymbols)/FFTsize);
1.8.3 Kết quả
BER1 =
0.3360
BER2 =
0.3360
BER_op =
0.3360
TRANG 24