Thứ Bảy, 11 tháng 7, 2020

4.4 Phương pháp chấp nhận - loại trừ (Acceptance - Rejection technique)

Tạo biến ngẫu nhiên rời rạc có giá trị từ 1 đến 10, với xác suất tương ứng là 0.11, 0.12, 0.09, 0.08, 0.12, 0.10, 0.09, 0.09, 0.10 và 0.10.




Đồ thị tần suất của biến ngẫu nhiên sinh ra theo phương pháp chấp nhận loại trừ


2.62 Tinh chỉnh biểu đồ 2.61.

Hãy điều chỉnh kích thước, màu sắc và độ dày của mỗi điểm biểu diễn trên đồ thị của 
Ví dụ 2.61 thành hình tròn màu đỏ viền đen lớn. 

Giải: Lệnh điều chỉnh như sau:

X = 5*rand(100,1);  
Y = rand*X + rand(100,1);   
figure(1);
plot(X,Y,'o','MarkerEdgeColor','k',...      
                  'MarkerFaceColor','r',...
                  'MarkerSize',8);

xlabel('X = 5*rand(100,1)')
ylabel('Y = rand*X + rand(100,1)');



2.61 Vẽ đồ thị các điểm dữ liệu với dữ liệu ngẫu nhiên.

Vẽ đồ thị các điểm dữ liệu với dữ liệu ngẫu nhiên được tạo như sau: 
X = 5*rand(100,1); 
Y = rand*X + rand(100,1); 

Giải: Chương trình vẽ đồ thị với hàm plot() như sau:

X = 5*rand(100,1);
Y = rand*X + rand(100,1);
figure(1);
plot(X,Y,'.');
xlabel('X = 5*rand(100,1)')
ylabel('Y = rand*X + rand(100,1)');



2.60 Cấu trúc.

Hãy khai báo một cấu trúc thông tin của sinh viên gồm ba thành phần gồm họ và tên, năm sinh và giới tính. 
a. Kiểm tra có phải là cấu trúc không? 
b. Liệt kê ra các trường của cấu truc 
c. Kiểm tra ‘Gioi_Tinh’ có phải là một trường trong cấu trúc sinh viên không? 
d. Xếp thứ tự các trường 
e. Thêm một trường ‘Noi_Sinh’ 
f. Kiểm tra tên trường “Ho_va_Ten” có hợp lệ không? 
g. Tạo ra một mảng cấu trúc với sinh viên thứ hai. 
h. Lấy năm sinh của hai sinh viên 

Giải: Chúng ta bắt đầu với hàm struct(). 

SV=struct('Ho_va_Ten','Tran Van A','Nam_Sinh',1990,'Gioi_Tinh','Nam')
isstruct(SV)
fieldnames(SV)
isfield(SV,'Gioi_Tinh')
SV = orderfields(SV)
SV.Noi_Sinh = 'Khanh Hoa'
SV = rmfield(SV,'Noi_Sinh')
SV(2).Ho_va_Ten = 'Tran Thi B'
SV(2).Nam_Sinh = 1991
SV(2).Gioi_Tinh = 'Nu'
SV.Năm_Sinh







2.59 Các giá trị duy nhất trong mảng.

Nhập vào họ của 3 người trong gia đình bạn, tìm các họ có trong gia đình bạn. 

Giải: Chúng ta dùng hàm unique(). 

FamilyNames = {'Nguyen','Vo','Tran','Vo'}
UniqueNames = unique(FamilyNames)


6.1 Ước tính tỷ số tín hiệu trên nhiễu trung bình

Đề bài: Ước lượng tỷ số tín hiệu trên nhiễu trung bình của hệ thống SISO ở kênh truyền fading
Rayleigh, có công suất phát là
P , độ lợi kênh truyền trung bình là  
ω và so sánh với lý
thuyết.
 

Giải: Mã nguồn Matlab cho Ví dụ 6.1 như sau:

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

%  Cong suat phat theo dB
PdB = 0:3:30;
P = 10.^(PdB/10);
% Do loi kenh truyen trung binh
Omega = 2; 
% Ty so tin hieu tren nhieu trung binh
gamma_a = P.*Omega;
% Mo phong
N = 10^4; 
h = sqrt(Omega/2).*(randn(length(PdB),N) + 1i*randn(length(PdB),N));
gamma_s = sum(P(:).*abs(h).^2,2)/N;
% Ve do thi
figure(1);
set(gcf,'color','White');
plot(PdB,gamma_a,'-',PdB, gamma_s,'o');
legend('Ly thuyet','Mo phong');
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('Ty so tin hieu trên nhieu');
axis([0 30 0 2000])
==================== KẾT QUẢ====================


























2.58 Kiểm tra số nguyên tố.

Kiểm tra tất cả các số 1 3 5 7 có phải là số nguyên tố không? Kiểm tra có số nguyên tố nào trong 4 số 1 3 5 7 không?

Giải: Để kiểm tra số nguyên tố, ta dùng hàm isprime(). 

forall = all(isprime(1:2:7))
exists = any(isprime(1:2:7))


2.57 Các toán tử trên tập.

Thực hiện dòng lệnh sau và giải thích lệnh thực thi: 
a. set1 = 1:2:9 
b. set2 = 1:4 
c. int = intersect(set1,set2) 
d. uni = union(set1,set2) 
e. dif = setdiff(set1,set2) 
f. xor = setxor(set1,set2) 
g. check = ismember(3,set1) 
h. set3 = {'alpha','beta','gamma'}
i. set4 = {'delta','beta','epsilon'}
j. intc = intersect(set3,set4) 
k. check2 = ismember('delta',set4) 

Giải: Kết quả trên Matlab như sau:

set1 = 1:2:9 
set2 = 1:4 
int = intersect(set1,set2) 
uni = union(set1,set2) 
dif = setdiff(set1,set2) 
xor = setxor(set1,set2) 
check = ismember(3,set1) 
set3 = {'alpha','beta','gamma'}
set4 = {'delta','beta','epsilon'}
intc = intersect(set3,set4) 
check2 = ismember('delta',set4) 




2.56 Tìm từ trong mảng.

Tìm từ ‘foo’ trong mảng cell {'foobar','bar','barfoo','foofoo'} 

Giải: Ta dùng hàm strmatch().

str2 = {'foobar','bar','barfoo','foofoo'}
B = strmatch('foo',str2)


2.55 Tìm chuỗi trong chuỗi.

Tìm chuỗi ‘ctga’ trong chuỗi ‘actgcgctgacgctgatacacgggagctgacgactgaggacgagc’ 

Giải: Chúng ta dùng hàm strfind() như sau: 

tr = 'actgcgctgacgctgatacacgggagctgacgactgaggacgagc'
A = strfind(str,'ctga')



2.2 Biến trong Matlab

Khởi tạo một biến x = 1, y là một chuỗi với “hello world’, z được gán là kết quả của hàm log10(100) và t là một vector từ 1 đến 4.

Giải: Từ cửa sổ lệnh (“Command Window”) và bắt đầu từ dấu >>

x = 1 
y = 'hello world' 
z = log10(100) 
t = [1 2 3 4]

Thứ Tư, 8 tháng 4, 2020

Mô phỏng xác suất dừng của hệ thống maxial ratio combining


% Công suất phát theo dB
PdB = 0:1:10;
P = 10.^(PdB/10);
% Độ lợi kênh truyền trung bình
Omega = [1 2 3]; %
N = length(Omega);

% Lý thuyết
g_ = Omega(:).*P;
gMRC_a = sum(g_,1);

% Mô phỏng
N = 10^4; % So luong phep thu
h1 = sqrt(Omega(1)/2).*(randn(length(PdB),N) + 1i*randn(length(PdB),N));
h2 = sqrt(Omega(2)/2).*(randn(length(PdB),N) + 1i*randn(length(PdB),N));
h3 = sqrt(Omega(3)/2).*(randn(length(PdB),N) + 1i*randn(length(PdB),N));

% MRC
gMRC_s = P(:).*sum(abs(h1).^2 + abs(h2).^2 + abs(h3).^2,2)/N;

% Vẽ
figure(1);
set(gcf,'color','White');
semilogy(PdB,gMRC_a,'-',PdB,gMRC_s,'o');
legend('Lý thuyết','Mô phỏng');
xlabel('Tỷ lệ tín hiệu trên nhiễu theo dB');
ylabel('Tỷ lệ tín hiệu trên nhiễu');

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...