GIẢI THÍCH code MATLAB thầy N.V.Đảm
Trang 1BÀI 1_1:PSD Base_band and Passband(Sim_FWC_01_1)
command window
minh họa cho chương trình
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ố
SD_PassBand=(AA/4)*((sinc(
(f+fc)*
Tính mật độ phổ công suất của BPSK
Trang 2inc((f+
fc)*Tb)).^2 );
Thành phần mật độ phổ công suất của BPSK
hiện tại
Trang 3neWidth',3);
Tạo bản đồ cành của tần số, PSD của thành phần trong BPSK
Trang 5BÀI 1_2: Mô phỏng PSD_Modulation(SIM_FWC_01_2)
a, Chương trình:
f = linspace(-2000,2000,1500); Khởi tạo tập giá trị
f có giá trị từ -2000 tới 2000 trong đó gồm 1500 giá trị
Thiết lập tập giá trị input cho quá trình mô phỏng
Tb = 0.002 Khởi tạo giá trị chu
AA = A^2*Tb; Khởi tạo biến AA
sóng mang
1 2 3 4
-2000 -10000 0 1000 2000 2
Trang 6Eb = P*Tb; Khởi tạo biến Eb
năng lượng bit phát
PSD_BaseBand =
AA*(sinc((f*Tb)).^2);
Thiết lập công thức 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
Khảo sát phổ công suất của tín hiệu băng gốc
PSD_BPSK =
(Eb*log2(2))*((sinc((f-fc)*Tb*log2(2))).^2);
Thiết lập hàm tính PSD của từng phương pháp điều chế BPSK theo 1 bên dựa trên lý thuyết
Khảo sát phổ công suất của tín hiệu điều chế BPSK
PSD_QPSK =
(Eb*log2(4))*((sinc((f-fc)*Tb*log2(4))).^2);
Thiết lập hàm tính PSD của từng phương pháp điều chế QPSK theo 1 bên dựa trên lý thuyết
Khảo sát phổ công suất của tín hiệu điều chế QPSK
PSD_8_PSK =
(Eb*log2(8))*((sinc((f-fc)*Tb*log2(8))).^2);
Thiết lập hàm tính 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
Khảo sát phổ công suất của tín hiệu điều chế 8-PSK
Khảo sát phổ công suất của tín hiệu điều chế BPSK
Trang 7SF = ((16*Eb)/(pi^2));
Tạo biến SF 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
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
Num_2 = (cos(2*pi*(f+fc)*Tb)); Tạo biến Num_2
có giá trị được tính bằng biểu thức bên phải
Thiết lập giá trị cho phía còn lại của MSK
Dum_2 = (16*(Tb^2)*(f+fc).^2)-1; Tạo biến Dum-2 có
giá trị được tính bằng biểu thức bên phải
PSD_MSK_2 =
(SF/2)*(((Num./Dum).^2) +
((Num_2./Dum_2).^2));
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
Biểu diễn mật độ phổ PSD-MSK 2 side trên trục Ox
đồ thị
một ma trận 2x1 và chọn hang thứ 1 để biểu diễn kết quả
plot(f,PSD_BaseBand, 'b' , 'LineWidth' ,3 Biểu diễn kết quả
của các phổ PSD lên đồ thị các điểm
Trang 8giá trị được nối liền với nhau
Ox, chọn màu sắc chữ, font, size
Oy, chọn màu sắc chữ, font, size
subplot
tại nguyên subplot
đó
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
M« pháng TÝnh to¸n
Trang 9SNRindB = 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 :
command
Khởi tạo môi trường chạy chương trình
phần khỏi workspace, giải phóng bộ nhớ
Khởi tạo môi trường chạy chương trình
hiển thị kết quả mô phỏng hiện tại
Chuẩn bị môi trường để chạy chương trình
SNRindB = 0:1:9; Khởi tạo một vecto
giá trị từ 0-9 cách nhau 1 đơn vị
Sinh tỉ lệ tín hiệu trên nhiễu
ở đơn vị dB
SNR=10.^(SNRindB/10); Khởi tạo biến SNR
có giá trị bằng kết quả của biểu thức bên phải
Xác định phương sai
Trang 10theo_Antipodal_err_prb = 0.5
*erfc(sqrt(SNR));
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 = waitbar(0, 'Please
Hiển thị cửa sổ hiện % chương trình hoàn thành
Hỗ trợ quá trình
mô phỏng
làm mốc để xác định thời gian chạy
mô phỏng
Bắt đầu khảo sát thời gian chạy mô phỏng
for j=1:length(SNR) Khởi tạo vòng lặp Lặp n lần với n
là độ dài của vecto SNR
gian chạy từ hiện tại
Tính toán thời gian chạy chương trình
waitbar(j/length(SNRindB)); Tính toán của sổ
hiển thị chương trình đã chạy được bao nhiêu %
Tạo nguồn bit ngẫu nhiên
Bắt đầu tạo nguồn nhị phân
giá trị random từ
0-1
if (temp<0.5), Nếu giá trị temp <
0.5
Trang 11dsource(i) =1; Đưa vào mảng tại
index i giá trị 1
Nếu temp < ½ nguồn bit ra bằng 1
X = sgma(j)*randn(1); Khởi tạo Biến X Sinh biến ngẫu
nhiên phân bố gauss (nhiễu)
Y= -sqrt(Eb) + X; Khởi tạo Biến Y Đư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)
X = sgma(j)*randn(1); Khởi tạo Biến X Sinh biến ngẫu
nhiên phân bố gauss (nhiễu)
Y = sqrt(Eb) + X; Khởi tạo Biến Y Đư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)
decis vị trí i giá trị
0
Sau khi tín hiệu
đi qua bộ quyết định cho ra bit 0
Trang 12smld_err_prb(j)= numoferr/NumBits; Đưa giá trị vào
mảng smld_er_prb tại vị trí j
Xác định xác suất lỗi theo tính toán thực tế
tElapsed = toc(tStart); Ngắt chương trình
đếm thời gian chạy
Xác định thời gian chạy mô phỏng
SimTime = max(tElapsed) Đưa ra thời gian
chạy lớn nhất trong array
trạng thái chjay chương trình
hiển thị kết quả
Tạo space vẽ đồ thị kết quả set(h1, ‘Name’,
Vẽ đồ thị so sánh giữa BER theo tính toán
mô phỏng và lý thuyết
set(G, 'LineWidth' ,[1.5]); Set độ dày của
đường đồ thị
Xlabel()
ylabel()
Gán nhãn cho các trụng x,y
Trang 13minSNRindB và maxSNRindB, trục
Mô phỏng BER theo trực giao
và đối cực theo công thức tính toán lý thuyết
set(G, 'LineWidth' ,[1.5]); Set độ dày của
ylabel( 'X¸c suÊt lçi
Trang 14set(LT, 'FontName' , '.VnTime' , 'FontSi
minSNRindB và maxSNRindB, trục
Trang 15- Nhận xét:
o Ở đồ thị BER trong kênh BPSK theo tính toá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
clc; clear; close all ; Clear tất cả các
cửa sổ, thành phần trong command window
Khởi tạo môi trường chạy
mô phỏng
1
Nhập giá trị k cho bộ mã hóa (số bit dịch vào bộ lập mã)
G = [1 1 1 1 0 0 1;1 0 1 1 0 1 0]; Khởi tạo ma
trận G
Nhập ma trận
G cho bộ mã hóa
InfoBitlen
Trang 16iput= randi(1,InfoBitLen,2); Random chuỗi
Mã hóa xoắn chuỗi bit theo
lý thuyết
MF1=round(length(Encoder_output)/d_Ha
ming);
Tính giá trị MF1
error_index=MF1:MF1/2:length(Encoder_o
utput);
Sinh vecto lỗi chiều dài bằng chiều dài bit sau mã hóa
error_vector(error_index)= 1; 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
tor);
Thực hiện phép toán logic XOR giữa encode output
và vecto lỗi
Đầu ra của kênh truyền
decoder_output=FWC_COV_Dencoder(G,k
0,channel_out);
Sử dụng hàm fwc_cov dencoder để giải mã
Giải mã xoắn
disp( '==========Cac ket
Hiển thị các kết quả
Trang 17và iput
Tính tổng sự sai khác bit giữa bit vào
và bit ra sau khi giải mã
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
clc;
clear all;
close all;
Clear cửa sổ lệnh Command
window và tắt các cửa sổ mô phrong khác
Chuẩn bị môi trường chạy mô phỏng
SNRindB = 0:1:9; Tạo vecto
SNRindB từ 0-9 cách nhau 1
Sinh giá trị SNR
SNR = 10.^(SNRindB/10); Tính giá trị SNR Chuyển đổi
giá trị dB sang SNR
Trang 18mode_Sim = 2; set modeSim = 2 Xác định chế
Cài đặt biến cần trong tiến hành mô phrong
Cài đặt biến cần trong tiến hành mô phrong
Cài đặt biến cần trong tiến hành mô phrong
theo_Antipodal_err_prb = 0.5
*erfc(sqrt(SNR));
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
Trang 19h = waitbar(0, 'Please wait ' ); Khởi động waitbar
biểu diễn tiến trình chạu chương trình
waitbar(j/length(SNRindB)); 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
Tạo nguồn bit ngẫu nhiên
if mode_Sim ==2
dsource =
FWC_COV_Encoder(G,k0,dsource_1);
Xác định mode_sim
Nếu modeSim ==
2 dsource sẽ được mã hóa xoắn
if dsource(i)==1,
X = sgma(j)*randn(1);
Y = -sqrt(Eb) + X;
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
Nếu dsource
==1 tính giá trị X là biến ngẫu nhiên
Trang 20phân bố gauss và giá trị Y là tín hiệu sau khi
đi qua kênh truyền
Nếu dsource khác 1 tính giá trị X là biến ngẫu nhiên phân
bố gauss và giá trị Y là tín hiệu sau khi đi qua kênh truyền
if (Y<0)
decis(i) = 1;
Nếu Y < 0 Nếu giá trị Y
< 0 quyết định bit thứ i nhận được là
Nếu mode sim =2 thực hiện giải mã xoắn với chuỗi bit dcis nhận được
và dsource 1
Tính số lỗi khi giữa chuỗi bit truyền và nhận
Trang 21smld_err_prb(j) =
numoferr_tot/NumBits;
Tính giá trị và đưa vào một mảng smld er prb
Tính tỉ lệ lỗi bit
Sim_Elapsed = toc(Start_sim); Dừng thời gian
mô phỏng
SimTime = max(Sim_Elapsed); Gán SimTime
bằng giá trị max của Sim_elapsed
Xác định mode sim để lưu kết quả
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ả
Xác định mode sim và codding type
để lưu kết quả
sổ hiển thị kết quả
mô phỏng
Hiển thị kết quả
set(h1, 'Name' , ' Programmed by Nguyen
Đặt tên cho cửa sổ vừa mở
Hiển thị kết quả
G = semilogy(SNRindB,smld_err_prb,
'-vr' ,SNRindB,theo_Antipodal_err_prb,
Vẽ đồ thị dạng semilogarithmic với giá trị xét theo lượng lỗi bit theo tính toán và lý thuyết
Hiển thị kết quả
Trang 22set(G, 'LineWidth' ,1.5); Set giá trị của
đường đồ thị
Hiển thị kết quả
Tạo hàm
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
ma trận g
error( 'Error, g is not of the right size.' ); Đưa ra lỗi
Trang 26C Kết quả mô phỏng trường hợp 2:
- Coding_type == 1, mode_sim = 2
Trang 27- Coding_type = 2, mode_sim = 2
- Nhận xét:
o Khi ta thực hiện thêm mã hóa kênh vào kênh hệ thống BPSK có thể
thấy rõ cùng một tỉ số SNR xác suất lỗi Pe của hệ thống có sử dụng
mã hóa kênh sẽ thấp hơn nhiều với không sử dụng mã hóa kênh
o Ở trường hợp Coding_type = 2 khi ta tăng đa thức tạo mã G và vẫn
giữ nguyên k0 => chất lượng việc mã hóa nguồn không tốt
o Khi ta tăng sô lượng bit đầu vào k0 trong một lần và tăng bậc và số
lượng đa thức tạo mã G => tỉ lệ SNR tăng
o Luồng bit ra có tốc độ cao => tăng độ rộng băng tần => giảm hiệu quả
sử dụng phổ tần