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