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

 

ppt 47 trang yennguyen 6780
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

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:

  • pptbai_giang_xu_ly_tin_hieu_nang_cao_chuong_1_tong_quan_ve_cong.ppt