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

Giải thích code Matlab Cơ sở kỹ thuật thông tin vô tuyến PTIT PHẦN 1

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 (1.06 MB, 27 trang )

BÀI 1_1:PSD Base_band and Passband(Sim_FWC_01_1)
Giải thích

Dịng lệnh

Ý nghĩa

clc

Xóa cửa sổ lệnh

Xóa hết tát cả các lệnh trong
command window

Close all

đóng

Đóng các figure(hình vẽ đị thị
minh họa cho chương trình.

clear

Xóa các mục khỏi
khơng gian làm
việc, giải phóng bộ
nhớ hệ thống

f= -200:5:200;

Tạo vecto biến f có


giá trị bắt đầu từ f=200 đến giá trị
f=200 cách nhau 5

Khảo sát hàm mật độ phổ công
suất theo tần số

Tb=0.02;

Tạo giá trị
Tb=0.005s

Cập nhật giá trị tham số

Rb= 1/Tb

Tính tốc độ bit
thơng qua Tb

Cập nhật giá trị tham số

A=10

Biên độ của tín hiệu
băng tần cơ sở

Cập nhật giá trị tham số
Cập nhật giá trị tham số

AA=A^2*Tb
fc =120;


Tần số song mang

PSD_BaseBand=AA*(sinc((f* Tính mật độ phổ
cơng suất của băng
Tb)).^2);
tần cơ sở

SD_PassBand=(AA/4)*((sinc( Tính mật độ phổ
cơng suất của BPSK
(f+fc)*


Tb)).^2 +(sinc((f-fc)*Tb)).^2);

PSD_PassBand_1
=(AA/4)*((sinc((ffc)*Tb)).^2);

Thành phần mật độ
phổ công suất của
BPSK

PSD_PassBand_2=(AA/4)*((s Thành phần mật độ
phổ cơng suất của
inc((f+
BPSK

fc)*Tb)).^2 );

figure(1)


Mở cửa sổ màn hình
mới

subplot(2,1,1);

Tạo mảng trong lớp
con

stem(f,PSD_BaseBand1,'b','Li
neWid

Tạo bản đồ cành của
tần số, PSD của
thành phần trong
BPSK

th',3);
hold on

Đóng băng đồ thị
hiện tại


stem(f,PSD_PassBand_2,'g','Li Tạo bản đồ cành của
tần số, PSD của
neWidth',3);
thành phần trong
BPSK


xlabel

Thêm nhãn text vào
trục ox

ylabel

Thêm nhãn text vào
trục oy của đồ thị

title

Thêm text vào góc
trên cùng đồ thị

plot

Vẽ đồ thị

Vẽ các điểm và đường trong mặt
phẳng 2D
Plot(x,y): vẽ 2D với trục x và y
tuyến tính

grid on;

THAY ĐỔI THAM SỐ
f
= -200:5:200;
%f

= linspace(-200,200,1500);
Tb
= 0.1;
Rb = 0.5/Tb;
A
= 10;
AA
= A^2*Tb;

Đường lưới được
bật lên

Vẽ đồ thị


= 120;

PSDPassBand PSD
BaseBand

fc

Mật độ phổ công suất PSD của tín hiệu băng tần cơ sở với tốc độ R
=5b/s
b
10

5

0

-200

-150

-100

-50

0

50

100

150

200

Tần số [Hz]

Mật độ phổ công suất PSD của tín hiệu thông giải với tốc độ R
=5b/s; Tần số sóng mang fc =120HZ
b
2.5
2
1.5
1
0.5
0
-200


-150

-100

-50

0

50

100

TÇn sè [Hz]

f
= linspace(-2000,2000,1500);
Tb
= 0.005;%input('Nhap thoi gian bit=');%0.005;
Rb = 1/Tb;
P
= 1;
A
= 1;
AA
= A^2*Tb;
fc
= 600;
% Carrier Frequncy
Eb

= P*Tb;

150

200


PSD của QPSK & MSKPSD đầu vào khối điều chế

Mật độ phổ-3công suất PSD của tín hiệu đầu vào khối ®iỊu chÕ R
=200b/s
b
5

x 10

4
3
2
1

0
-2000

-1500

-1000

-500


0

500

1000

1500

2000

TÇn sè [Hz]

6

x 10

PSD cđa QPSK
PSD cđa MSK

4
2
0
-20

-10

0

10


Tần số chuẩn hóa (f-fc)Tb

PSD của QPSK & MSK

So sánh PSD cđa QPSK & MSK,
Rb =200b/s; TÇn sè sãng mang
fc =600HZ
-3
-3
6
4

x 10

PSD cña QPSK
PSD cña MSK

2

0
-2000 -1000

0

T n s [H

1000
z

2000


]

BÀI 1_2: Mơ phỏng PSD_Modulation(SIM_FWC_01_2)
a, Chương trình:
Dịng lệnh
f

= linspace(-2000,2000,1500);

Tb

= 0.002

Rb

= 1/Tb;

P
A

AA
fc

= 1;
= 1;

= A^2*Tb;
= 600;


Giải thích
Khởi tạo tập giá trị
f có giá trị từ -2000
tới 2000 trong đó
gồm 1500 giá trị
Khởi tạo giá trị chu
kì bit
Xác định tốc độ bit
Khởi tạo giá trị 2
biến A, P biên độ
và cơng suất tín
hiệu
Khởi tạo biến AA
Thêm giá trị tần số
sóng mang

Ý nghĩa
Thiết lập tập giá
trị input cho q
trình mơ phỏng
Thiết lập tham
số


Eb

= P*Tb;

Khởi tạo biến Eb
năng lượng bit phát

PSD_BaseBand =
Thiết lập cơng thức
AA*(sinc((f*Tb)).^2);
phổ cơng suất phát
tín hiệu băng gốc
dựa vào cơng thức
lý thuyết
PSD_BPSK = (Eb*log2(2))*((sinc((f- Thiết lập hàm tính
fc)*Tb*log2(2))).^2);
PSD của từng
phương pháp điều
chế BPSK theo 1
bên dựa trên lý
thuyết.
PSD_QPSK = (Eb*log2(4))*((sinc((f- Thiết lập hàm tính
fc)*Tb*log2(4))).^2);
PSD của từng
phương pháp điều
chế QPSK theo 1
bên dựa trên lý
thuyết.
PSD_8_PSK = (Eb*log2(8))*((sinc((f- Thiết lập hàm tính
fc)*Tb*log2(8))).^2);
PSD của từng
phương pháp điều
chế 8-PSK theo 1
bên dựa trên lý
thuyết.
PSD_BPSK_2 =
Thiết lập hàm tính

(Eb*log2(2)/2)*(((sinc((fmật độ phổ cơng
fc)*Tb*log2(2))).^2) +
suất của tín hiệu
((sinc((f+fc)*Tb*log2(2))).^2));
theo cả 2 phía của
trục f dựa trên cơng
thức lý thuyết MPSK

Khảo sát phổ
cơng suất của tín
hiệu băng gốc

Khảo sát phổ
cơng suất của tín
hiệu điều chế
BPSK

Khảo sát phổ
cơng suất của tín
hiệu điều chế
QPSK

Khảo sát phổ
cơng suất của tín
hiệu điều chế 8PSK

Khảo sát phổ
cơng suất của tín
hiệu điều chế
BPSK


PSD_QPSK_2 =
(Eb*log2(4)/2)*(((sinc((ffc)*Tb*log2(4))).^2) +
((sinc((f+fc)*Tb*log2(4))).^2));

Khảo sát phổ
cơng suất của tín
hiệu điều chế
QPSK

PSD_8_PSK_2 =
(Eb*log2(8)/2)*(((sinc((ffc)*Tb*log2(8))).^2) +
((sinc((f+fc)*Tb*log2(8))).^2));

Khảo sát phổ
cơng suất của tín
hiệu điều chế 8PSK


SF

= ((16*Eb)/(pi^2));

Tạo biến SF

Num

= (cos(2*pi*(f-fc)*Tb));

Tạo biến Num


Dum

= (16*(Tb^2)*(f-fc).^2)-1;

Tạo biến Dum

PSD_MSK

= SF*((Num./Dum).^2);

Num_2

= (cos(2*pi*(f+fc)*Tb));

Dum_2

= (16*(Tb^2)*(f+fc).^2)-1;

PSD_MSK_2 =
(SF/2)*(((Num./Dum).^2) +
((Num_2./Dum_2).^2));
figure(1)
figure(2)
figure(3)
figure(4)
subplot(2,1,1);

plot(f,PSD_BaseBand,'b','LineWidth',3


Thiết lập hàm tính
PSD của MSK theo
1 phía dựa theo
cơng thức lý thuyết
Tạo biến Num_2
có giá trị được tính
bằng biểu thức bên
phải
Tạo biến Dum-2 có
giá trị được tính
bằng biểu thức bên
phải
Thiết lập hàm tính
PSD của MSK theo
2 phía dựa theo
cơng thức lý thuyết
Lần lượt tạo các
cửa sổ để hiển thị
đồ thị
Chia cửa sổ figure
một ma trận 2x1 và
chọn hang thứ 1 để
biểu diễn kết quả
Biểu diễn kết quả
của các phổ PSD
lên đồ thị các điểm

Chia hàm tính
PSD của MSK
thành nhiều

thành phần để dễ
dàng thiết lập
cơng thức khi
viết chương trình
MATLAB

Biểu diễn mật độ
phổ PSD-MSK 1
side trên trục Ox
Thiết lập giá trị
cho phía cịn lại
của MSK

Biểu diễn mật độ
phổ PSD-MSK 2
side trên trục Ox


giá trị được nối liền
với nhau
Xlabel()

Tạo title cho trục
Ox, chọn màu sắc
chữ, font, size
Tạo title cho trục
Oy, chọn màu sắc
chữ, font, size
Tạo sơ đồ lưới cho
subplot

Giữ chương trình
tại ngun subplot
đó
Tạo biến f1

Ylabel()

grid on;
hold on

f1 = (f-fc)*Tb;

THAY ĐỔI THAM SỐ

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
M« pháng BER hƯ thèng BPSK trong kênh AWGN; Nsimbit = 10000000 bits


Xác suất lỗi Pe

10

10

10

Mô phỏng
Tính toán

-1

10

-2

10

Xác suất lỗi Pe

10

So sánh xác suất lỗi bit hệ thống BPSK trực giao và đối cực trong kênh AWGN

-3

-4

10


10

Trực giao
Đối cực

-1

-2

-3

-4

Mô hình hóa và mô phỏng

Tính toán so sánh hiệu năng

Tính chính xác của kết quả mô phỏng, xác nhận và phê chuẩn mô hình

0

2

4
SNR [dB]

6

8


0

2

4
SNR [dB]

6

8


SNRindB
= 0:1:9;
% signal to noise ratio dB
SNR
= 10.^(SNRindB/10);
Eb
= 2;
% energy per bit
sgma
= Eb./sqrt(2*SNR); % sigam, standard deviation of noise is
% noisepower = sgma.^2
NumBits
= 10^3;
% Number of Bits
Bài 2:

- Giải thích chương trình :

Câu lệnh
clc

clear

Close all

SNRindB = 0:1:9;

SNR=10.^(SNRindB/10);

Eb
sgma

= 1;
= Eb./sqrt(2*SNR);

NumBits = 10^7;
theo_Orthogonal_err_prb
*erfc(sqrt(SNR/2));

= 0.5

Giải thích
Ý nghĩa
Xóa tồn bộ cửa sổ Khởi tạo mơi
command
trường chạy
chương trình
Loại bỏ các thành

Khởi tạo mơi
phần khỏi
trường chạy
workspace, giải
chương trình
phóng bộ nhớ
Tắt tồn bộ cửa sổ Chuẩn bị môi
hiển thị kết quả mô trường để chạy
phỏng hiện tại
chương trình
Khởi tạo một vecto Sinh tỉ lệ tín
giá trị từ 0-9 cách
hiệu trên nhiễu
nhau 1 đơn vị
ở đơn vị dB
Khởi tạo biến SNR Đổi đơn vị SNR
có giá trị bằng kết
quả của biểu thức
bên phải
Khởi tạo biến Eb = Set năng lượng /
1
bit
Khởi tạo biến sgma Xác định
có giá trj bằng kết phương sai
quả biểu thức bên
phải
Khởi tạo biến
Set số lượng bit
Numbits
vào

Tính xác suất
lỗi cho tín hieju
trực giao theo
cơng thức lý
thuyết


theo_Antipodal_err_prb
*erfc(sqrt(SNR));

= 0.5

h
= waitbar(0,'Please
wait...');
tic

for j=1:length(SNR)

tStart = tic;

waitbar(j/length(SNRindB));

dsource_1
=
0.5*(sign(rand(1,NumBits)-0.5)+1);

numoferr

= 0;


for i=1:NumBits

temp = rand;

if (temp<0.5),

Hiển thị cửa sổ
hiện % chương
trình hồn thành
Sử dụng hàm tic
làm mốc để xác
định thời gian chạy
mơ phỏng
Khởi tạo vịng lặp
Bắt đầu đo thời
gian chạy từ hiện
tại
Tính tốn của sổ
hiển thị chương
trình đã chạy được
bao nhiêu %
Tạo dsource bằng
cách lấy random
một ma trận
1Xnumbits với giá
trị random trong
khoảng 0-1 và lấy
dấu nếu > 0 là 1
nếu bằng 0 là 0 ,

nhỏ hơn 0 là -1
Khởi tạo biến
sumoferr
Tạo vòng lặp số lần
bằng gióa trị
Numbits
Tạo biến temp có
giá trị random từ 01
Nếu giá trị temp <
0.5

Tính xác suất
lỗi bit cho tín
hiệu đối cực
theo cơng thức
lý thuyết
Hỗ trợ q trình
mơ phỏng
Bắt đầu khảo
sát thời gian
chạy mô phỏng
Lặp n lần với n
là độ dài của
vecto SNR
Tính tốn thời
gian chạy
chương trình
Hỗ trợ q trình
mơ phỏng


Tạo nguồn bit
ngẫu nhiên

Khởi tạo biến
đếm số lỗi
Bắt đầu tạo
nguồn nhị phân


dsource(i) =1;

Đưa vào mảng tại
index i giá trị 1

X = sgma(j)*randn(1);

Khởi tạo Biến X

Y= -sqrt(Eb) + X;

Khởi tạo Biến Y

else

dsource(i) = 0;

Xét trường hợp
temp > 0.5
Đưa vào mảng tại
index i giá trị 0


X

= sgma(j)*randn(1);

Khởi tạo Biến X

Y

= sqrt(Eb) + X;

Khởi tạo Biến Y

end
if (Y<0)
decis(i) = 1;

else
decis(i) = 0;

end;

Kết thức câu lệnh
điều kiện
Nếu giá trị Y tính
tốn < 0
Thêm vào mảng
decis vị trí 1 giá trị
1
Nếu Y > 0

Thêm vào mảng
decis vị trí i giá trị
0
Kết thúc điều kiện

Nếu temp < ½
nguồn bit ra
bằng 1
Sinh biến ngẫu
nhiên phân bố
gauss (nhiễu)
Đưa ra tín hiệu
sau khi đi qua
kênh AWGN
với mức năng
lượng tương
ứng với bit 1 là
-sqrt(Eb)

Nếu temp > ½
nguồn bit ra
bằng 0
Sinh biến ngẫu
nhiên phân bố
gauss (nhiễu)
Đưa ra tín hiệu
sau khi đi qua
kênh AWGN
với mức năng
lượng tương

ứng với bit 0 là
+sqrt(Eb)

Sau khi đi qua
bộ quyết định
cho ra bit 1

Sau khi tín hiệu
đi qua bộ quyết
định cho ra bit 0


numoferr=sum(decis~=dsource);

Tính tổng số bit
khơng giống nhau
trong 2 mảng decis
và dsource
smld_err_prb(j)= numoferr/NumBits; Đưa giá trị vào
mảng smld_er_prb
tại vị trí j
tElapsed = toc(tStart);
Ngắt chương trình
đếm thời gian chạy
SimTime = max(tElapsed)

close(h);

h1 = figure(1);


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()
ylabel()
Title()
LT = legend(' Mô phỏng ',' Tính
toán');
set(LT,'FontName','.VnTime','FontSi
ze',16);

Tỡm s bit sai
khỏc trong q
trình truyền
nhận
Xác định xác
suất lỗi theo
tính tốn thực tế
Xác định thời
gian chạy mô
phỏng

Đưa ra thời gian
chạy lớn nhất trong

array
Tắt cửa sổ hiển thị
trạng thái chjay
chương trình
Mở cửa sổ mới
Tạo space vẽ đồ
hiển thị kết quả
thị kết quả
Đặt tên cho figure
h1
suplot gồm 2 ô và
chọn ô thứ 1 để
biểu thị kêt quả
Vẽ đồ thị dạng
semilogarithmic

Set độ dày của
đường đồ thị
Gán nhãn cho các
trụng x,y
Đặt tên cho đồ thị
Chú thích đồ thị

Vẽ đồ thị so
sánh giữa BER
theo tính tốn
mơ phỏng và lý
thuyết



AX=gca;

axis([min(SNRindB)
max(SNRindB), 1e-5 0.2]);

grid on
text(2,7e-5,'Mô hình hóa và mô
phỏng',...
'FontName','.VnTimeh','Color','b','Fo
ntSize',14);
text(0.5,min(theo_Antipodal_err_prb
),'Tính chính xác của kết quả mô
phỏng, xác nhận và phê chuẩn mô
hình',...

Tr về giá trị trục
hiện tại của đồ thị
với hàm gca
Chia lại trục , Giới
hạn đồ thị vẽ trong
khoảng từ
minSNRindB và
maxSNRindB, trục
y từ 1e^-5 tới 0.2
Bật lưới
Thêm chú thích
cho đồ thị

Thêm chú thích
cho đồ thị


'FontName','.VnTimeh','Color','r','Fo
ntSize',9.9)
G=
Vẽ đồ thị dạng
semilogy(SNRindB,theo_Orthogonal semilogarith
_err_prb,'vr',SNRindB,theo_Antipodal_err_prb
,'-ob');
set(G,'LineWidth',[1.5]);
xlabel('SNR
[dB]','FontName','.VnTime','color','b',
'FontSize',12);

Set độ dày ca
ng th
t tờn cho trc Ox

ylabel('Xác suất lỗi
t label cho trc
Pe','FontName','.VnTime','color','b','F Oy
ontSize',18);
title('So sánh xác suất lỗi bit hệ
thống BPSK trực giao và đối cực
trong kênh AWGN',...

t tờn cho thị

Mơ phỏng BER
theo trực giao
và đối cực theo

cơng thức tính
tốn lý thuyết


'FontName','.VnTime','color','b','Font
Size',15);

Đặt chú thích cho
đồ thị

Hỗ trợ hiển thị
đồ thị

set(LT,'FontName','.VnTime','FontSi
ze',16,'fontweight','normal','fontAngl
e','normal');

Set font chữ, màu
cho chú thích

Hỗ trợ hiển thị
đồ thị

AX = gca;

Đặt lại trục tọa độ

set(AX,'FontSize',14);

Đặt font và cỡ chữ

cho AX
Chia lại trục , Giới
hạn đồ thị vẽ trong
khoảng từ
minSNRindB và
maxSNRindB, trục
y từ 1e^-5 tới 0.2
Vẽ lưới hiện thị
phía dưới đồ thị

Hỗ trợ hiển thị
đồ thị
Hỗ trợ hiển thị
đồ thị
Hỗ trợ hiển thị
đồ thị

LT = legend(' Trùc giao','
cùc');

axis([min(SNRindB)
max(SNRindB), 1e-5 0.2]);

grid on;

Kết quả mơ phỏng

§èi

Hỗ trợ hiển thị

đồ thị


- Nhận xét:
o Ở đồ thị BER trong kênh BPSK theo tính tốn mơ phỏng và theo cơng
thức lý thuyết đối cực(đồ thị phía bên phải) xác suất lỗi gần tương
đương nhau tại mọi SNR.
o Ở đồ thị so sánh BER hệ thống BPSK trong kênh AWGN ở tín hiệu
đối cực và trực giao thấy xác suất lỗi ơ cùng một tỉ lệ SNR xác suất
lỗi của tín hiệu trực giao lớn hơn khá nhiều.
- Mô phỏng khi tăng số bit vào lên 10^8

Bài 3_1 Sim_FWC_03_01_COV_Encoder_Decoder.m

Câu lệnh
clc; clear; close all;

k0

=1

Giải thích
Clear tất cả các
cửa sổ, thành
phần trong
command
window
Đặt giá trị k0 =
1


G = [1 1 1 1 0 0 1;1 0 1 1 0 1 0];

Khởi tạo ma
trận G

InfoBitLen = 20;

Tạo biến
InfoBitlen

Ý nghĩa
Khởi tạo môi
trường chạy
mô phỏng

Nhập giá trị k
cho bộ mã
hóa (số bit
dịch vào bộ
lập mã)
Nhập ma trận
G cho bộ mã
hóa


iput= randi(1,InfoBitLen,2);
d_Haming= 30;

Encoder_output=FWC_COV_Encoder(G,k
0,iput);


MF1=round(length(Encoder_output)/d_Ha
ming);
error_index=MF1:MF1/2:length(Encoder_o
utput);

error_vector(error_index)= 1;

Random chuỗi
bit vào
Khởi tạo giá trị
d hamming =
30
Sử dụng hàm
Mã hóa xoắn
FWC_COV_E chuỗi bit theo
ncode tạo
lý thuyết
chuỗi bit đầu ra
sau kho mã hóa
Tính giá trị
MF1
Sinh vecto lỗi
chiều dài bằng
chiều dài bit
sau mã hóa
Tạo Vector
error tại error
index có giá trị
1


Tạo vecto lỗi
chiều dài
bằng vecto
tín hiệu sau
khi mã hóa.
tại những bị
trí error index
có giá trị
bằng 1
channel_out=xor(Encoder_output,error_vec Thực hiện phép Đầu ra của
tor);
toán logic
kênh truyền
XOR giữa
encode output
và vecto lỗi
decoder_output=FWC_COV_Dencoder(G,k Sử dụng hàm
Giải mã xoắn
0,channel_out);
fwc_cov
dencoder để
giải mã
disp('==========Cac ket
Hiển thị các
qua:===================');
kết quả
iput
In các giá trị
Encoder_output

trên ra cửa sổ
error_vector
command
window
channel_out


d_Haming
decoder_output

errors=sum(decoder_output~=iput)

Sủ dujgn hàm
sum tính tổng
sự khác nhau
giữa hai biến
decoder_output
và iput

BER = errors/length(iput)

Tính tổng sự
sai khác bit
giữa bit vào
và bit ra sau
khi giải mã
Tính tỉ lệ lỗi
bit

disp('d_Haming/length(channel_out):t_corr

= ')

Hiển thị giá trị
kết quả

Hiển thị kết
quả

t_corr = d_Haming/length(channel_out)

Tính giá trị t
corr

Giá trị sai
khác giữa bit
thơng tin và
bit ra sau khi
có vector lỗi
tác động

Sim_FWC_03_02_BPSK_AWGN_ChannelCode.m
- Giải thích câu lệnh chương trình
Câu lệnh
clc;
clear all;
close all;

SNRindB

SNR


= 0:1:9;

= 10.^(SNRindB/10);

Giải thích
Clear cửa sổ lệnh
Command
window và tắt các
cửa sổ mơ phrong
khác
Tạo vecto
SNRindB từ 0-9
cách nhau 1
Tính giá trị SNR

Ý nghĩa
Chuẩn bị
môi trường
chạy mô
phỏng
Sinh giá trị
SNR
Chuyển đổi
giá trị dB
sang SNR


Eb


sgma
Block_size

= 1;

Set Eb = 1

= Eb./sqrt(2*SNR);

Tính giá trị sgma

Năng
luwojgn bit
=1
Tính phương
sai

= 10^2;

Set giá trị
Blocksize = 10^2
Num_Block
= 200;
Set giá trị
Num_block = 200
NumBits
= Num_Block*Block_size; Tính Numbits

mode_Sim
Codding_Type


Tính số
lượng bit
đưa vào 1
lần tính tốn
set modeSim = 2
Xác định chế
độ mô phỏng
Set codding type = Xác định chế
2
độ mã hóa
Nếu chế độ mã
Cài đặt biến
hóa = 2 thực hiện cần trong
xét điều kiện theo tiến hành mơ
các điều kiện mã
phrong
hóa bên dưới

= 2;
= 2;

if mode_Sim ==2
if Codding_Type == 1
k0
= 1;
G
= [1 1 1; 1 0 1];
GT
= 1;


elseif Codding_Type == 2
Codding type ==2
k0
= 1;
chọn các hệ số
G
= [1 1 1 1 0 0 1; 1 0 1 1 0 1 0]; k0,G,GT khác
GT
= 2;

Cài đặt biến
cần trong
tiến hành mô
phrong

else

Codding type
chọn các hệ số
k0,G,GT khác

Cài đặt biến
cần trong
tiến hành mơ
phrong

Tính giá trị theo
Antodopal err prb


Tính tỉ lệ lỗi
bit theo trực
giao tính
theo cơng
thức lý
thuyết

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];
GT
= 3;
theo_Antipodal_err_prb
*erfc(sqrt(SNR));

= 0.5


h = waitbar(0,'Please wait...');

tic
for j=1:length(SNR)
Start_sim = tic;

waitbar(j/length(SNRindB));

numoferr_tot
= 0;

for k=1:Num_Block
dsource_1=
0.5*(sign(rand(1,Block_size)-0.5)+1);
if mode_Sim ==2
dsource =
FWC_COV_Encoder(G,k0,dsource_1);

else

Khởi động waitbar
biểu diễn tiến trình
chạu chương trình
Bắt đầu đếm thời
gian
Duyệt qua các giá
trị SNR
Gán giá trị
Xác định
Startsim = tic
thời gian bắt
đầu mô
phỏng
Chia waitbar ra
thành các phần khi
chạy mô phỏng
hết 1 tiến trình sẽ
dịch một khaorng
nhất định
Lặp từ 1 tới số
lượng NumBlock

Tạo nguồn
dsource ngẫu
nhiên bằng
Xác định
mode_sim

Mode sim khác 2
dsource

numoferr_block

= dsource_1;
= 0;

for i = 1:length(dsource)

if dsource(i)==1,
X
= sgma(j)*randn(1);
Y
= -sqrt(Eb) + X;

Set
numoferr_block =
0
Duyệt qua các
phần tử của
dsource
Nếu phần tử thứ I
của vecto dsource

== 1 thực hiện gán
các biến dưới đây

Tạo nguồn
bit ngẫu
nhiên
Nếu
modeSim ==
2 dsource sẽ
được mã hóa
xoắn
Dsource
khơng được
mã hóa

Nếu dsource
==1 tính giá
trị X là biến
ngẫu nhiên


else
X
Y
end

= sgma(j)*randn(1);
= sqrt(Eb) + X;

if (Y<0)

decis(i) = 1;

else
decis(i) = 0;

if mode_Sim==2
decoder_output =
FWC_COV_Dencoder(G,k0,decis);

else
decoder_output = decis;
numoferr_tot =
sum(decoder_output~=dsource_1)+
numoferr_tot;

phân bố
gauss và giá
trị Y là tín
hiệu sau khi
đi qua kênh
truyền
Nếu phần tử thứ I Nếu dsource
của vecto dsource khác 1 tính
khác 1 thực hiện
giá trị X là
gán các biến dưới biến ngẫu
đây
nhiên phân
bố gauss và
giá trị Y là

tín hiệu sau
khi đi qua
kênh truyền
Nếu Y < 0
Nếu giá trị Y
< 0 quyết
định bit thứ i
nhận được là
1
Nếu Y >=0
Nếu Y>= 0
quyết định
giá trị bit tới
thứ i là 0
Nếu mode Sim == Nếu mode
2 gán giá trị
sim =2 thực
decoder_output
hiện giải mã
bằng hàm dưới
xoắn với
chuỗi bit
dcis nhận
được
Nếu không
Bit nhận
được chính
là decis
Tính tổng số
Tính số lỗi

lượng các sai khác khi giữa
giữa dcoderoutput chuỗi bit
và dsource 1
truyền và
nhận


Tính giá trị và đưa
vào một mảng
smld er prb
Dừng thời gian
mơ phỏng
Gán SimTime
bằng giá trị max
của Sim_elapsed
Xác định mode
sim

Tính tỉ lệ lỗi
bit

else
if Codding_Type==1
save
Sim_FWC_02_02_BER_BPSK_AWGN
_NCC_G1.mat;

Xác định kiểu
Codding


Xác định
mode sim và
codding type
để lưu kết
quả

elseif Codding_Type==2
save
Sim_FWC_02_02_BER_BPSK_AWGN
_NCC_G2.mat;

Xác định kiểu
Codding

else

Xác định kiểu
Codding

Xác định
mode sim và
codding type
để lưu kết
quả
Xác định
mode sim và
codding type
để lưu kết
quả


smld_err_prb(j) =
numoferr_tot/NumBits;
Sim_Elapsed = toc(Start_sim);
SimTime = max(Sim_Elapsed);

if mode_Sim==1
save
Sim_FWC_02_02_BER_BPSK_AWGN
_NoCC.mat;

save
Sim_FWC_02_02_BER_BPSK_AWGN
_NCC_G3.mat;
end
h1 = figure(1);

set(h1,'Name',' Programmed by Nguyen
Viet Dam PTIT: 07-2007');
G = semilogy(SNRindB,smld_err_prb,'vr',SNRindB,theo_Antipodal_err_prb,'ob');

Bắt đầu mở cửa
sổ hiển thị kết quả
mô phỏng
Đặt tên cho cửa sổ
vừa mở

Xác định
mode sim để
lưu kết quả


Hiển thị kết
quả
Hiển thị kết
quả

Vẽ đồ thị dạng
Hiển thị kết
semilogarithmic
quả
với giá trị xét theo
lượng lỗi bit theo
tính tốn và lý
thuyết


set(G,'LineWidth',1.5);

Set giá trị của
đường đồ thị

AX = gca;
xlabel()
ylabel()
grid on;
axis([min(SNRindB)
max(SNRindB), 1e-5 1]);

Hiển thị kết
quả
Hiển thị kết

quả

Đặt chú thích cho
trục Oy đồ thị
Đặt chú thích cho
trục Oy đồ thị
Bật đường lưới
dưới đồ thị
Chia lại giá trị trục
tọa độ Ox, Oy
theo SNR và Pe

A. Sub Function FWC_COV_Encoder & FWC_COV_Dencoder
- FWC_COV_Encoder:
Câu lệnh
Giải thích
Ý nghĩa
function output =
Tạo một hàm có tên là Tạo hàm
FWC_COV_Encoder(g,k0,input)
FWC_COV_Encoder() mã hóa để
gọi ở các
file khác
if rem(length(input),k0) > 0
Kiểm tra xem có cầm
bit 0 thêm là cần thiết
input = [input,zeros(size(1:k0Thêm bit 0 vào chuỗi
rem(length(input),k0)))];
bit vào
n =length(input)/k0;


Tính giá trị n

if rem(size(g,2),k0) > 0

Kiểm tra hàm
rem(sizeg,2)

error('Error, g is not of the right size.');

Đưa ra lỗi

Kiểm tra
kích thước
ma trận g


l = size(g,2)/k0;

Xác định giá trị l

n0 = size(g,1);

Xác định giá trị n0

u = [zeros(size(1:(l1)*k0)),input,zeros(size(1:(l-1)*k0))];

Thêm các số 0 phụ

u1 = u(l*k0:-1:1);


Xác định giá trị u1

for i=1:n+l-2
u1

= [u1,u((i+l)*k0:-1:i*k0+1)];

uu=reshape(u1,l*k0,n+l-1);

Tạo ma trận u

output =
reshape(rem(g*uu,2),1,n0*(l+n-1));

Đưa ra đầu ra

B. Kết quả mô phỏng Trường hợp 1:

Tạo ma
trận uu có
các cột là
nội dung
của conv
Đầu ra là
mã xoắn





×