420 likes | 623 Views
Bài giảng môn học Xử Lý Tín Hiệu Số. Giảng viên : Lã Thế Vinh Email: vinhlt@soict.hut.edu.vn. Chú ý: bài giảng có sử dụng các học liệu được cung cấp bởi Giáo sư Tae-Song Kim, Trường Đại học Kyung Hee , Hàn Quốc. MATLAB. Giới thiệu Bắt đầu với MATLAB Biến Véc-tơ và ma trận
E N D
BàigiảngmônhọcXửLýTínHiệuSố Giảngviên: LãThếVinh Email: vinhlt@soict.hut.edu.vn Chú ý:bàigiảngcósửdụngcáchọcliệuđượccungcấpbởiGiáosư Tae-Song Kim, TrườngĐạihọc Kyung Hee, HànQuốc.
MATLAB • Giớithiệu • Bắtđầuvới MATLAB • Biến • Véc-tơvà ma trận • Cáctoántửcơbản • File mã MATLAB • Chươngtrình con • Lệnhlậptrìnhcơbản • Đồthịvàbiểuđồ
Giớithiệu MATLAB • MATLAB: MATrixLABoratory • PháttriểnbởiCleve Molertừ 1970 • Đượcsửdụngnhiềutrongtínhtoán: • Lýthuyết ma trận • Đạisốtuyếntính • Cácphươngphápsố • Cáctínhnăngnổibậtkhác: • Môphỏng • Giảitoán symbolic
Giớithiệu MATLAB • Ưuđiểmcủa MATLAB (so vớicácngônngữkhác): • Dễlậptrình • Khảnăngtạocácđồthị, biểuđồdễdàng • Giaodiệnthânthiện • Trongmônhọcnày MATLAB đượcdùngđể: • Làmcácthínghiệmđơngiản: tạo, xửlývàhiểnthịcáctínhiệu • Phântíchphổtínhiệu • Thựchiệncácbộlọctínhiệu
Bắtđầuvới MATLAB • Càiđặt MATLAB
Bắtđầuvới MATLAB • Chạy MATLAB
Biếntrong MATLAB • MATLAB làngônngữlậptrìnhcókiểubiếnđộng • Biếnđượckhaibáovàkhởitạomàkhôngcầnchỉđịnhkiểu • Vídụ: x = 1.0; y = [1 2;3 4];
Biếntrong MATLAB • Phépgán: x = y, MATLAB tựkhaibáox vàgáncho x kiểutươngứng • Tênbiến: • Khôngcódấucách • Chứacácchữcái, sốvàdấugạchchân, khôngbắtđầubằngsố • Tênbiếnphânbiệtchữhoavàchữthường: xkhácX • Độdàitốiđacủatênbiếnlà 19
Biếntrong MATLAB • Tênbiếnhợplệ: • voltage • valueOfR1 • Ron_and_Mauro • _Alan2007_ • Tênbiếnkhônghợplệ: • 123 • value of R1 • 3v • X#*()$#$!!!
Cáclệnhcơbảncủa MATLAB • Panel trái: Thưmục / Khônggianbiến • A) Thưmụchiệntại MATLAB đanglàmviệc • B) Biếnvàgiátrịcủabiếnđãđượctạora • Panel phải: Cửasổlệnh • Nhậplệnhcho MATLAB • Lệnhkhôngcódấu ; sẽ in kếtquảthựcthiracửasổlệnh • Lệnhcódấu ; sẽkhông in kếtquảthựcthi
Cáclệnhcơbảncủa MATLAB • Cáchnhậplệnh: • Mộtlệnhmộtdòngkếtthúcbằng ENTER • Nhiềulệnhmộtdòng: • Dùng ; đểtáchlệnh • Dùng , đểtáchlệnh (in kếtquảthựcthi) • Nhậptênbiến + ENTER = xemgiátrịbiến • Nhậpmộtgiátrị + ENTER , MATLAB tạorabiếnans (answer) vớigiátrịđãnhập
Cáclệnhcơbảncủa MATLAB • who: Hiệncácbiếnđãđượctạora • clear: • all: Xóahếtcácbiến • x: Xóabiếnx • clc: Xóacửasổlệnh • Biếnvẫntồntại
Cáclệnhcơbảncủa MATLAB • Giátrịtrong MATLAB cóthểlàphức • X=1+2i • Y=1+2j
Cáclệnhcơbảncủa MATLAB • Cửasốlịchsử: Cáclệnhđãdùnggầnđây • Nháyđúpđểchạylạilệnh • Nhấnphìmlên, xuống, trái, phảichophépduyệtlạicáclệnhđãdùng
Véc-tơvà Ma trận • MATLAB xemcácbiếnlàcác ma trận 2 chiều (trừkhicóchỉđịnhrõràng) • Mảngvàvéc-tơ: ma trận N x 1 hoặc 1 x N • Giátrịvôhướng: ma trận 1 x 1
Véc-tơvà Ma trận • Khaibáovéc-tơ, ma trận • C / Java: int a[4] = {1, 2, 3, 4}; • MATLAB: • a = [1 2 3 4] – Véc-tơhàng • a = [1 2 3 4]’ – Véc-tơcột • a = [1;2;3;4] – Véc-tơcột • MATLAB tựđộng co giãncác ma trận
Véc-tơvà Ma trận • Truynhậpphầntử • C/Java: • int x = a[0]; • MATLAB: • x = a(1); • LƯU Ý!: • Ngoặctròn • Chỉsốbắtđầutừ1
Véc-tơvà Ma trận • Tạo ma trận • C/Java: int a[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; • MATLAB: • #1: a = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]; • #2: a = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];
Véc-tơvà Ma trận • Truynhậpphầntử • C/Java: • int x = a[2][3]; • MATLAB: • x = a(3,4); • Khôngphântáchbởingoặc • , phântáchcácchiềucủa ma trận • Chỉsốtừ 1 • Chỉsốđầulàhàng, chỉsốsaulàcột
Véc-tơvà Ma trận • Truynhậpnhiềuphầntử • Giảsửcó ma trậna • Làmthếnàotruynhậphàngđầutiên? • C/Java: • inti;for(i = 0; i < 4; i++) y[i] = x[0][i]; • MATLAB • y=x(1,:); • Khônglặp, dấu : đạidiệnchotấtcảcáccột
Véc-tơvà Ma trận • Truynhậpnhiềuphầntử • Giảsửcó ma trận x (9x9), muốntruynhậpvàophầntử 1, 3, 5, 7 hàngsố 1 • y = x(1,[1, 3, 5, 7]); • y = x(1,[true false true false true false true false false]);
Véc-tơvà Ma trận • Cácvídụkhác: • s = a(2,3); • s = a(1:3,3:4); • s = a(:, 1:3); • s = a(2:4,:); • Dòngmột:…..? • Dònghai:….? • Dòngba:….? • Dòngbốn:….?
Véc-tơvà Ma trận • Sao chép ma trận • J = a(:,:); • J = a;
Véc-tơvà Ma trận • Tạocácvéc-tơ, ma trậnvớicácgiátrịtăng/giảmđều • R = 0 : 0.1 : 1.0; • R = [0 0.1 0.2 0.3 … 1.0]; • Tổngquát: • x = Bắtđầu : Bước : Kếtthúc • Chú ý dấu : • Bướcmặcđịnhlà 1 (nếuthiếu)
Véc-tơvà Ma trận • Vídụ: • j = 0 : 2 : 10; • e = 3 : 3 : 30; • r = 1 : 10; • m = 2.0 : -0.2 : 0.4;
Véc-tơvà Ma trận • Các ma trậncơbảncủa MATLAB • eye(n): Ma trậnđơnvịnxn • ones(n, m): Ma trậngồmtoàn 1 kíchthướcnxm • zeros(n, m): Ma trậnkhôngnxm • Nếukhôngcó m (m=n mặcđịnh)
Cáctoántửcơbản • Cácphép *, /, \, và ^, cóthểthựchiệntrêntừngphầntử • Thêm . vàotrướctoántử • Vídụ: A .* B • Nhântừngcặpphầntửcủa A và B • Vídụ: [ 1 2; 3 4] .* [1 2; 3 4] = ?
Cáctoántửcơbản • len = length(V); • Giátrịlớnhơntrongcácchiềucủa V, nếu V làmảngmộtchiều, lenlàsốphầntử • [rows cols] = size(M); • Sốdòngvàsốcộtcủa M • sum(V): Cộngcácgiátrịcủa V theocột • sum(M, 1)= sum(M) • sum(M, 2): Cộngcácgiátrịcủa M theohàng • prod(M): tươngtựnhư sum nhưngtínhtích • sum, prod củamộtvéc-tơtínhtổng/tíchcủacácphầntử
File mã MATLAB • Cácchươngtrìnhphứctạpchứanhiềulệnhkhôngthểsoạnthảotrựctiếptrongcửasổlệnh • Mộttậplệnhphứctạpthườngđượcghivào file mã .m của MATLAB (text file) • Cóthể debug (break) khidùng file .m • MATLAB chỉchạy file .m nếunónằmtrongthưmụchiệntạihoặctrongđườngdẫnthưmụcđãđượckhaibáo • Khaibáocácđườngdẫnthưmục
Chươngtrình con • Mỗichươngtrình con đượcđặttrongmột file mãriêng, vớitên file vàtênchươngtrình con giốngnhau function[ra] = <Tênchươngtrình con>(vào) End • Khicómộtlờigọichươngtrình con, MATLAB sẽtìm file tươngứngtrongthưmụclàmviệchoặctrongcácthưmụcđãđượckhaibáo
Chươngtrình con • Biếntrongchươngtrình con làcụcbộ • Thamsốđượcdùngđểtruyềndữliệuvàochươngtrình con • Biến global cũngcóthểđượcdùng: • global x – quyđịnh x làbiếntoàncụcđượctruyxuất ở khắpnơi. • Vídụ: ? • Dấu % đểchúthích
Cáclệnhlậptrìnhcơbản If <điềukiện> elseif <điềukiện> else End for i=1:100 end for i=[1,2,3,4] End while continue==true break; conttinue; end
Đồthịvàbiểuđồ • figure – tạoramộtcửasổ • subplot(m,n,k) chia cửasổvẽthànhlướimxnchọn ô k đểvẽ (trái-> phải, trên -> dưới) • hold on: vẽchồng • hold off: xóatrướckhivẽ • plot(x,y) vẽhàm y theobiến x
Đồthịvàbiểuđồ • Vídụ: vẽhàm y=x^2 trongkhoảng -100 đến 100. • x=[-100:0.1:100]; • y=x.^2; • plot(x,y); • Vẽcácđồthịtrêncác ô khácnhau • plot(x1,y1,x2,y2,x3,y3,…); • Matlabtựthêmmàuchocácđồthị
Đồthịvàbiểuđồ • title(‘…’)Thêmtiêuđề • xlabel(‘…’), ylabel(‘…’)têncáctrục • xlim([min, max]) • ylim([min, max]) • plot(x, y, ‘line_style’); • line_style=‘redo-’, ‘bluex’, ‘green*’…
Vídụ: • Vẽmộtchukỳhàm sin tầnsố 50Hz • Vẽ10 chukỳhàm sin tầnsố 100Hz • Cộnghaihàmvàvẽhàmtổng • Tạosóng sin vàghivào file wave • Đọc file wave vàhiểnthịsóngâm • Nhậnxétgìvềtầnsốtínhiệuvàtầnsốlấymẫu? wavwrite(x1,1/Ts,'c:\temp\100.wav'); wavwrite(x2,1/Ts,'c:\temp\50.wav'); wavwrite(x3,1/Ts,'c:\temp\mixed.wav');