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

Làm sáng tỏ quá trình xây dựng mô hình và nguyên lý hoạt động của hệ thống truyền dẫn ofdm trên cơ sở ifftfft 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

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 (3.24 MB, 31 trang )

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ị.


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


×