Hiển thị các bài đăng có nhãn Chap 5. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Chap 5. Hiển thị tất cả bài đăng

Chủ Nhật, 12 tháng 7, 2020

5.1 Mô phỏng kênh thông tin - Kênh truyền nhị phân

Đề bài: Tạo chuỗi bit và truyền qua kênh truyền nhị phân với xác suất sai là 10%

Giải: Chúng ta có xác suất sai là 10% nghĩa là p = 0,1. Sử dụng hàm bsc(), chúng ta có mã nguồn Matlab như sau:

==================== CODE MATLAB ====================

% Chieu dai chuoi bit
N = 10^2;

% Tao tin hieu vao là mot vector 1 dòng và N cot
Tx = randi([0 1],1,N);

% Xac suat sai
p = 0.1;

% Tin hieu sau kenh truyen nhi phan
Rx = bsc(Tx,p);

% Tinh lai xác suat loi và so voi p. 
sum(Tx~=Rx)/N

==================== KẾT QUẢ====================




5.2 Mô phỏng kênh thông tin - Kênh truyền nhị phân

Đề bài: Hãy tạo kênh truyền bsc() bằng hàm randsrc().

Giải: Chúng ta sử dụng hàm randsrc() để tạo ra nguồn có số lượng bit ‘1’ theo xác suất và thực hiện phép xor tín hiệu nhận được với tín hiệu vào kênh truyền. Có một cách làm khác là dùng phép đảo các bit thay cho phép xor và sẽ đạt được kết quả tương tự như phép xor.

==================== CODE MATLAB ====================

% Chieu dai chuoi bit
N = 10^6;

% Tao tin hieu vao
Tx = randi([0 1],1,N);

% Xac suat sai
p = 0.1;

% Su dung randsrc()
I = randsrc(1,N,[1 0; p 1-p]);
Rx = xor(Tx,I);

% Tính lai xác suat loi và so voi p. 
sum(Tx~=Rx)/N

% Su dung hàm bsc()
Rx = bsc(Tx,p);

% Tinh lai xac suat loi và so voi p. 
sum(Tx~=Rx)/N

==================== KẾT QUẢ====================

5.3 Mô phỏng kênh thông tin - Kênh nhiễu trắng

Đề bài: Tạo tín hiệu sin trong 2 chu kỳ và cộng nhiễu trắng có cùng công suất dùng hàm awgn().

Giải: Một điểm quan trọng cần chú ý là do tín hiệu sin của chúng ta tạo ra có công suất khác 0 dBW, nên chúng ta phải khai báo tham số “measured” khi sử dụng hàm awgn() để công suất nhiễu cộng vào là phù hợp. 


==================== CODE MATLAB ====================

t = (0:0.1:4*pi)';
x = sin(t);
y = awgn(x,0,'measured');
plot(t,[x y])
legend('Tin hieu goc','Tin hieu cang nhieu')
set(gcf,'color','white');

==================== KẾT QUẢ====================

Hình 5.1: Hình vẽ tín hiệu trước và sau khi cộng nhiễu 


5.4 Mô phỏng kênh thông tin - Kênh nhiễu trắng

Đề bài: Tạo tín hiệu điều chế MQAM với M = 16, cộng nhiễu trắng với tỷ số tín hiệu trên nhiễu là 10 dB. So sánh công suất tín hiệu trước và sau khi cộng nhiễu. Xem xét hai trường hợp:
            a. Không chuẩn hóa công suất tín hiệu điều chế.
            b. Chuẩn hóa công suất tín hiệu điều chế.

Giải: Trong bài 5.4, chúng ta dùng hàm qammod() và qamdemod() để thực hiện điều chế và giải điều chế MQAM. Để thực hiện chuẩn hóa và không chuẩn hóa tín hiệu, chúng ta lưu ý tham số 'UnitAveragePower' là ‘true’ hay ‘false’ của hàm qammod().

==================== CODE MATLAB ====================

% Chieu dài mau thu
N = 10^6;
% Dieu che 16-QAM
M = 16;
x = randi([0 M-1],1,N);
% Ty so tin hieu tren nhieu 10 dB
SNRdB = 10;

% Truong hop 1: Khong chuan hoa cong suat tin hieu dieu che
Tx = qammod(x,M,'UnitAveragePower', false);
% Cong nhieu vào tin hieu
Rx = awgn(Tx,10,'measured');
% Cong suat tin hieu truoc khi cong nhieu
var(Tx)p
% Cong suat tin hieu sau khi cong nhieu
var(Rx)

% Truong hop 2: Chuan hoa cong suat tin hieu dieu che
Tx = qammod(x,M,'UnitAveragePower', true);
% Cong nhieu vào tin hieu
Rx = awgn(Tx,10);
% Cong suat tin hieu truoc khi cong nhieu
var(Tx)
% Cong suat tin hieu sau khi cong nhieu
var(Rx)

==================== KẾT QUẢ====================


5.5 Mô phỏng kênh thông tin - Kênh nhiễu trắng

Đề tài: Tạo tín hiệu điều chế MQAM với M = 16, cộng nhiễu với tỷ số tín hiệu trên nhiễu là 10 dB
không dùng hàm awgn(). So sánh công suất tín hiệu trước và sau khi cộng nhiễu.


Giải: Một lưu ý quan trọng khi thực hiện mô phỏng kênh truyền nhiễu trắng là do nhiễu
trắng có phần thực và phần ảo nên công suất nhiễu được chia ra làm hai phần, dẫn đến biên
độ của phần thực và phần ảo phải nhân với hệ số 
 .

==================== CODE MATLAB ====================

% VD 5.4
N = 10^6;
M = 16;
x = randi([0 M-1],1,N);

% Ty so tin hieu trên nhieu 
SNRdB = 10;

% Dieu che tin hieu co chuan hoa cong suat
Tx = qammod(x,M,'UnitAveragePower', true);

% Chuyen doi SNR theo dB thành SNR
SNR = 10^(SNRdB/10);

% Cong suat nhieu
nP = 1./SNR;

% Tao nhieu
aN = sqrt(nP/2).*(randn(size(Tx)) + 1j*randn(size(Tx)));

% Cong nhieu vào tín hi?u
Rx = Tx + aN;

% Cong suat tin hieu truoc khi cong nhieu
var(Tx)

% Cong suat tin hieu sau khi cong nhieu
var(Rx)

==================== KẾT QUẢ====================


5.6 Mô phỏng kênh thông tin - Kênh nhiễu trắng

Đề bài: Hãy mô phỏng kênh truyền nhiễu trắng cho điều chế BPSK từ 0 đến 10 dB.
            a. Vẽ đồ thị tỷ lệ lỗi bit cho điều chế BPSK.
            b. So sánh với xác suất lỗi bit cho điều chế BPSK.

Giải: Chúng ta biết rằng tỷ lệ lỗi bit của điều chế BPSK ở kênh truyền nhiễu trắng là  với  là tỷ số tín hiệu trên nhiễu. Điểm đặc biệt của chương trình Matlab của bài 5.6 bên dưới là:

  • Không dùng vòng lặp for và chỉ xử lý trên ma trận
  • Số lượng bit chạy là 1 triệu bit trên một điểm chạy.
  • Không sử dụng hàm điều chế/giải điều chế của Matlab.
Để tính toán tỷ lệ lỗi bit lý thuyết để so sánh, chúng ta sử dụng hàm qfunc().

==================== CODE MATLAB ====================

 clear all
clc
%
SNRdB = (0:1:10)';
N = 10^6;
M = 2;
% Tao ra du lieu phan bo deu co so hang là bang voi so diem mo phong và so
% cot là so mau thu
x = randi([0 M-1],length(SNRdB),N);
% Dieu che: thuc hien ánh xa bit '1' là -1 và bit '0' là 1
xM = [1  -1];
Tx = xM(x + 1);

% Ty so tin hieu tren nhieu: chuyen doi tu dB sang so thuc
SNR = 10.^(SNRdB/10);

% Cong suat nhieu voi cong suat tin hieu bang 1W
nP = 1./SNR;

% Tao nhieu trang cong
aN = sqrt(nP/2).*(randn(size(Tx)) + 1i*randn(size(Tx)));
% Cong nhieu vao tin hieu
Rx = Tx + aN;

% Giai dieu che: Gia su vung quyet dinh cua bit 1 là nua trai khong gian và bit 0 là nua phai không gian.
x_ = 0.* (real(Rx) > 0) + 1.*(real(Rx) <= 0);

% Tính ty le loi bit
BER_s = sum(x_~=x,2)/N;

% BER ly thuyet
BER_t = qfunc(sqrt(2*SNR));

% Ve do thi BER
semilogy(SNRdB,BER_s,'s',SNRdB,BER_t);
legend('Mo phong','Ly thuyet');
xlabel('SNR theo dB');
ylabel('Ty le loi bit');
set(gcf,'color','white');

Hình 5.2: Tỷ lệ lỗi bit của điều chế BPSK ở kênh truyền nhiễu trắng: mô phỏng và lý thuyết.  

 

5.7 Mô phỏng kênh thông tin - Kênh truyền log-normal

Đề bài: Hãy mô phỏng và so sánh với lý thuyết xác suất dừng của hệ thống trên kênh truyền lognormal

Giải: Để tạo ra công suất thu thay đổi theo phân bố log-normal, chúng ta dùng hàm lognrnd() của Matlab. Tuy nhiên, hàm lognrnd() của Matlab có hàm PDF được định nghĩa khác so với hàm PDF của tỷ số tín hiệu trên nhiễu ở công thức (5.1) trong sách "Mô phỏng hệ thống truyền thông" của PGS.TS. Võ Nguyễn Quốc Bảo. Cụ thể, nếu biến ngẫu nhiên x có phân bố log-normal được tạo từ hàm lognrnd(), thì hàm PDF của x có dạng như sau:
Hay nói cách khác, ta có mối liên hệ sau: 

==================== CODE MATLAB ====================


clear all
clc

% Cong suat cua may phat
EbNo = (0:2:20)';   
P = 10.^(EbNo/10);  

% Toc do truyen mong muon
R = 2;    
% Nguong SNR
GT = 2.^(R) - 1;  
% Tinh toon thong so
xi = 10/log(10);
mu = 10^(3/10);  
sigma = 10^(8/10); 

% Mo phong
N = 10^6;
% Ty so tin hieu tren nhieu
G = P.*lognrnd(mu./xi,sigma./xi,1,N);

% Tinh xac suat dung
OP_s = sum(G < GT,2)/N;

% Ly thuyet
OP_t = qfunc((mu -10*log10(GT./P))./sigma);

% Ve do thi
semilogy(EbNo,OP_s,'o',EbNo,OP_t,'-')
xlabel('E_b/N_0 [dB]');
ylabel('Xac suat dung');
legend('Mo phong','Ly thuyet');
set(gcf,'color','white');

Hình 5.3: Xác suất dừng của kênh truyền log normal: mô phỏng và lý thuyết.  


5.8 Mô phỏng kênh thông tin - Kênh fading Rayleigh

Đề bài: Hãy tạo kênh truyền fading Rayleigh theo 3 cách như trên và kiểm chứng với lý thuyết.

Giải: Tùy thuộc vào tham số hiệu năng hay đặc tính hệ thống mà chúng ta cần nghiên cứu cho hệ thống truyền thông, chúng ta sẽ tạo ra hệ số kênh truyền h hay chỉ cần tạo ra độ lợi kênh truyền tức thời 

Cụ thể, ngoại trừ khi cần mô phỏng tỷ lệ lỗi bit hay tỷ lệ lỗi symbol, chúng ta cần phải tạo hệ số kênh truyền h , các tham số hiệu năng khác, ví dụ như xác suất dừng hay dung lượng kênh truyền, chúng ta chỉ cần .
Trong bài 5.8, chúng ta sẽ tạo ra h trong cả ba trường hợp. Điểm cần chú ý khi tạo ra biến ngẫu nhiên là cần chú ý các tham số đầu vào cho các hàm tạo biến ngẫu nhiên cho phù hợp.
Nhắc lại là độ lợi kênh truyền trung bình, ta sẽ có các lưu ý sau: 
  • Cách 1: thành phần thực và thành phần ảo của h trong cách này sẽ có biên độ là  ,
  • Cách 2: |h| có tham số điều chỉnh (scale parameter) là  
  • Cách 3:  có tham số trung bình là vì nếu X là biến ngẫu nhiên hàm mũ có
tham số (rate parameter)  thì  có phân bố Rayleigh với tham số (scale
parameter)  


==================== CODE MATLAB ====================

clear all
clc
SNRdB = (0:3:30)';
SNR = 10.^(SNRdB/10);
lambda_h = 2;
gth = 1;

% Mo phong
N = 10^6;

% Tao he so kenh truyen
% Cach 1
h = sqrt(lambda_h/2).*(randn(1,N) + 1i*randn(1,N));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_1 = sum(g < gth,2)/N;

% Cach 2
h_a = raylrnd(sqrt(lambda_h/2),1,N);
phi = 2*pi*rand(1,N);
h = h_a.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_2 = sum(g < gth,2)/N;

% Cach 3
h_a = sqrt(exprnd(sqrt(2*lambda_h),1,N));
phi = 2*pi*rand(1,N);
h = h_a.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_3 = sum(g < gth,2)/N;

% OP ly thuyet
% Ty so tin hieu trên nhieu trung binh
g_ =  SNR.*lambda_h;
OP_t = 1 - exp(-gth./g_);
% Ve do thi BER
semilogy(SNRdB,OP_1,'o',SNRdB,OP_2,'s',SNRdB,OP_3,'+',SNRdB,OP_t);
legend('Cach 1','Cach 2','Cach 3','Ly thuyet');
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('Xac suat dung');
set(gcf,'color','white');

Hình 5.4: Tạo kênh truyền fading Rayleigh theo ba cách.  


5.9 Mô phỏng kênh thông tin - Kênh fading Nakagami-m

Đề bài: Hãy tạo kênh truyền Nakgami-m từ ba cách và so sánh kết quả với phân tích lý thuyết.

Giải: Chúng ta sẽ sử dụng hàm random() cho cách 1, hàm gamrnd() cho cách 2 và hàm chi2rnd() cho cách 3.

==================== CODE MATLAB ====================
clear all
clc
SNRdB = (0:2:20)';
SNR = 10.^(SNRdB/10);
% Shape parameter
m = 2;
% Scale parameter
Omega = 2;
% SNR nguong
gth = 2;

% Mo phong
N = 10^6;
% Tao he so kênh truy?n
% Cach 1
alpha = random('Nakagami',m,Omega,1,N);
phi = 2*pi*rand(1,N);
h = alpha.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_1 = sum(g < gth,2)/N;

% Cách 2
alpha = sqrt(gamrnd(m,Omega/m,1,N));
phi = 2*pi*rand(1,N);
h = alpha.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_2 = sum(g < gth,2)/N;

% Cách 3
alpha = sqrt(Omega/(2*m)).*sqrt(chi2rnd(2*m,1,N));
phi = 2*pi*rand(1,N);
h = alpha.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_3 = sum(g < gth,2)/N;

% OP lý thuyet
% Ty so tin hieu tren nhieu trung binh
g_ =  SNR.*Omega;
OP_t = 1 - gamma(m).*gammainc(m*gth./g_,m,'upper');

% Ve do thi BER
semilogy(SNRdB,OP_1,'o',SNRdB,OP_2,'s',SNRdB,OP_3,'+',SNRdB,OP_t);
legend('Cach 1','Cach 2','Cach 3','Ly thuyet');
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('Xac suat dung');
set(gcf,'color','white');

Hình 5.5: Mô phỏng kênh truyền fading Nakagami-m theo ba cách.  


5.10 Mô phỏng kênh thông tin - Kênh truyền fading Rician

Đề bài: Mô phỏng kênh truyền fading Rician với hệ số K cho trước bằng hai cách

Giải: Hàm Marcum Q trong Matlab là hàm marcumq(). Mã nguồn Matlab cho kênh Rician là như sau:

==================== CODE MATLAB ====================

clear all
clc
SNRdB = (0:2:20)';
SNR = 10.^(SNRdB/10);
% Shape parameter
K = 5;
% Scale parameter
Omega = 2;

% LoS: A - sigma
v2 = Omega*K/(1 + K);
v = sqrt(v2);

% NLOS - sigma - B
s2 = 1/2*Omega/(1+K);
s = sqrt(s2);

% SNR nguong
gth = 2;

% Mo phong
N = 10^6;

% Tao he so kenh truyen
% Cach 1
alpha = random('Rician',v,s,1,N);
phi = 2*pi*rand(1,N);
h = alpha.*(cos(phi) + 1i*sin(phi));
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_1 = sum(g < gth,2)/N;

% Cách 2
X = v*cos(pi/4) + s.*randn(1,N);
Y = v*sin(pi/4) + s.*randn(1,N);
h = X + 1i*Y;
% Ty so tin hieu tren nhieu
g = SNR.*abs(h).^2;
% Xac suat dung
OP_2 = sum(g < gth,2)/N;

% OP ly thuyet
% Ty so tin hieu tren nhieu trung binh
g_ =  SNR.*Omega;
OP_t = 1 - marcumq(sqrt(2*K),sqrt(2*(1+K)*gth./g_),1);

% Ve do thi BER
semilogy(SNRdB,OP_1,'o',SNRdB,OP_2,'+',SNRdB,OP_t);
legend('Cach 1','Cach 2','Ly thuyet');
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('Xac suat dung');
set(gcf,'color','white');

Hình 5.6: Mô phỏng kênh truyền fading Rician bằng hai cách.  

 

5.11 Mô phỏng kênh thông tin - Kênh truyền tương quan

Đề bài: Hãy lập trình kiểm chứng công thức  ở  (5.20) trong sách "Mô phỏng hệ thống truyền thông" của PGS.TS. Võ Nguyễn Quốc Bảo. 

Giải:
 ==================== CODE MATLAB ====================
clear all
clc
SNRdB = (0:1:5)';
Omega = 2;
SNR = 10.^(SNRdB/10);

% SNR nguong
gth = 2;

% Mo phong
N = 10^6;
rho = 0.7;

% Tao he so kênh truy?n
% Cach 1
h1 = sqrt(Omega/2).*(randn(1,N) + 1i*randn(1,N));
n = sqrt(Omega/2).*(randn(1,N) + 1i*randn(1,N));
h2 = rho.*h1 + sqrt(1 - rho^2).*n;

% Ty so tin hieu tren nhieu
g1 = SNR.*abs(h1).^2;
g2 = SNR.*abs(h2).^2;

% Xac suat dung
gSC = max(g1,g2);
gSC_s = mean(gSC,2);

% Ly thuyet
g_= Omega.*SNR;
gSC_t = g_.*(1 + sqrt(1 - rho.^2)/2);

plot(SNRdB,gSC_s,'o',SNRdB,gSC_t,'-');
legend('Mo phong','Ly thuyet');
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('Ty so tin hieu tren nhieu tuong duong trung bình');
set(gcf,'color','white');

Hình 5.7: Tỷ số tín hiệu trên nhiễu tương đương trung bình của hệ thống SC trên kênh truyền fading Rayleigh tương quan.  


2.16 Tìm giá trị nhỏ nhất và lớn nhất trong ma trận

Cho ma trận X = [1 2 3; 4 5 6; 7 8 9]. Hãy a. Tìm giá trị lớn nhất và giá trị nhỏ nhất theo hàng. b. Tìm giá trị lớn nhất và nhỏ nhất theo...