Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

Họ và tên : Nguyễn Đình Phong

MSV : B21DCVT342
Bài 2 Mô phỏng BER hệ thống BPSK trong môi trường kênh AWGN

Câu 1 Phân tích mô hình mô phỏng

Mô hình mô phỏng gồm có :


- Nguồn đầu vào là chuỗi bit 0,1 được MAP bằng giá trị năng lượng bit
- Bộ dao động nội TLO để cung cấp sóng mang
- Kênh AWGN có tín hiệu nhiễu cộng
- Mạch quyết định dùng để quyết định giá trị của bit dựa trên y
Câu 2 Phân tích các tham số đầu vào của chương trình
- Tỉ số tín hiệu trên lỗi SNR = S/N ảnh hưởng trực tiếp đến sgma khi SNR tăng
thì sgma càng giảm

- Năng lượng bit Eb ảnh hưởng tới tỉ số lỗi bit qua công thức

-
Nếu Eb càng tăng thì Pe càng giảm
- Numbits là số bit được truyền vào
- X là tín hiệu nhiễu của kênh AWGN cộng với tín hiệu tại đầu vào và là biến
ngẫu nhiên phân bố chuẩn với trung bình 0
Câu 3 Mô phỏng

%==========================================================================
%=================== Sim_FWC_02_02_BER_BPSK_AWGN ==========================
%==========================================================================
clc; clear; close all;

%==========================================================================
SNRindB = 0:1:9; % signal to noise ratio dB
SNR = 10.^(SNRindB/10);
Eb = 1; % energy per bit
sgma = Eb./sqrt(2*SNR); % sigam, standard deviation of noise is
% noisepower = sgma.^2
NumBits = 10^7; % Number of Bits
%==========================================================================
% Theoretical error rate
% Calculation for error Probability: Orthogonal
% theo_Orthogonal_err_prb = Qfunct(sqrt(SNR));
theo_Orthogonal_err_prb = 0.5 *erfc(sqrt(SNR/2));
% Calculation for error Probability: Antipodal signal
% theo_Antipodal_err_prb = Qfunct(sqrt(2*SNR));
theo_Antipodal_err_prb = 0.5 *erfc(sqrt(SNR));
%==========================================================================
% Simulated error rate
h = waitbar(0,'Please wait...');
% minTime = Inf;
tic
for j=1:length(SNR)
tStart = tic; % TIC, pair 2
waitbar(j/length(SNRindB));
dsource_1 = 0.5*(sign(rand(1,NumBits)-0.5)+1);
numoferr = 0;
for i=1:NumBits
% Generation of the binary data source and Pass AWGN channel
temp = rand; % Uniform radom variable over (0,1)
if (temp<0.5),
dsource(i) =1; % With probability 1/2 source
output is 1
X = sgma(j)*randn(1);
Y = -sqrt(Eb) + X; % 1 with enrery is -sqrt(Eb);
and pass AWGN channel
else
dsource(i) = 0; % With probability 1/2 source
output is 0
X = sgma(j)*randn(1);
Y = sqrt(Eb) + X; % 0 with enrery is +sqrt(Eb);
and pass AWGN channel
end
% detector follows/Decission
if (Y<0)
decis(i) = 1; % Decission is '1'
else
decis(i) = 0; % Decission is '0'
end;
end;
numoferr = sum(decis~=dsource);
smld_err_prb(j) = numoferr/NumBits; % Probability of error estimate
%-------------------------
tElapsed = toc(tStart); % TOC, pair 2
% minTime = min(tElapsed, minTime)
end;

SimTime = max(tElapsed)
close(h);

%==========================================================================
save Sim_FWC_02_02_BER_BPSK_AWGN.mat;
%==========================================================================
h1 = figure(1);
% set(h1,'color','c');
set(h1,'Name','Sim_FWC_02_02_BER_BPSK_AWGN');
subplot(121)
G = semilogy(SNRindB,smld_err_prb,'-
vr',SNRindB,theo_Antipodal_err_prb,'-ob');
set(G,'LineWidth',[1.5]);
xlabel('SNR [dB]','FontName','.VnTime','color','b','FontSize',12);
ylabel('Xac suat loi
Pe','FontName','.VnTime','color','b','FontSize',18);
title(['Mo phong BER ho thong BPSK trong kenh AWGN; N_s_i_m_b_i_t =
',num2str(NumBits),' bits
'],'FontName','.VnTime','color','r','FontSize',14);
LT = legend('Mo phong ',' Tinh toan');
set(LT,'FontName','.VnTime','FontSize',16);
AX=gca;
set(AX,'FontSize',14);
axis([min(SNRindB) max(SNRindB), 1e-5 0.2]);
grid on
text(2,7e-5,'Mo hinh hoa ve mo
phong','FontName','.VnTimeh','Color','b','FontSize',14);
text(0.5,min(theo_Antipodal_err_prb),'Tinh chinh xac cua ket qua mo
phong, xac nhan ve pho chuan mo
hinh','FontName','.VnTimeh','Color','r','FontSize',9.9)

subplot(122)
G = semilogy(SNRindB,theo_Orthogonal_err_prb,'-vr');
G = semilogy(SNRindB,theo_Orthogonal_err_prb,'-
vr',SNRindB,theo_Antipodal_err_prb,'-ob');
set(G,'LineWidth',[1.5]);
xlabel('SNR [dB]','FontName','.VnTime','color','b','FontSize',12);
ylabel('Xac suat loi
Pe','FontName','.VnTime','color','b','FontSize',18);
title('So sanh xac suat loi bit he thong BPSK truc giao va doi cuc
trong k?nh AWGN','FontName','.VnTime','color','b','FontSize',15);
LT = legend(' Truc giao',' doi cuc');

set(LT,'FontName','.VnTime','FontSize',16,'fontweight','normal','fontAngle'
,'normal');
AX = gca;
set(AX,'FontSize',14);
axis([min(SNRindB) max(SNRindB), 1e-5 0.2]);
grid on;
text(2,7e-5,'Tinh toan so sanh hieu
nang','FontName','.VnTimeh','Color','b','FontSize',14);
%==========================================================================
% Measure multiple time spans simultaneously using two pairs of tic/toc
calls. To do this,
% measure the minimum and average time to compute a summation of Bessel
functions:

% REPS = 1000; minTime = Inf; nsum = 10;


% tic; % TIC, pair 1
%
% for i=1:REPS
% tStart = tic; % TIC, pair 2
% total = 0;
% for j=1:nsum
% total = total + besselj(j,REPS);
% end
%
% tElapsed = toc(tStart); % TOC, pair 2
% minTime = min(tElapsed, minTime);
% end
% averageTime = toc/REPS; % TOC, pair 1

STT Dòng Code Ý Nghĩa


Tạo một vector SNRindB chứa
các giá trị SNR (Signal-to-Noise
1 SNRindB = 0:1:9;
Ratio) từ 0 đến 9 với bước nhảy
là 1 dB.
Tính SNR tuyệt đối (SNR) từ
2 SNR = 10.^(SNRindB/10);
SNR theo dB (SNRindB).
3 Eb = 1; Đặt năng lượng mỗi bit là 1.
Tính độ lệch chuẩn (sgma) của
4 sgma = Eb./sqrt(2*SNR);
nhiễu Gaussian trên cơ sở SNR.
Số lượng bit được sử dụng trong
5 NumBits = 10^7;
mô phỏng.
Tính xác suất lỗi lý thuyết cho
theo_Orthogonal_err_prb =
6
0.5 *erfc(sqrt(SNR/2)); hệ thống trục giao (Orthogonal)
dựa trên hàm hàm phụ thể erfc.
Tính xác suất lỗi lý thuyết cho
theo_Antipodal_err_prb =
7 hệ thống đối cực (Antipodal)
0.5 *erfc(sqrt(SNR));
dựa trên hàm hàm phụ thể erfc.
h = waitbar(0,'Please Tạo một thanh tiến trình để hiển
8
wait...'); thị tiến trình của vòng lặp.
9 for j=1:length(SNR) Vòng lặp qua từng giá trị SNR.
dsource_1 = Tạo nguồn dữ liệu nhị phân ngẫu
10 0.5*(sign(rand(1,NumBits) nhiên, giả sử có xác suất bằng
-0.5)+1); nhau cho bit 0 và 1.
Khởi tạo biến numoferr để đếm
11 numoferr = 0;
số lỗi.
12 for i=1:NumBits Vòng lặp qua từng bit.
Tạo một số ngẫu nhiên từ phân
13 temp = rand;
phối đều.
Kiểm tra xem số ngẫu nhiên có
14 if (temp<0.5),
nhỏ hơn 0.5 không.
Nếu là nhỏ hơn 0.5, đặt bit đầu
15 dsource(i) =1;
ra là 1.
Tạo một mẫu nhiễu Gaussian với
16 X = sgma(j)*randn(1);
độ lệch chuẩn sgma.
Truyền qua kênh AWGN: nếu
17 Y = -sqrt(Eb) + X; bit là 1, thì cộng nhiễu; nếu bit là
0, thì trừ nhiễu.
Trường hợp ngược lại, nếu số
18 else ngẫu nhiên lớn hơn hoặc bằng
0.5.
19 dsource(i) = 0; Đặt bit đầu ra là 0.
Tạo một mẫu nhiễu Gaussian với
20 X = sgma(j)*randn(1);
độ lệch chuẩn sgma.
Truyền qua kênh AWGN: nếu
21 Y = sqrt(Eb) + X; bit là 1, thì trừ nhiễu; nếu bit là
0, thì cộng nhiễu.
22 end Kết thúc kiểm tra điều kiện.
Kiểm tra xem giá trị đầu ra của
23 if (Y<0) kênh AWGN có nhỏ hơn 0
không.
Nếu như nhỏ hơn, đặt quyết định
24 decis(i) = 1;
là 1.
25 else Trường hợp ngược lại.

26 decis(i) = 0; Đặt quyết định là 0.

27 end Kết thúc kiểm tra điều kiện.

28 end Kết thúc vòng lặp qua từng bit.


Đếm số lỗi bằng cách so sánh
numoferr =
29 kết quả quyết định (decis) với
sum(decis~=dsource);
nguồn dữ liệu gốc (dsource).
smld_err_prb(j) = Ước lượng xác suất lỗi dựa trên
30
numoferr/NumBits; số lỗi và tổng số bit.
Đo thời gian mô phỏng cho mỗi
31 tElapsed = toc(tStart);
giá trị SNR.
Kết thúc vòng lặp qua từng giá
32 end
trị SNR.
Tính thời gian mô phỏng dài
33 SimTime = max(tElapsed)
nhất.
Đóng thanh tiến trình khi mô
34 close(h);
phỏng hoàn thành.

You might also like