BÀI 1: CƠ SỞ VỀ MATLAB Sau khi học xong bài này, người học có thể: − Lập trình cơ bản trên MatLab − Hiểu các lệnh cơ bản, cách xây dựng và thực hiện hàm trên MatLab − Biết cách vẽ các
Trang 1ĐẠI HỌC CÔNG NGHỆ TP.HCM
TIN HỌC KỸ THUẬT
Biên soạn:
ThS Phạm Hùng Kim Khánh
Trang 2Tin học kỹ thuật
Ấn bản 2019
Trang 3MỤC LỤC
MỤC LỤC I HƯỚNG DẪN IV CÁC TỪ VIẾT TẮT VI
BÀI 1: CƠ SỞ VỀ MATLAB 1
1.1 GIỚI THIỆU 1
1.2 CÁC VẤN ĐỀ CƠ BẢN 4
1.2.1 Các phép toán và toán tử 4
1.2.2 Khai báo biến 5
1.2.3 Các lệnh thường dùng 5
1.2.4 Lưu biến vào file và lấy nội dung biến từ file 5
1.2.5 Ma trận 6
1.2.6 Đa thức 12
1.2.7 Lập trình trong MatLab 13
1.2.8 Các file và hàm 16
1.3 ĐỒ HOẠ 22
1.3.1 Các lệnh vẽ 22
1.3.2 Tạo hình vẽ 22
1.3.3 Kiểu đường vẽ 22
1.3.4 Vẽ với hai trục y 24
1.3.5 Vẽ đường cong 3D 24
1.3.6 Vẽ nhiều trục toạ độ 25
1.3.7 Đặt các thông số cho trục 26
1.3.8 Giới hạn của trục và chia vạch trên trục 27
1.3.9 Ghi nhãn lên các trục toạ độ 27
1.3.10 Đồ hoạ đặc biệt: 31
1.3.11 Đồ hoạ 3D 36
TÓM TẮT 38
CÂU HỎI ÔN TẬP 38
BÀI 2: GIAO DIỆN ĐỒ HỌA -GUI (GRAPHIC USER INTERFACE) 41
2.1 Tạo GUI 41
2.2 Các đối tượng đồ hoạ 43
2.3 Tạo menu 45
2.4 Viết mã lệnh trong file m 46
2.5 Ví dụ tạo GUI 47
TÓM TẮT 51
CÂU HỎI ÔN TẬP 51
BÀI 3: SYMBOLIC 54
3.1 Đạo hàm và vi phân 55
3.2 Tích phân 56
Trang 43.3 Hàm ngược 57
3.4 Vẽ đồ thị 57
3.5 Định dạng biểu thức 59
3.6 Giải phương trình và hệ phương trình 60
3.7 Tìm giới hạn 64
TÓM TẮT 65
CÂU HỎI ÔN TẬP 66
BÀI 4: SIMULINK 67
4.1 Cơ sở về Simulink 69
4.1.1 Các khối 69
4.1.2 Các thư viện khối 73
4.1.3 Các đường 73
4.1.4 Ghi chú 74
4.1.5 Làm việc với các loại dữ liệu 74
4.1.6 Làm việc với tín hiệu phức 75
4.1.7 Tạo hệ thống con 76
4.2 Mô hình hoá 77
4.2.1 Mô hình hoá một phương trình 77
4.2.2 Mô hình hoá hệ phương trình tuyến tính 79
4.2.3 Giải phương trình bậc cao: 79
4.2.4 Mô hình hoá hệ thống liên tục đơn giản 80
4.2.5 Mô hình hoá hệ phương trình vi phân bậc cao 81
4.2.6 Mô hình hoá hệ có điều kiện đầu khác không 82
4.2.7 Mô hình hóa hệ cho bởi sơ đồ khối 84
4.2.8 Mô hình hoá hệ phi tuyến 84
4.2.9 Ví dụ 87
TÓM TẮT 90
CÂU HỎI ÔN TẬP 90
BÀI 5: CÁC TOOLBOX HỖ TRỢ 93
5.1 Communication 93
5.1.1 Hàm 93
5.1.2 Simulink 111
5.1.3 Ví dụ 122
5.2 Simscape Multibody 130
5.2.1 Bodies 130
5.2.2 Joints 137
5.2.3 Constraints & Drivers 147
5.2.4 Sensors & Actuators 151
5.2.5 Force & Elements 157
5.2.6 Ví dụ 158
5.3 Control System 168
5.3.1 Mô hình hệ thống 169
5.3.2 Phân tích hệ thống 173
5.3.3 PID Tuning 178
Trang 55.3.4 Thiết kế hệ thống điều khiển dùng Control System Designer 190
TÓM TẮT 195 TÀI LIỆU THAM KHẢO 196
Trang 6HƯỚNG DẪN
MÔ TẢ MÔN HỌC
Môn học giới thiệu về MatLab, thiết kế giao diện và các công cụ hỗ trợ
NỘI DUNG MÔN HỌC
− Bài 1 Cơ sở về MatLab
Môn học Tin học kỹ thuật đòi hỏi sinh viên có nền tảng về Tin học cơ bản
YÊU CẦU MÔN HỌC
Người học phải dự học đầy đủ các buổi lên lớp và làm bài tập đầy đủ ở nhà
CÁCH TIẾP NHẬN NỘI DUNG MÔN HỌC
Để học tốt môn này, người học cần ôn tập các bài đã học, trả lời các câu hỏi và làm đầy đủ bài tập; đọc trước bài mới và tìm thêm các thông tin liên quan đến bài học Đối với mỗi bài học, người học đọc trước mục tiêu và tóm tắt bài học, sau đó đọc nội dung bài học Kết thúc mỗi ý của bài học, người đọc trả lời câu hỏi ôn tập và kết thúc toàn bộ bài học, người đọc làm các bài tập
PHƯƠNG PHÁP ĐÁNH GIÁ MÔN HỌC
Môn học được đánh giá gồm:
Trang 7quy chế đào tạo và tình hình thực tế tại nơi tổ chức học tập
− Điểm thi: 50% Hình thức bài thi thực hành trong 90 phút
Trang 8CÁC TỪ VIẾT TẮT
ADS-B - Automatic Dependent Surveillance-Broadcast
AM – Amplitude Modulation: điều biên
AWGN – Additive White Gaussian Noise: nhiễu trắng Gaussian cộng
BER – Bit error rate: tỷ số lỗi bit
BPSK – Binary Phase Shift Keying: điều chế pha nhị phân
CPFSK – Continuous Phase Frequency Shift Keying: FSK pha liên tục
CPM – Continuous Phase Modulation: điều chế pha liên tục
CRC – Cyclic Redundancy Check: kiểm tra độ dư vòng
DBPSK – Differential BPSK: BPSK vi phân
FM – Frequency Modulation: điều tần
FSK - Frequency Shift Keying
GMSK – Gaussian Minimum-Shift Keying
IMC – Internal Model Control: điều khiển mô hình nội
LQG – Linear Quadratic Gaussian: Gauss tuyến tính bậc hai
LTE – Long Term Evolution
MIMO – Multiple Input Multiple Output
OFDM - Orthogonal Frequency-Division Multiplexing: ghép kênh phân chia theo tần số trực giao
OQPSK – Offset QPSK
OVSF - Orthogonal Variable Spreading Factor: hệ số trải biến trực giao
PAM - Pulse Amplitude Modulation: điều biên xung
PID - Proportional Integral Derivative: vi tích phân tỷ lệ
PM – Phase Modulation: điều pha
QAM – Quadrature Amplitude Modulation: điều chế biên độ vuông góc
Trang 9SER – Symbol error rate: tỷ số lỗi symbol
Trang 11
BÀI 1: CƠ SỞ VỀ MATLAB
Sau khi học xong bài này, người học có thể:
− Lập trình cơ bản trên MatLab
− Hiểu các lệnh cơ bản, cách xây dựng và thực hiện hàm trên MatLab
− Biết cách vẽ các đồ thị cơ bản 2D và 3D
1.1 GIỚI THIỆU
MATLAB (Matrix laboratory) là phần mềm dùng để giải các bài toán kỹ thuật, đặc biệt là các bài toán liên quan đến ma trận MATLAB cung cấp các toolboxes, tức các hàm mở rộng môi trường MATLAB để giải quyết các vấn đề đặc biệt như
xử lý tín hiệu số, hệ thống điều khiển, mạng neuron, fuzzy logic, mô phỏng v.v
Để khởi động MATLAB ta nhấn đúp vào icon của nó trên màn hình
Cửa sổ biểu tượng của chương trình MatLab:
Hình 1.1 – Cửa sổ khởi động của MatLab
Trang 12• Cửa sổ làm việc của MatLab:
Hình 1.2 – Cửa sổ làm việc của MatLab
• Cửa sổ lệnh Command window:
Là cửa sổ giao tiếp chính của Matlab, là nơi nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện (built-
in function), hoặc các hàm do người dùng lập trình ra trong m-files Các lệnh được nhập sau dấu nhắc ‘>> ‘và thực thi lệnh bằng phím Enter
Để mở chương trình soạn thảo trong MatLab, gõ lệnh:
Cửa sổ lệnh
Thư mục hiện hành
Các file có trong thư
mục hiện hành
Trang 13Cửa sổ Editor sẽ hiện ra:
Hình 1.3 – Cửa sổ Editor Sau đó nhập vào đoạn chương trình sau:
% Chuong trinh trong M-file
x= 0:pi/6:2*pi;
y=sin(x);
plot(x,y);
Lưu chương trình với tên file plot_sin.m Thực thi chương trình trên trong cửa
sổ Command window bằng dòng lệnh sau
+ Dạng Script file : tập hợp các câu lệnh viết dưới dạng liệt kê, không có biến
dữ liệu vào và biến ra
+ Dạng function: có biến dữ liệu vào và biến ra
Trang 14Ví dụ 1.1: Đoạn chương trình giải phương trình bậc 2:
Trang 15+ Trong quá trình nhập nếu các phần tử trên một hàng dài quá ta có thể xuống dòng bằng toán tử ba chấm ( .)
1.2.2 Khai báo biến
- Phân biệt chữ hoa và chữ thường
- Không cần phải khai báo kiểu biến
- Tên biến phải bắt đầu bằng ký tự và không được có khoảng trắng
- Không đặt tên trùng với các tên đặc biệt của MatLab
- Để khai báo biến toàn cục (sử dụng được trong tất cả chương trình con), phải dùng thêm từ khoá global phía trước
1.2.3 Các lệnh thường dùng
help tên_hàm % tham khảo help của hàm
lookfor ‘chuỗi’ %Tìm kiếm
clc % Xoá màn hình
clear tên_biến % Xoá biến
clear all %Xoá tất cả các biến
clf %Xoá figure
save % Lưu biến vào file
load % Lấy nội dung của biến từ file
who % liệt kê các biến trong bộ nhớ
whos % liệt kê chi tiết các biến trong bộ nhớ
which
what
1.2.4 Lưu biến vào file và lấy nội dung biến từ file
Dùng lệnh save để lưu nội dung các biến trong MatLab vào file
Trang 16% Lưu tất cả các biến vào file test.mat:
Khi dùng lệnh save, tất cả các biến trong file cũ sẽ bị mất Để giữ lại dữ liệu
cũ, ta dùng thêm thông số -append
p = rand(1, 10);
q = ones(10);
Dùng lệnh load để lấy nội dung các biến đã lưu vào file
Trang 17• Tạo ma trận nhờ hàm tự tạo
Khi nhập ma trận từ bàn phím ta phải tuân theo các quy định sau:
• Ngăn cách các phần tử của ma trận bằng dấu “,” hay khoảng trắng
Trang 181.2.5.3 Toán tử “:”
Toán tử “:” là một toán tử quan trọng của MATLAB Nó xuất hiện ở nhiều dạng khác nhau Biểu thức 1:10 là một vector hàng chứa 10 số nguyên từ 1 đến 10 1:10
Trang 191.2.5.4 Tạo ma trận bằng hàm có sẵn
MATLAB cung cấp một số hàm để tạo các ma trận cơ bản:
• linspace: tạo một vector có giá trị cách đều nhau
a = linspace(1,5,15) % Tạo vector a từ 1 – 5, có 15 phần tử
a =1.0000 1.2857 1.5714 1.8571 2.1429 2.4286 2.7143 3.0000 3.2857 3.5714 3.8571 4.1429 4.4286 4.7143 5.0000
• zeros: tạo ra ma trận mà các phần tử đều là 0
Trang 23Ví dụ 1.4:Ta xét chương trình đoán tuổi như sau:
disp(‘Xin chao! Han hanh duoc lam quen’); %Xuất chuỗi ra màn hình
x = fix(30*rand);
disp(‘Tuoi toi trong khoang 0 ‐ 30’);
g = input(‘Xin nhap tuoi cua ban: ‘);
Trang 24Vòng lặp for dùng khi biết trước số lần lặp Cú pháp như sau:
for <chỉ số>=<giá trị đầu>:<mức tăng>:<giá trị cuối>
Ví dụ 1.6: Xây dựng chương trình đoán số:
Trang 25n = 7;
t = 1;
for k = 1:1:7
num = int2str(n); % Chuyển từ số nguyên thành string
disp([ʹBan co quyen du doan ʹ num ʹ lanʹ]);
disp(ʹSo can doan nam trong khoang 0 ‐ 100ʹ);
g = input(ʹNhap so ma ban doan: ʹ);
Trang 26Trên cửa sổ editor, nhập đoạn mã và lưu vào một file tên là fibo.m Đây chính
là một script file Để thực hiện các mã chứa trong file fibo.m từ cửa sổ lệnh ta
Trang 27end
y = sum(x)/m;
Từ ví dụ trên ta thấy một hàm gồm các phần cơ bản sau :
• Một dòng định nghĩa hàm: function y = tb(x) gồm từ khoá function, đối số trả về y, tên hàm tb và đối số vào x
• Dòng kế tiếp là dòng trợ giúp đầu tiên Vì đây là dòng văn bản nên nó phải đặt sau % Nó xuất hiện khi ta nhập lệnh help <tên hàm> Phần văn bản này giúp người dùng hiểu tác dụng của hàm
• Thân hàm chứa mã MATLAB
• Các lời giải thích dùng để cho chương trình sáng rõ Nó được đặt sau dấu % Cần chú ý là tên hàm phải bắt đầu bằng ký tự và cùng tên với file chứa hàm Tên hàm là tb thì tên file cũng là tb.m
biến nào đó của hàm ta cần khai báo nó là global
Nếu hàm có nhiều thông số ngõ vào và ngõ ra thì khai báo như sau:
function [y1,y2,y3] = tb(x1,x2,x3)
Lưu ý rằng trong một file m có thể có nhiều hàm nhưng hàm đầu tiên phải có tên trùng với tên file
1.2.8.3 Điều khiển vào và ra:
disp(a): hiển thị nội dung của mảng a hay văn bản
a = [1 2 3];
disp(a)
Trang 28format short % 5 digit
format long % 15 digit
format short e % 5 digit + số mũ
format long e % 15 digit + số mũ
format hex % Dạng số hex
format + %Hiển thị +, - và blank với các giá trị dương, âm và 0 input: nhập dữ liệu
x = input(ʹCho tri cua bien x :ʹ)
Cho tri cua bien x :4
x = 4
1.2.8.4 Các hàm toán học cơ bản:
exp(x) hàm mũ cơ số e (ex)
sqrt(x) căn bậc hai của x
log(x) logarit cơ số e
log10(x) logarit cơ số 10
abs(x) module của số phức x (giá trị tuyệt đối của số thực)
angle(x) argument của số phức a
conj(x) số phức liên hợp của x
imag(x) phần ảo của x
Trang 29sign(x) dấu của x
1.2.8.5 Các phép toán trên hàm toán học
Biểu diễn hàm toán học:
MATLAB biểu diễn các hàm toán học bằng cách dùng các biểu thức đặt trong M-file Ví dụ để khảo sát hàm:
Trang 30Cách thứ hai để biểu diễn một hàm toán học trên dòng lệnh là tạo ra một đối tượng inline từ một biểu thức chuỗi Ví dụ ta có thể nhập từ dòng lệnh như sau:
Trang 31Hàm fzero dùng để tìm điểm zero của hàm một biến
Ví dụ 1.9: Tìm giá trị không của hàm lân cận giá trị -0.2 ta viết :
f=inline(ʹ1./((x‐0.3).^2+0.01)+1./(x.^2+0.04)‐6ʹ);
a = fzero(f,-0.2)
a = -0.443585269991057
Trang 321.3 ĐỒ HOẠ
1.3.1 Các lệnh vẽ
MATLAB cung cấp một loạt hàm để vẽ biểu diễn các vector cũng như giải thích
và in các đường cong này
plot: đồ họa 2-D với số liệu 2 trục vô hướng và tuyến tính
plot3: đồ họa 3-D với số liệu 2 trục vô hướng và tuyến tính
loglog: đồ hoạ với các trục x, y ở dạng logarit
semilogx: đồ hoạ với trục x logarit và trục y tuyến tính
semilogy: đồ hoạ với trục y logarit và trục x tuyến tính
polar: vẽ đồ thị dạng tọa độ cực
1.3.2 Tạo hình vẽ
Hàm plot có các dạng khác nhau phụ thuộc vào các đối số đưa vào Nếu y là một vector thì plot(y) tạo ra một đường quan hệ giữa các giá trị của y và chỉ số của nó Nếu ta có 2 vector x và y thì plot(x,y) tạo ra đồ thị quan hệ giữa x và y
Để xác định màu và kích thước đường vẽ, ta dùng các tham số sau:
Trang 33MarkerFaceColor : màu của khối đánh dấu
Màu được xác định bằng các tham số:
Các dạng đường thẳng xác định bằng:
Các dạng điểm đánh dấu xác định bằng:
Ví dụ 1.10:
Hình 1.5 – Vẽ hàm số tan(sin(x)) – sin(tan(x))
Trang 34x = -pi : pi/10 : pi; y = tan(sin(x)) - sin(tan(x));
Lệnh plotyy cho phép tạo một đồ thị có hai trục y Ta cũng có thể dùng plotyy
để cho giá trị trên hai trục y có kiểu khác nhau nhằm tiện so sánh
Trang 35plot3(sin(t),cos(t),t)
Hình 1.7 – Vẽ đồ thị 3D
1.3.6 Vẽ nhiều trục toạ độ
Hình 1.8 – Vẽ nhiều trục toạ độ Dùng hàm subplot để vẽ nhiều trục toạ độ
subplot(2,3,5) %2,3: xác định có 2 hàng, 3 cột
Trang 36% 5: chọn trục thứ 5 (đếm từ trái sang phải, trên xuống dưới)
Trang 37axes tạo một trục toạ độ mới với các đặc tính được mô tả
get và set cho phép xác định và đặt các thuộc tính của trục toạ độ đang có gca trở về trục toạ độ cũ
1.3.8 Giới hạn của trục và chia vạch trên trục
MATLAB chọn các giới hạn trên trục toạ độ và khoảng cách đánh dấu dựa trên
số liệu dùng để vẽ Dùng lệnh axis có thể đặt lại giới hạn này Cú pháp của lệnh: axis[xmin , xmax , ymin , ymax]
x = 0:0.025:pi/2;
plot(x,tan(x),ʹ‐roʹ);
axis([0 pi/2 0 5]);
MATLAB chia vạch trên trục dựa trên phạm vi dữ liệu và chia đều Ta có thể
mô tả cách chia nhờ thông số xtick và ytick bằng một vector tăng dần
1.3.9 Ghi nhãn lên các trục toạ độ
MATLAB cung cấp các lệnh ghi nhãn lên đồ hoạ gồm:
title thêm nhãn vào đồ hoạ
xlabel thêm nhãn vào trục x
ylabel thêm nhãn vào trục y
zlabel thêm nhãn vào trục z
legend thêm chú giải vào đồ thị
Trang 38text hiển thị chuỗi văn bản ở vị trí nhất định
gtext đặt văn bản lên đồ hoạ nhờ chuột
x = -pi:.1:pi; y = sin(x);
plot(x,y);
xlabel(ʹt = 0 to 2\piʹ,ʹFontsizeʹ,16);
ylabel(ʹsin(t)ʹ,ʹFontsizeʹ,16);
title(ʹ\it{Gia tri cua sin tu zero đến 2 pi}ʹ,ʹFontsizeʹ,16);
Ta có thể thêm văn bản vào bất kỳ chỗ nào trên hình vẽ nhờ hàm text
Để thêm ghi chú tại điểm t = 300 ta viết :
text(300,.25*exp(‐.005*300), ’\bullet\leftarrow \fontname{times} 0.25{\ite}^{‐0.005{\itt}} at, {\itt}=300’,ʹFontSize’,14)
Tham số HorizontalAlignment và VerticalAlignment định vị văn bản so với các toạ độ x, y, z đã cho Để thêm các ký tự đặc biệt, ta dùng format dạng Tex:
Trang 39\bf — đậm
\it — nghiêng
\fontname{fontname} — xác định tên font
\fontsize{fontsize} — xác định kích thước font
\color(colorSpec) — xác định màu chữ
Các chỉ số trên và dưới thực hiện bằng ^ và _
title('\ite^{i\omega_0\tau} = cos(\omega_0\tau) + i sin( \omega_0
\tau)') Kết quả: 𝑒𝑖𝜔 0 𝜏 = cos(𝜔0𝜏) + 𝑖𝑠𝑖𝑛(𝜔0𝜏)
Để thêm các công thức toán học, ta dùng dạng LaTeX
Trang 40text('position',[.2 3], 'fontsize',14, 'interpreter','latex', 'string',['$$\left[ {\matrix{\cos(\phi) & -\sin(\phi) \cr \sin(\phi)
& \cos(\phi) \cr}} \right] \left[ \matrix{x \cr y} \right]$$']);
\int_0^\infty\!\!{e^{-st}f(t)dt}$$']);
'string','$$e = \sum_{k=0}^\infty {1 \over {k!} } $$');
'string',['$$m \ddot y = -m g + C_D \cdot {1 \over 2}\rho {\dot y}^2
Trang 43set(h2,ʹYAxisLocationʹ,ʹrightʹ,ʹColorʹ,ʹnoneʹ,ʹXTickLabelʹ,[]) set(h2,ʹXLimʹ,get(h1,ʹXLimʹ),ʹLayerʹ,ʹtopʹ)
Để ghi chú lên đồ thị ta viết:
text(11,380,ʹMat doʹ,ʹRotationʹ,‐‐55,ʹFontSizeʹ,16)
ylabel(ʹTCE Mat do (PPM)ʹ)
title(ʹXep chong do thiʹ,ʹFontSizeʹ,16)
c Đồ hoạ vùng:
Hàm area hiển thị đường cong tạo từ một vector hay từ một cột của ma trận
Nó vẽ các giá trị của một cột của ma trận thành một đường cong riêng và tô đầy vùng không gian giữa các đường cong và trục x
y = [5 2 1;6 7 3;8 6 3;5 5 5;1 5 8];
area(Y)
Hình 1.13 – Hiển thị đồ thị dạng vùng
d Đồ thị pie: