You are on page 1of 42

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
• Các toán tử cơ bản
• File mã MATLAB
• Chương trình con
• Lệnh lập trình cơ bản
• Đồ thị và biểu đồ
Giới thiệu MATLAB
• MATLAB: MATrix LABoratory
• Phát triển bởi Cleve Moler từ 1970
• Được sử dụng nhiều trong tính toán:
– Lý thuyết ma trận
– Đại số tuyến tính
– Các phương pháp số
• Các tính năng nổi bật khác:
– Mô phỏng
– Giải toán symbolic
Giới thiệu MATLAB
• Ưu điểm của MATLAB (so với các ngôn ngữ khác):
– Dễ lập trình
– Khả năng tạo các đồ thị, biểu đồ dễ dàng
– Giao diện thân thiện
• Trong môn học này MATLAB được dùng để:
– Làm các thí nghiệm đơn giản: tạo, xử lý và hiển thị các tín
hiệu
– Phân tích phổ tín hiệu
– Thực hiện các bộ lọc tín hiệu
Bắt đầu với MATLAB
• Cài đặt MATLAB
Bắt đầu với MATLAB
• Chạy MATLAB
Biến trong MATLAB
• MATLAB là ngôn ngữ lập trình có kiểu biến
động
• Biến được khai báo và khởi tạo mà không cần
chỉ định kiểu
• Ví dụ: x = 1.0; y = [1 2;3 4];
Biến trong MATLAB
• Phép gán: x = y, MATLAB tự khai báo x và gán
cho x kiểu tương ứng
• Tên biến:
– Không có dấu cách
– Chứa các chữ cái, số và dấu gạch chân, không bắt
đầu bằng số
– Tên biến phân biệt chữ hoa và chữ thường: x khác
X
– Độ dài tối đa của tên biến là 19
Biến trong MATLAB
• Tên biến hợp lệ:
– voltage
– valueOfR1
– Ron_and_Mauro
– _Alan2007_
• Tên biến không hợp lệ:
– 123
– value of R1
– 3v
– X#*()$#$!!!
Các lệnh cơ bản của MATLAB
• Panel trái: Thư mục / Không gian biến
– A) Thư mục hiện tại MATLAB đang làm việc
– B) Biến và giá trị của biến đã được tạo ra
• Panel phải: Cửa sổ lệnh
– Nhập lệnh cho MATLAB
– Lệnh không có dấu ; sẽ in kết quả thực thi ra cửa sổ lệnh
– Lệnh có dấu ; sẽ không in kết quả thực thi
Các lệnh cơ bản của MATLAB
• Cách nhập lệnh:
– Một lệnh một dòng kết thúc bằng ENTER
– Nhiều lệnh một dòng:
• Dùng ; để tách lệnh
• Dùng , để tách lệnh (in kết quả thực thi)
• Nhập tên biến + ENTER = xem giá trị biến
• Nhập một giá trị + ENTER , MATLAB tạo ra biến ans
(answer) với giá trị đã nhập
Các lệnh cơ bản của MATLAB
Các lệnh cơ bản của MATLAB
• who: Hiện các biến đã được tạo ra
• clear:
– all: Xóa hết các biến
– x: Xóa biến x
• clc: Xóa cửa sổ lệnh
– Biến vẫn tồn tại
Các lệnh cơ bản của MATLAB
Các lệnh cơ bản của MATLAB
• Giá trị trong MATLAB có thể là phức
– X=1+2i
– Y=1+2j
Các lệnh cơ bản của MATLAB
• Cửa số lịch sử: Các lệnh đã dùng gần đây
• Nháy đúp để chạy lại lệnh
• Nhấn phìm lên, xuống, trái, phải
cho phép duyệt lại các lệnh
đã dùng
Véc-tơ và Ma trận
• MATLAB xem các biến là các ma trận 2 chiều
(trừ khi có chỉ định rõ ràng)
– Mảng và 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
• Khai báo vé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ãn các ma trận
Véc-tơ và Ma trận
• Truy nhập phần tử
– C/Java:
• int x = a[0];
– MATLAB:
• x = a(1);
• LƯU Ý!:
– Ngoặc tròn
– Chỉ số bắt đầu từ 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
• Truy nhập phần tử
– C/Java:
• int x = a[2][3];
– MATLAB:
• x = a(3,4);
– Không phân tách bởi ngoặc
– , phân tách các chiều của ma trận
– Chỉ số từ 1
– Chỉ số đầu là hàng, chỉ số sau là cột
Véc-tơ và Ma trận
• Truy nhập nhiều phần tử
• Giả sử có ma trận a
– Làm thế nào truy nhập hàng đầu tiên?
– C/Java:
• int i;
for(i = 0; i < 4; i++)
y[i] = x[0][i];
– MATLAB
• y=x(1,:);
• Không lặp, dấu : đại diện cho tất cả các cột
Véc-tơ và Ma trận
• Truy nhập nhiều phần tử
• Giả sử có ma trận x (9x9), muốn truy nhập vào
phần tử 1, 3, 5, 7 hàng số 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ác ví dụ khác:
– s = a(2,3);
– s = a(1:3,3:4);
– s = a(:, 1:3);
– s = a(2:4,:);
• Dòng một:…..?
• Dòng hai:….?
• Dòng ba:….?
• Dòng bố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
Véc-tơ và Ma trận
• Tạo các véc-tơ, ma trận với các giá trị
tăng/giảm đều
– R = 0 : 0.1 : 1.0;
– R = [0 0.1 0.2 0.3 … 1.0];
• Tổng quát:
– x = Bắt đầu : Bước : Kết thúc
– Chú ý dấu :
– Bước mặc định là 1 (nếu thiế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ận cơ bản của MATLAB
– eye(n): Ma trận đơn vị nxn
– ones(n, m): Ma trận gồm toàn 1 kích thước nxm
– zeros(n, m): Ma trận không nxm
– Nếu không có m (m=n mặc định)
Các toán tử cơ bản
Các toán tử cơ bản
• Các phép *, /, \, và ^, có thể thực hiện trên từng
phần tử
– Thêm . vào trước toán tử
• Ví dụ: A .* B
– Nhân từng cặp phần tử của A và B
• Ví dụ: [ 1 2; 3 4] .* [1 2; 3 4] = ?
Các toán tử cơ bản
• len = length(V);
– Giá trị lớn hơn trong các chiều của V, nếu V là mảng một chiều, len là
số phần tử
• [rows cols] = size(M);
– Số dòng và số cột của M
• sum(V): Cộng các giá trị của V theo cột
• sum(M, 1) = sum(M)
• sum(M, 2): Cộng các giá trị của M theo hàng
• prod(M): tương tự như sum nhưng tính tích
• sum, prod của một véc-tơ tính tổng/tích của các phần
tử
File mã MATLAB
• Các chương trình phức tạp chứa nhiều lệnh không
thể soạn thảo trực tiếp trong cửa sổ lệnh
• Một tập lệnh phức tạp thường được ghi vào file
mã .m của MATLAB (text file)
• Có thể debug (break) khi dùng file .m
• MATLAB chỉ chạy file .m nếu nó nằm trong thư
mục hiện tại hoặc trong đường dẫn thư mục đã
được khai báo
• Khai báo các đường dẫn thư mục
File mã MATLAB
Chương trình con
• Mỗi chương trình con được đặt trong một file
mã riêng, với tên file và tên chương trình con
giống nhau
function [ra] = <Tên chương trình con>(vào)
End
• Khi có một lời gọi chương trình con, MATLAB
sẽ tìm file tương ứng trong thư mục làm việc
hoặc trong các thư mục đã được khai báo
Chương trình con
• Biến trong chương trình con là cục bộ
• Tham số được dùng để truyền dữ liệu vào
chương trình con
• Biến global cũng có thể được dùng:
– global x – quy định x là biến toàn cục được truy
xuất ở khắp nơi.
– Ví dụ: ?
• Dấu % để chú thích
Các lệnh lập trình cơ bản
If <điều kiện>
elseif <điều kiệ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ạo ra một cửa sổ
• subplot(m,n,k) chia cửa sổ vẽ thành lưới mxn
chọn ô k để vẽ (trái -> phải, trên -> dưới)
• hold on: vẽ chồng
• hold off: xóa trước khi vẽ
• plot(x,y) vẽ hàm y theo biến x
Đồ thị và biểu đồ
• Ví dụ: vẽ hàm y=x^2 trong khoảng -100 đến
100.
– x=[-100:0.1:100];
– y=x.^2;
– plot(x,y);
• Vẽ các đồ thị trên các ô khác nhau
• plot(x1,y1,x2,y2,x3,y3,…);
• Matlab tự thêm màu cho các đồ thị
Đồ thị và biểu đồ
• title(‘…’) Thêm tiêu đề
• xlabel(‘…’), ylabel(‘…’) tên các
trục
• xlim([min, max])
• ylim([min, max])
• plot(x, y, ‘line_style’);
• line_style=‘redo-’, ‘bluex’, ‘green*’…
Đồ thị và biểu đồ
Ví dụ:
• Vẽ một chu kỳ hàm sin tần số 50Hz
• Vẽ 10 chu kỳ hàm sin tần số 100Hz
• Cộng hai hàm và vẽ hàm tổng
• Tạo sóng sin và ghi vào file wave
• Đọc file wave và hiển thị sóng âm
• Nhận xét gì về tần số tín hiệu và tần số lấy mẫ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');

You might also like