Bài giảng Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ MATLAB
Giới thiệu Matlab
Tổng quan về lập trình Matlab
Cách sử dụng biến trong Matlab
Các lệnh và các hàm cơ bản
Cách thao tác với ma trận
Vẽ đồ thị trong Matlab
Làm việc với hàm và m-file
Lập trình GUI
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ MATLAB", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Xử lý tín hiệu nâng cao - Chương 1: Tổng quan về công cụ MATLAB
CHƯƠNG I
Xử lý tín hiệu nâng cao
Tổng quan về công cụ MATLAB
Tài liệu tham khảo
Xử lý tín hiệu nâng cao - Nguyễn Quốc Trung
Digital signal processing using MATLAB - Viney K.Ingle & John G.Proakis
Digital Signal and Image Processing Using MATLAB - Gerard Blanchet & Maurice Charbit
Digital image processing using MATLAB - Gonzalez Woods & Eddins
Xử lý số tín hiệu - Hồ Văn Sung
Nội dung
Giới thiệu Matlab
Tổng quan về lập trình Matlab
Cách sử dụng biến trong Matlab
Các lệnh và các hàm cơ bản
Cách thao tác với ma trận
Vẽ đồ thị trong Matlab
Làm việc với hàm và m-file
Lập trình GUI
Giới thiệu Matlab
Matlab được phát triển bởi MathWorks
Là một ngôn ngữ lập trình thông dịch
Hỗ trợ lập trình hướng đối tượng
Ứng dụng rộng rãi
Có khả năng liên kết với nhiều ngôn ngữ lập trình khác
Lịch sử phát triển
Cuối thập niên 1970 . MATLAB, nguyên sơ được viết bởi ngôn ngữ Fortran
Năm 1983 , Jack Little, một người đã học ở MIT và Stanford, đã viết lại MATLAB bằng ngôn ngữ C
Năm 1984 : Phiên bản đầu tiên MATLAB 1.0 viết bằng C cho MS-DOS PC
Năm 1986 , MATLAB 2 ra đời trong đó hỗ trợ UNIX.
Năm 1987 , MATLAB 3 phát hành.
Lịch sử phát triển
Năm 1992 MATLAB 4 thêm vào hỗ trợ 2-D và 3-D
Năm 1996 MATLAB 5 bao gồm thêm các kiểu dữ liệu, bộ sửa lỗi và bộ tạo dựng GUI
Năm 2000 MATLAB 6
Năm 2002 MATLAB 6.5
Năm 2004 MATLAB 7
Tháng 6, 2009 , phiên bản MATLAB R2009a
Màn hình chính
Tổng quan về lập trình trong Matlab
Lập trình hướng thủ tục
Cú pháp, từ khóa
Sử dụng các thư viện Toolbox
Lập trình trong Matlab
Sử dụng dòng lệnh
Lập trình m-file
Thiết kế chương trình có GUI
Sử dụng biến trong Matlab
Không cần khai báo kiểu, số chiều, độ dài biến.
Mỗi khi một cái tên mới xuất hiện với phép gán, Matlab tạo biến và tự động cấp phát bộ nhớ cho nó.
Ví dụ : sosv = 110 tạo một biến tên sosv (là một ma trận 1x1) lưu giá trị 110.
Nếu đó là biến cũ, nó sẽ thay đổi nội dung mới nếu thực hiện phép gán.
Ví dụ:
>>X = 3
>>X = 4 // X = 4.
Cách đặt tên biến
Tên biến phải là một từ, không chưa dấu cách, tên biến tối đa là 63 ký tự
Tên biến phân biệt chữ hoa và chữ thường
Tên biến bắt đầu bằng chữ cái
Ký tự dấu chấm “ . ” không được sử dụng để trong đặt tên biến.
Các biến đặc biệt
Các biến đặc biệt
Giá trị
ans
biến mặc định trả về kết quả
pi
số pi
eps
Số nhỏ nhất lớn hơn 0
inf
Để chỉ số vô cùng
NaN hoặc nan
Để chỉ số ko xác định như kết quả của 0/0
i và j
Số phức, i=j=sqrt(-1)
realmin
Số dấu chấm động nhỏ nhất (2.2251e-308)
realmax
Số dấu chấm động lớn nhất (1.7977e+308)
Véc tơ và ma trận
Các bài toán trong Matlab được quy về tính toán và xử lý trên ma trận
Ví dụ, tạo một ma trận trong Matlab:
>> M=[3 4 5 ; 2 1 4]
M =
3 4 5
2 1 4
Các phần tử trong một cột cách nhau bởi dấu cách (space) hoặc dấu phẩy
Các hàng được cách nhau bằng dấu “;”
Chỉ số các phần tử bắt đầu từ 1
Một số lệnh thông dụng
clc : Xóa màn hình cửa sổ lệnh
who : xem tên biến trong không gian làm việc của Matlab
>> who
Your variables are:
A M N
whos : xem chi tiết hơn về các biến
>> whos
Name Size Bytes Class
A 1x10 80 double array
M 6x3 144 double array
N 3x3 72 double array
Grand total is 37 elements using 296 bytes
clear : Xóa các biến trong bộ nhớ của Matlab
help : yêu cầu sự giúp đỡ
Các toán tử
Toán tử
Ký hiệu
Phép cộng
+
Phép trừ
-
Phép nhân
*
Phép chia
/ hoặc \
Phép lũy thừa
^
Chuyển vị ma trận
'
Các toán tử quan hệ
>, =, <=, ==
Các toán tử logic
&, |, ~
Các hàm toán học thông dụng
Tên hàm
Ý nghĩa
sin(x), cos(x), tan(x)
Các hàm lượng giác
asin(x), acos(x), atan(x)
Các hàm lượng giác ngược
exp(x)
Hàm mũ e x
log(x), log10(x), log2()
Logarit cơ số e, 10, 2
abs(x)
Hàm lấy trị tuyệt đối
Round(x), floor(x), fix(x), ceil(x)
Các hàm làm tròn
Thực hành
1.1 Dự đoán kết quả xuất ra màn hình:a. 2 ; 4b. 2 / 4c. 2 \ 4d. 2 , 4e. 2 : 4
1.2 Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab:a. 2 / 2 * 3b. 6 – 2 / 5 + 7 ^ 2 – 1c. 10 / 2 \ 5 – 3 + 2 * 4d. 3 ^ 2 / 4e. 3 ^ 2 ^ 2f. round(6 / 9 + 3 * 2) g. floor(6 / 9 + 3 * 2) h. ceil(6 / 9 + 3 * 2)k. fix(4/9)+fix(3*(5/6))
Thực hành
1.3 Xác định công dụng của hàm solve , thực hiện một ví dụ với hàm này
1.4 Tạo một số ngẫu nhiên
Có giá trị từ 0 đến 1
Có giá trị từ 0 đến 100
Có giá trị từ 30 đến 70
1.5 Xác định ý nghĩa của các hàm
mod(a,b)
gcd(a,b)
lcm(a,b)
Các toán tử và các hàm thao tác với ma trận
Có thể dùng các hàm sau để tạo các ma trận đặc biệt:
zeros(N): Tạo ma trận các phần tử đều bằng 0 có kích thước N
ones(N): Tạo ma trận các phần tử đều bằng 1 có kích thước N
rand(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử phân bố đều.
randn(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử tuân theo phân bố chuẩn
magic(N): Tạo ma trận magic (tổng giá trị trong 1 hàng bằng tổng giá trị trong 1 cột bằng tổng giá trị đường chéo) có kích thước N
eye(N): Tạo ma trận đơn vị
Các toán tử và các hàm trên ma trận
Các toán tử trên ma trận
Cộng: X=A+B
Trừ: X=A-B
Nhân: X=A*B
Chia: X=A/B (A=X*B) hoặc X=A\B (B=A*X)
Lũy thừa: X=A^2 (X=A*A)
Xóa cột : A(:,3)=[] để xóa cột 3 trong ma trận A
Xóa hàng: A(3,:)=[] để xóa hàng 3 trong ma trận A
Các hàm thông dụng với ma trận
Tính kích thước: d=size(A)
Tính định thức: d=det(A)
Tính ma trận nghịch đảo: X=inv(A)
Thực hành
1.6 Tạo một vector:
Có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [0, 100]
Có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [-20 ,10]
1.7 Cho x = [3 1 5 7 9 2 6], dự đoán kết quả các dòng lệnh sau và thử lại bằng Matlab:a. x(3) b. x(1:7)c. x(1:end)d. x(1:end-1)e. x(6:-2:1)f. x([1 6 2 1 1])g. sum(x)
1.8 Giải hệ phương trình:
Sử dụng đồ thị trong Matlab
Đồ thị trong hệ tọa độ phẳng
Phần lớn các câu lệnh vẽ đồ thị trong hệ tọa độ phẳng được thực hiện bằng lệnh plot.
Ví dụ:
>> x=linspace(0,2*pi,30);
>> y=sin(x);
>> plot(x,y)
Kết quả:
Các tham số trong vẽ đồ thị
Tham số
Màu sắc
Tham số
Các điểm
Tham số
Nối các điểm
b
xanh da trời
.
điểm
-
nét liền
g
xanh lá cây
0
tròn
:
đường chấm
r
đỏ
x
dấu x
-.
đường gạch chấm
c
xanh xám
+
dấu +
--
đường gạch gạch
m
đỏ tím
*
hoa thị
y
vàng
s
vuông
k
đen
d
kim cương
w
trắng
v, ^,
tam giác
p,h
ngôi sao
Các lệnh khác với đồ thị
grid on/off : thêm/bỏ đường lưới vào đồ thị
box on/off : thêm/bỏ hộp chứa đồ thị
axis on/off : thêm/bỏ trục tọa độ
xlabel('Trục x') : thêm nhãn cho trục x
ylabel('Truc y') : thêm nhãn cho trục y
title('Do thi ham sin') : thêm tiêu đề ở đỉnh cho đồ thị
Đồ thị trong không gian 3D
Để vẽ đồ thị đường trong không gian ba chiều ta sử dụng lệnh plot3, khuôn dạng lệnh plot3 như sau: plot3(x,y,z) trong đó x,y,z là các vector hoặc ma trận
Ví dụ:
>> t=linspace(0,6*pi,100);
>> plot3(sin(t),cos(t),t)
Kết quả:
Đồ thị trong không gian 3D
Đối với đồ thị bề mặt và lưới, Matlab định nghĩa bề mặt lưới bằng các điểm theo hướng trục z ở trên đường kẻ ô hình vuông trên mặt phẳng x-y.
Trong Matlab có hàm meshgrid , với cú pháp [X,Y]=meshgrid(x,y) tạo ra một ma trận X và Y, trong đó ma trân X mà các hàng nó là bản sao của vector x, và ma trận Y có các cột là bản sao của vector y.
Đồ thị trong không gian 3D (tiếp)
Ví dụ:
>> [X,Y]=meshgrid(-1:0.5:1, -1:0.5:1)
X =
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
-1.0 -0.5 0 0.5 1.0
Y =
-1.0 -1.0 -1.0 -1.0 -1.0
-0.5 -0.5 -0.5 -0.5 -0.5
0 0 0 0 0
0.5 0.5 0.5 0.5 0.5
1.0 1.0 1.0 1.0 1.0
Đồ thị trong không gian 3D (tiếp)
X,Y là một cặp ma trận tương ứng với một lưới chữ nhật trong mặt phẳng x-y. Z là một hàm số theo x,y cuối cùng, sử dụng hàm mesh(x,y,z) để vẽ đồ thị.
Ví dụ:
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> mesh(X,Y,Z)
Kết quả:
Thực hành
1.9 Vẽ đồ thị hàm số x, x 3 , e x với 0 < x < 4
1.10 Vẽ đồ thị hàm số f(x) = sin(1/x) với 0.01 < x < 0.1.
1.11 Vẽ hai hàm và trên cùng một đồ thị, ghi chú thích
1.12 Vẽ đồ thị hàm số 3D
z=sqrt(x 2 +y 2 )+x 2 +y 2
Viết chương trình trong Matlab
Ví dụ trong bài toán vẽ độ thị trên, ta tạo một file dothi3D.m với nội dung:
function dothi3D
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
Khi đó, để thực hiện nhóm câu lệnh trong file trên, tại dấu nhắc của cửa sổ lệnh, chỉ việc gõ dothi3D
Thực hành
1.13 : Nhập vào 3 số, kiểm tra xem 3 số đó có phải cạnh của một tam giác hay không
1.14 : Nhập 3 số a,b,c từ bàn phím, giải phương trình, sau đó giải phương trình ax 2 +bx+c=0
1.15 : Nhập vào 1 số từ bàn phím, kiểm tra xem số đó có phải số nguyên tố hay không
Viết hàm trong matlab
function s=example
%tinh dien tich hinh chu nhat
w=input('Vao chieu rong:');
l=input('Vao chieu dai:');
s=w*l;
Vòng lặp: for, while
Cấu trúc: if, else,
Cấu trúc switch-case
Viết hàm trong matlab (tiếp)
Lưu ý khi viết hàm trong Matlab:
Tên hàm và tên file phải là một, ví dụ hàm example phải được lưu trong file example.m
Một file m có thể chứa nhiều hàm, tên file sẽ được đặt theo hàm đầu tiên
Các dòng chú thích đầu tiên trong hàm sẽ xuất hiện khi gõ lệnh help.
Lệnh return giúp ta kết thúc một hàm mà không cần phải thi hành hết các câu lệnh.
Viết hàm trong matlab (tiếp)
Cú pháp khi xây dựng hàm
function [output_list] = function_name(input_list)
//body
Return
Một số hàm/lệnh thông dụng khi lập trình m-file
echo on/off
input
disp
global
Thực hành
Thực hành với câu các câu lệnh lựa chọn IF, IF ELSE, IF ELSE IF
Một học viên được kiểm tra 3 môn học. Mỗi bài kiểm tra tối đa là 100 điểm. Xếp loại học viên dựa vào điểm trung bình 3 môn.
Hãy viết một hàm, thực hiện
Nhập vào điểm của 3 môn học và lưu trong 3 biến khác nhau là M1, M2 và M3.
Tính điểm trung bình (avg = (M1 + M2 + M3)/3).
Hiển thị xếp loại sinh viên ra màn hình
Điểm trung bình
Loại
>= 90
E+
80 - < 90
E
70 - < 80
A+
60 - < 70
A
50 - < 60
B+
< 50
RỚT
Thực hành
Thực hành câu lệnh switch - case
Hãy nhập vào 2 số bất kỳ, sau đó hỏi người sử dụng muốn thực hiện tính toán gì với 2 số này (+ , - , * , / , %). Sau đó thực hiện tính toán và hiển thị kết quả ra màn hình
Thực hành với vòng lặp for
Tìm giai thừa của một số.
Thực hành với cấu trúc lặp while
Yêu cầu người sử dụng nhập vào các số tự nhiên, quá trình nhập kết thúc khi người dùng gõ số 0. Thực hiện tính toán để in ra màn hình tổng tất cả các số đã nhập.
Matlab GUI
Matlab GUI là là giao diện hình ảnh của chương trình
Bao gồm các nút bấm, các thanh trượt, các cửa sổ, menu v.v...
Được sử dụng để cung cấp cho người dùng một môi trường làm việc đơn giản và thân thiện.
Matlab GUI
Matlab GUI
Khi đó Matlab sẽ tạo ra 2 file mới:
File có phần mở rộng .fig chứa nội dung của giao diện
File có phần mở rộng .m chứa mã nguồn
Matlab GUI
Các thuộc tính
Hàm Callback
Mọi điều khiển trong Matlab đều có hàm Callback,
Hàm Callback của mỗi điều khiển được gọi phụ thuộc vào từng điều khiển khác nhau.
Trong hàm Callback có 2 thuộc tính quan trọng
hObject : handle của điều khiển của control
handles : là một cấu trúc chứa tất cả các điều khiển và dữ liệu người dùng. Dùng cái này để truy suất các điều khiển khác.
Đọc & thiết lập giá trị
Đọc dữ liệu
Get(handle, ‘property’)
Thiết lập giá trị
Set(handle, ‘property’,value)
Edit text & Static text
Ví dụ
x=get(handles.edit1,'string');
y=get(handles.edit2,'string');
z= str2num( x)+ str2num( y);
set(handles.text1,'string',num2str(z));
Điều khiển Toggle
Nút bấm 2 trạng thái:
button_state = get(hObject,'Value');
if button_state == get(hObject,'Max')
grid on;
elseif button_state == get(hObject,'Min')
grid off;
end
List box & Axes
Ví dụ
axes(handles.axes1);
x = get(handles.popupmenu1, 'Value');
switch x
case 1
plot(rand(5));
case 2
plot(sin(1:0.01:25));
case 3
bar(1:10);
end
Slider bar
Các thuộc tính cần quan tâm:
Min, max
Slider Step
Ví dụ
axes(handles.axes2);
k= get(hObject,'Value');
set(handles.edit1,'String',k)
n=1:k;
x=rand(1,k);
stem(n,x);
Run & Debug
Bấm nút Play trên thanh công cụ hoặc F5 trong cửa sổ lập trình để chạy chương trình
Trong trường hợp muốn debug chương trình
Đặt breakpoint bằng phím F12,
Trong quá trình Debug, chuyển sang lệnh tiếp theo sử dụng phím F10.
Khi chạy chương trình, có thể in giá trị biến đang bằng lệnh msgbox, ví dụ:
msgbox(x,'Thong bao');
Thực hành
Viết một chương trình thực hiện công việc giống công cụ calculator của Windows
File đính kèm:
bai_giang_xu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong.ppt

