Bài giảng Xử lý tín hiệu nâng cao - Chương I: Tổng quan về công cụ MATLAB
Nội
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
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 I: 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 I: 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:
- xlthnc_chapter1_8268_489351.ppt