You are on page 1of 8

BÁO CÁO

MÔN HỌC: THỰC HÀNH TTKD & TTDD


BÀI 1: ĐÁNH GIÁ BER TRÊN KÊNH AWGN CỦA HỆ THỐNG
TRUYỀN THÔNG
GVHD: TS. Đặng Lê Khoa
Sinh viên thực hiện:
Nhóm 3:
Họ và tên MSSV
Phạm Xuân Quang 18200208
Nguyễn Võ Chấn Quốc 18200212
Trần Hữu Quốc 18200213
Lê Thành Tài 18200222
Phan Khả Thịnh 18200246
Nguyễn Anh Tiến 18200259

Bước 1: Tạo bits tín hiệu phát.


function [Bits_data] = Bits_Generation(N)
Bits_data = randsrc(1,N,[0 1]);
end
Hàm tạo N bit dữ liệu với xác suất 0.5

Bước 2: Điều chế số QPSK (mapping symbols trên kênh rời rạc)
function [s] = Modulation(Bits_data, N)
s = [];
sI = 1/sqrt(2); sQ = 1/sqrt(2);
for i = 1:2:N-1
if (Bits_data(i)== 0 && Bits_data(i+1)== 0)
s = [s sI + 1i*sQ];
elseif (Bits_data(i)== 0 && Bits_data(i+1)== 1)
s = [s -sI + 1i*sQ];
elseif (Bits_data(i)== 1 && Bits_data(i+1)== 1)
s = [s -sI - 1i*sQ];
else
s = [s sI - 1i*sQ];
end
end
end

Bước 3: Tạo kênh nhiễu AWGN với công suất nhiễu trung bình N0=10-1
function [n] = AWGN(N0,N)
n = sqrt(N0/2)*(randn(1,N/2) + 1i*randn(1,N/2));
end
N mẫu nhiễu AWGN

Bước 4: Giải điều chế QPSK


function [Bits_de] = De_Modulation_QPSK(s,Ps,n,N)
Bits_de = [];
y = sqrt(Ps)*s + n;
for i=1:N/2
if real(y(i)) >= 0 && imag(y(i)) >= 0
Bits_de = [Bits_de 0 0];
elseif real(y(i)) < 0 && imag(y(i)) >= 0
Bits_de = [Bits_de 0 1];
elseif real(y(i)) < 0 && imag(y(i)) < 0
Bits_de = [Bits_de 1 1];
else
Bits_de = [Bits_de 1 0];
end
end
end

Bước 5: Xác định lỗi bit BER hoặc Pb

function [BER] = BER_QPSK(Bits_data,Bits_de,N)


Err = biterr(Bits_data, Bits_de);
BER = Err/N;
end

Bước 6: Xác suất lỗi bit lý thuyết của QPSK

function BER_theo = BER_QPSK_Theo(SNR)


BER_theo = qfunc(sqrt(SNR));
end

Bước 7: Vẽ đồ thị kiểm chứng giữa mô phỏng Monte Carlo và lý thuyết


clc; clear; close all;
N = 10^6;
SNR_dB = 0:2:12; SNR = 10.^(SNR_dB/10);
N0 = 0.1;
Ps = SNR*N0;
BER = zeros(1,length(SNR_dB));
BER_theo = zeros(1,length(SNR_dB));
for i = 1:length(SNR_dB)
Bits_data = Bits_Generation(N);
s = Modulation(Bits_data, N);
n = AWGN(N0,N);
Bits_de = De_Modulation_QPSK(s,Ps(i),n,N);
BER(i) = BER_QPSK(Bits_data,Bits_de,N);
BER_theo(i) = BER_QPSK_Theo(SNR(i));
end
figure(1)
semilogy(SNR_dB,BER_theo,'r-','linewidth',1.2);
hold on;
semilogy(SNR_dB,BER,'ko','linewidth',1.2); grid on;
xlabel('SNR (dB)'); ylabel('BER');
legend('Theory-QPSK','Simulation');

Bước 8: Kết quả

Nhận xét: Mô phỏng và lý thuyết trùng khớp lẫn nhau.


Bước 1: Tạo chuỗi bit
function [Bits_data] = Bits_Generation(N)
Bits_data = randsrc(1,N,[0 1]);
end
Bước 2: Điều chế 8-PSK

function [s] = Modulation(Bits_data, N)


s = [];
%sI = cos(pi/4*(k-1));sQ = sin(pi/4*(k-1));
for i=1:3:N-1
if (Bits_data(i)== 0 && Bits_data(i+1)== 0 && Bits_data(i+2) == 0) %000 - k
=1
s = [s cos(0) + 1j*sin(0) ];
elseif (Bits_data(i)== 0 && Bits_data(i+1)== 0 && Bits_data(i+2)== 1) %001 - k
=2
s = [s cos(pi/4) + 1j*sin(pi/4) ];
elseif (Bits_data(i)== 1 && Bits_data(i+1)== 0 && Bits_data(i+2)== 1) %101 - k
=3
s = [s cos(pi/2) + 1j*sin(pi/2) ];
elseif (Bits_data(i)== 1 && Bits_data(i+1)== 0 && Bits_data(i+2)== 0) %100 - k
=4
s = [s cos(3*pi/4) + 1j*sin(3*pi/4) ];
elseif (Bits_data(i)== 1 && Bits_data(i+1)== 1 && Bits_data(i+2)== 0) %110 - k
=5
s = [s cos(pi) + 1j*sin(pi) ];
elseif (Bits_data(i)== 1 && Bits_data(i+1)== 1 && Bits_data(i+2)== 1) %111 - k
=6
s = [s cos(5*pi/4) + 1j*sin(5*pi/4) ];
elseif (Bits_data(i)== 0 && Bits_data(i+1)== 1 && Bits_data(i+2)== 1) %011 - k
=7
s = [s cos(3*pi/2) + 1j*sin(3*pi/2) ];
elseif (Bits_data(i)== 0 && Bits_data(i+1)== 1 && Bits_data(i+2)== 0) %010 - k
=8
s = [s cos(7*pi/4) + 1j*sin(7*pi/4) ];
end
end
end

Bước 3: Nhiễu kênh AWGN

function [n] = AWGN(N0,N)


n = sqrt(N0/3)*(randn(1,N/3) + 1i*randn(1,N/3));
end

Bước 4: Giải điều chế 8-PSK

function [Bits_de] = De_Modulation_8PSK(s,Ps,n,N)


Bits_de = [];
y = sqrt(Ps)*s + n;
for i=1:N/3
yy(i) = mod(atan2(imag(y(i)),real(y(i)))+2*pi,2*pi);
if yy(i) <= (pi/8) && yy(i) >= 0 || yy(i) > (15*pi/8)
Bits_de = [Bits_de 0 0 0];
elseif yy(i) > (pi/8) && yy(i) <= (3*pi/8)
Bits_de = [Bits_de 0 0 1];
elseif yy(i) > (3*pi/8) && yy(i) <= (5*pi/8)
Bits_de = [Bits_de 1 0 1];
elseif yy(i) > (5*pi/8) && yy(i) <= (7*pi/8)
Bits_de = [Bits_de 1 0 0];
elseif yy(i) > (7*pi/8) && yy(i) <= (9*pi/8)
Bits_de = [Bits_de 1 1 0];
elseif yy(i) > (9*pi/8) && yy(i) <= (11*pi/8)
Bits_de = [Bits_de 1 1 1];
elseif yy(i) > (11*pi/8) && yy(i) <= (13*pi/8)
Bits_de = [Bits_de 0 1 1];
elseif yy(i) > (13*pi/8) && yy(i) <= (15*pi/8)
Bits_de = [Bits_de 0 1 0];
end
end
end
Bước 5 : Tính BER

function [BER] = BER_8PSK(Bits_data,Bits_de,N)


Err = biterr(Bits_data, Bits_de);
BER = Err/N;
end

Bước 6: BER lý thuyết

function BER_theo = BER_8PSK_Theo(SNR)


BER_theo = (1/3)*qfunc(sqrt(SNR*3)*sin(pi/8));
end
Bước 7: Chạy

clc; clear; close all;


N = 10^6-1;
SNR_dB = 0:2:20;
SNR = 10.^(SNR_dB/10);
N0 = 0.1;
Ps = SNR*N0;
BER = zeros(1,length(SNR_dB));
BER_theo = zeros(1,length(SNR_dB));
for i = 1:length(SNR_dB)
Bits_data = Bits_Generation(N);
s = Modulation(Bits_data, N);
n = AWGN(N0,N);
Bits_de = De_Modulation_8PSK(s,Ps(i),n,N);
BER(i) = BER_8PSK(Bits_data,Bits_de,N);

BER_theo(i) = BER_8PSK_Theo(SNR(i));

end
figure(1)
semilogy(SNR_dB,BER_theo,'r-','linewidth',1.2);
hold on;
semilogy(SNR_dB,BER,'ko','linewidth',1.2); grid on;
xlabel('SNR (dB)'); ylabel('BER');
legend('Theory-8PSK','Simulation');

Bước 8: Kết quả

Nhận xét: Mô phỏng và lý thuyết trùng khớp lẫn nhau.

You might also like