Tài liệu Thực hành xử lý tín hiệu số - Phạm Hùng Kim Khánh

BỘ GIÁO DỤC VÀ ĐÀO TẠO  
ĐẠI HỌC CÔNG NGHỆ TP.HCM  
T
HỰC HÀNH XỬ LÝ TÍN  
HIỆU SỐ  
Biên soạn:  
ThS. Phạm Hùng Kim Khánh  
THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ  
Ấn bản 2014  
MỤC LỤC  
I
MỤC LỤC  
 
TRANG 2 > THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ  
II  
I
HƯỚNG DẪN  
HƯỚNG DẪN  
MÔ TẢ MÔN HỌC  
Thực hành xử lý tín hiệu số là môn học hỗ trợ cho môn Xử lý tín hiệu số của chuyên  
ngành Kỹ thuật Điện tử Truyền thông. Môn học này dựa trên MATLAB để kiểm chứng  
các lý thuyết đã học trong môn Xử lý tín hiệu số.  
NỘI DUNG MÔN HỌC  
Bài 1. Phần mềm MATLAB: cơ bản về MATLAB, cách lập trình cũng như cách xử lý  
ma trận, vẽ đồ thị trong MATLAB.  
Bài 2: Tín hiệu rời rạc theo thời gian: cách biểu diễn tín hiệu và hệ thống rời rạc theo  
thời gian, các tính chất và đáp ứng xung của hệ LTI.  
Bài 3: Biến đổi z và z ngược: chuyển tín hiệu từ miền thời gian sang miền z, các tính  
chất của biến đổi z và chuyển tín hiệu hữu tỷ trên miền z sang miền thời gian.  
Bài 4: Biến đổi Fourier rời rạc: chuyển tín hiệu rời rạc trên miền thời gian sang miền  
tần số, dùng các thuật toán FFT để xác định biến đổi Fourier rời rạc.  
Bài 5: Bộ lọc số FIR: thiết kế bộ lọc FIR theo yêu cầu cho trước.  
Bài 6: Bộ lọc số IIR: thiết kế bộ lọc IIR theo yêu cầu cho trước.  
KIẾN THỨC TIỀN ĐỀ  
Môn học Thực hành Xử lý tín hiệu số đòi hỏi sinh viên có nền tảng về Xử lý tín hiệu  
số.  
YÊU CẦU MÔN HỌC  
Người học phải dự học đầy đủ các buổi lên lớp và làm bài tập đầy đủ.  
CÁCH TIẾP NHẬN NỘI DUNG MÔN HỌC  
 
TRANG 4 > THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ  
Để học tốt môn này, người học cần thực hành theo hướng dẫn, làm các bài tập; đọc  
trước bài mới và tìm thêm các thông tin liên quan đến bài học.  
PHƯƠNG PHÁP ĐÁNH GIÁ MÔN HỌC  
Môn học được đánh giá gồm:  
Điểm quá trình: 30%. Hình thức và nội dung do giảng viên quyết định, phù hợp với  
quy chế đào tạo và tình hình thực tế tại nơi tổ chức học tập.  
Điểm thi: 70%. Hình thức bài thi trên máy tính trong 60 phút.  
BÀI 1: PHẦN MỀM MATLAB  
5
BÀI 1: PHẦN MỀM MATLAB  
Sau khi học xong bài này, người học có thể:  
Sử dụng phần mềm MATLAB.  
Thực hiện tạo các script file hay function và lưu trữ trên MATLAB.  
Biết được các công cụ cơ bản trên MATLAB.  
1.1 KHỞI ĐỘNG MATLAB  
MATLAB (Matrix laboratory) là phần mềm dùng để giải các bài toán kỹ thuật, đặc biệt  
là các bài toán liên quan đến ma trận. MATLAB cung cấp các toolboxes, tức các hàm mở  
rộng môi trường MATLAB để giải quyết các vấn đề đặc biệt như xử lý tín hiệu số, hệ thống  
điều khiển, mạng neuron, fuzzy logic, mô phỏng v.v.  
Cửa sổ biểu tượng của chương trình MATLAB:  
Hình 1.1 - Cửa sổ khởi động của MATLAB  
   
BÀI 1: PHẦN MỀM MATLAB  
6
Cửa sổ làm việc của MATLAB:  
Thư mục  
hiện hành  
Workspace: các  
biến trong bộ nhớ  
Danh sách các file  
hiện có trong thư  
mục hiện hành  
Cửa sổ lệnh  
Nút Start: chứa  
các toolbox  
Các lệnh đã  
thực hiện  
Hình 1.2 – Cửa sổ làm việc của MATLAB  
Cửa sổ lệnh (Command window):  
Là cửa sổ giao tiếp chính của MATLAB bởi đây là nơi nhập giá trị các biến, hiển thị giá  
trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện hoặc các hàm  
do người dùng lập trình ra trong M-files. Các lệnh được nhập sau dấu nhắc ‘>>‘ và thực  
thi lệnh bằng phím Enter. Để mở chương trình soạn thảo trong MATLAB, gõ lệnh:  
>>edit  
Hình 1.3 – Cửa sổ edit để soạn script file hay function  
BÀI 1: PHẦN MỀM MATLAB  
7
Sau đó nhập vào đoạn chương trình sau:  
% Chuong trinh trong M-file  
x= 0:pi/6:2*pi;  
y=sin(x);  
plot(x,y);  
Lưu chương trình với tên file plot_sin.m bằng cách nhấn Ctrl+S hay nhấn vào biểu  
tượng Save  
.
Giải thích đoạn chương trình trên: Dòng 1 là dòng chú thích, các chuỗi ở phía sau dấu  
% sẽ không được dịch. Dòng 2 định nghĩa vector x trong khoảng từ 0 đến 2và mỗi giá  
trị cách nhau một khoảng /6. Dòng 3 gán biến y = sin(x) và dòng 4 vẽ đồ thị trong đó  
x là trục hoành và y là trục tung.  
Hình 1.4 – Lưu file trong cửa số Edit  
Thực thi chương trình trên trong Command window bằng dòng lệnh sau:  
>>plot_sin  
Cửa sổ Command History:  
Các dòng đã nhập trong Command window (các dòng này có thể là dòng nhập biến,  
có thể là dòng lệnh) được giữ lại trong cửa sổ Command History và cửa sổ này cho phép  
ta sử dụng lại những lệnh đó bằng cách nhấp đúp chuột lên các lệnh hay biến đó  
Cửa sổ Workspace:  
BÀI 1: PHẦN MỀM MATLAB  
8
Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số bytes),  
kiểu dữ liệu (lớp), các biến được giải phóng sau mỗi lần tắt chương trình. Cửa sổ  
Workspace cho phép thay đổi giá trị của biến bằng cách nhấn phím chuột phải lên các  
biến và chọn Edit.  
Nút Start:  
Hình 1.5 – Nút Start  
Cửa sổ Edit:  
Là cửa sổ dùng để soạn thảo chương trình ứng dụng, được khởi động bằng lệnh edit  
trong Command Window. Chương trình soạn thảo trong cửa sổ edit có 2 dạng:  
+ Dạng Script file : tập hợp các câu lệnh viết dưới dạng liệt kê, không có biến dữ liệu  
vào và biến ra.  
+ Dạng function: có biến dữ liệu vào và biến ra.  
1.2 CÁC VẤN ĐỀ CƠ BẢN  
1.2.1 Các phép toán và toán tử  
Các phép toán: + , - , * , / , \ (chia trái) , ^ (mũ) , ‘ (chuyển vị hay số phức liên  
hiệp).  
Các toán tử quan hệ : < , <= , > , >= , == , ~=  
Các toán tử logic : & , | (or) , ~ (not)  
Các hằng:  
pi  
3.14159265  
   
BÀI 1: PHẦN MỀM MATLAB  
9
i, j  
số ảo  
eps  
sai số 2-52  
realmin  
realmax  
inf  
số thực nhỏ nhất 2-1022  
số thực lớn nhất 21023  
vô cùng lớn  
NaN  
Not a number  
Chú ý :  
+ Các lệnh kết thúc bằng dấu chấm phẩy, MATLAB sẽ không thể hiện kết quả  
trên màn hình.  
+ Các chú thích được đặt phía sau dấu %.  
+ Trong quá trình nhập nếu các phần tử trên một hàng dài quá ta có thể  
xuống dòng bằng toán tử ba chấm (. . .)  
1.2.2 Khai báo biến  
- Phân biệt chữ hoa và chữ thường.  
- Không cần phải khai báo kiểu biến.  
- Tên biến phải bắt đầu bằng ký tự và không được có khoảng trắng.  
- Không đặt tên trùng với các tên đặc biệt của MATLAB.  
- Để khai báo biến toàn cục (sử dụng được trong tất cả chương trình con), phải dùng  
thêm từ khoá global phía trước.  
1.2.3 Các lệnh thường dùng  
>>help tên_hàm % tham khảo help của hàm  
>>lookfor ‘chuỗi’ %Tìm kiếm chuỗi  
Ví dụ: >>lookfor ‘filter’ % Tìm các hàm có liên quan đến mạch lọc  
>>clc % Xoá màn hình  
>>clear tên_biến % Xoá biến  
>>clear all %Xoá tất cả các biến  
>> clf %Xoá figure  
>>save % Lưu các biến hiện có trong bộ nhớ  
>>load % Lấy nội dung các biến đã lưu  
>>who % liệt kê các biến trong bộ nhớ  
>>whos % liệt kê chi tiết các biến trong bộ nhớ  
>>which % Xác định vị trí của hàm hay file  
   
BÀI 1: PHẦN MỀM MATLAB  
10  
Ví dụ: >>which plot %Xác định vị trí của hàm plot  
>>what % Liệt kê các file có trong một thư mục  
1.3 LẬP TRÌNH TRONG MATLAB  
1.3.1 Các phát biểu điều kiện if, else, elseif  
Cú pháp của if:  
if <biểu thức điều kiện>  
<phát biểu>  
end  
Nếu <biểu thức điều kiện> cho kết quả đúng thì phần lệnh trong thân của if được  
thực hiện. Các phát biểu else và elseif cũng tương tự.  
1.3.2 Switch  
Cú pháp của switch như sau:  
switch <biểu thức>  
case n1  
<lệnh 1>  
case n2  
<lệnh 2>  
. . . . . . . . . . . . . . .  
case nn  
<lệnh n>  
Otherwise  
<lệnh n+1>  
end  
1.3.3 While  
Vòng lặp while dùng khi không biết trước số lần lặp. Cú pháp của nó như sau:  
while <biểu thức>  
<phát biểu>  
end  
       
BÀI 1: PHẦN MỀM MATLAB  
11  
1.3.4 For  
Vòng lặp for dùng khi biết trước số lần lặp. Cú pháp như sau:  
for <chỉ số>=<giá trị đầu>:<mức tăng>:<giá trị cuối>  
1.3.5 Break:  
Phát biểu break để kết thúc vòng lặp for hay while mà không quan tâm đến điều kiện  
kết thúc vòng lặp đã thoả mãn hay chưa.  
1.4 MA TRẬN  
1.4.1 Các thao tác trên ma trận  
1.4.1.1 Nhập ma trận  
Ma trận là một mảng có m hàng và n cột. Trường hợp ma trận chỉ có một phần tử  
(ma trận 1x1) ta có một số. Ma trận chỉ có một cột hay một hàng được gọi là một vector.  
Ta có thể nhập ma trận vào MATLAB bằng nhiều cách:  
• Nhập một danh sách các phần tử từ bàn phím.  
• Nạp ma trận từ file.  
• Tạo ma trận nhờ các hàm có sẵn trong MATLAB.  
• Tạo ma trận nhờ hàm tự tạo.  
Khi nhập ma trận từ bàn phím ta phải tuân theo các quy định sau:  
• Ngăn cách các phần tử của ma trận bằng dấu “,” hay khoảng trắng.  
• Dùng dấu “;” để kết thúc một hàng.  
• Bao các phần tử của ma trận bằng cặp dấu ngoặc vuông [ ].  
1.4.1.2 Chỉ số  
Phần tử ở hàng i cột j của ma trận có ký hiệu là A(i,j). Tuy nhiên, ta cũng có thể tham  
chiếu tới phần tử của mảng nhờ một chỉ số, ví dụ A(k). Trong trường hợp này, ma trận  
được xem là một cột dài tạo từ các cột của ma trận ban đầu.  
Như vậy viết A(8) có nghĩa là tham chiếu phần tử A(4, 2) (nếu ma trận có 4 hàng).  
Lưu ý rằng các chỉ số của ma trận thường bắt đầu từ 1.  
1.4.1.3 Toán tử “:”  
       
BÀI 1: PHẦN MỀM MATLAB  
12  
Toán tử “:” là một toán tử quan trọng của MATLAB. Nó xuất hiện ở nhiều dạng khác  
nhau. Biểu thức 1:10 là một vector hàng chứa 10 số nguyên từ 1 đến 10.  
>>1:10  
>>100:‐7:50 %tạo dãy số từ 100 đến 51, cách đều nhau 7  
>>0: pi/4: pi %tạo một dãy số từ 0 đến , cách đều nhau /4  
Các biểu thức chỉ số có thể tham chiếu tới một phần của ma trận. A(1:k,j) xác định k  
phần tử đầu tiên của cột j. Ngoài ra toán tử “:” tham chiếu tới tất cả các phần tử của một  
hàng hay một cột.  
>>A(:,3)  
>>A(3, :)  
>>B = A(:, [1 3 2 4]) %tạo ma trận B từ ma trận A bằng cách đổi  
thứ tự các cột từ [1 2 3 4] thành [1 3 2 4]  
1.4.1.4 Tạo ma trận bằng hàm có sẵn  
MATLAB cung cấp một số hàm để tạo các ma trận cơ bản:  
- zeros tạo ra ma trận mà các phần tử đều là 0.  
>>z = zeros(2, 4)  
- ones tạo ra ma trận mà các phần tử đều là 1.  
>>x = ones(2, 3)  
>>y = 5*ones(2, 2)  
- rand tạo ra ma trận mà các phần tử ngẫu nhiên phân bố đều.  
>>d = rand(4, 4)  
- randn tạo ra ma trận mà các phần tử ngẫu nhiên phân bố chuẩn.  
>>e = randn(3, 3)  
- magic(n) tạo ra ma trận cấp n gồm các số nguyên từ 1 đến n2 với tổng các hàng  
bằng tổng các cột và bằng tổng các đường chéo (n 3).  
- pascal(n) tạo ra tam giác Pascal.  
>>pascal(4)  
- eye(n) tạo ma trận đơn vị  
>>eye(3)  
- eye(m,n) tạo ma trận đơn vị mở rộng  
BÀI 1: PHẦN MỀM MATLAB  
13  
>>eye(3,4)  
1.4.1.5 Nối ma trận  
Ta có thể nối các ma trận có sẵn thành một ma trận mới. Ví dụ:  
>>a = ones(3, 3);  
>>b = 5*ones(3, 3);  
>>c = [a+2; b]  
1.4.1.6 Xoá hàng và cột  
Ta có thể xoá hàng và cột từ ma trận bằng dùng dấu [].  
>>b(:, 2) = [] ; %xoá cột thứ 2  
>>b(1:2:5) = []; % xoá các phần tử bắt đầu từ 1 đến 5 và cách 2  
(1,3,5) rồi sắp xếp lại ma trận.  
1.4.1.7 Các lệnh xử lý ma trận  
Cộng : X = A + B  
Trừ : X = A - B  
Nhân : X = A*B  
X = A.*B nhân các phần tử tương ứng với nhau, yêu cầu 2 ma trận A và B phải có  
cùng kích thước.  
Chia : X = A/B lúc đó X = A * inv(B)  
X = A\B lúc đó X = inv(A) * B  
X=A./B chia các phần tử tương ứng với nhau, 2 ma trận A và B có cùng kích thước.  
Luỹ thừa : X = A^2  
X = A.^2  
Nghịch đảo: X = inv(A)  
Định thức: d = det(A)  
Để tạo ma trận trong MATLAB ta chỉ cần liệt các phần tử của ma trận trong cặp dấu  
ngoặc vuông ([…]). Các phần tử trên cùng hàng được phân biệt bởi dấu phẩy (,) hoặc  
khoảng trắng (space). Các hàng của ma trận, phân cách nhau bởi dấu chấm phẩy (;). Ví  
dụ, nhập ma trận A có 4 hàng, 4 cột như sau:  
>> A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]  
BÀI 1: PHẦN MỀM MATLAB  
14  
>> size(A)  
Để truy xuất đến từng phần tử của ma trận ta dùng chỉ số phần tử tương ứng. Ví dụ,  
phần tử ở hàng thứ 2, cột thứ 3 của A là A(2,3).  
>> A(2,3)  
Bài 1.1. Cho ma trận A = [2 4 1; 6 7 2; 3 5 9], sinh viên dùng các lệnh cần thiết để:  
a. Lấy dòng đầu tiên của ma trận A.  
b. Tạo ma trận B bằng 2 dòng cuối cùng của A.  
c. Tính tổng các phần tử trên các cột của A. (gợi ý: tính tổng các phần tử trên cột 1:  
sum(A(:,1))).  
d. Tính tổng các phần tử trên các dòng của A.  
Bài 1.2. Cho ma trận A = [2 7 9 7; 3 1 5 6; 8 1 2 5], sinh viên giải thích kết quả của  
các lệnh sau:  
a. A'  
b. A(:,[1 4])  
c. A([2 3],[3 1])  
d. reshape(A,2,6)  
e. A(:)  
f. [A;A(end,:)]  
g. A(1:3,:)  
h. [A ; A(1:2,:)]  
i. sum(A)  
j. sum(A')  
k. [ [ A ; sum(A) ] [ sum(A,2) ; sum(A(:)) ] ]  
Bài 1.3. Giải hệ phương trình sau:  
2x1 + 4x2 + 6x3 – 2x4 = 0  
x1 + 2x2 + x3 + 2x4 = 1  
2x2 + 4x3 + 2x4 = 2  
3x1 - x2 + 10x4 = 10.  
Gợi ý: A.X = B X = inv(A).B  
BÀI 1: PHẦN MỀM MATLAB  
15  
Bài 1.4. Chứng tỏ rằng (A+B)C=AC+BC, với:  
1.4.2 Vector  
Vector thực chất là ma trận có kích thước n x 1 hay 1 x n, nên ta có thể tạo ra vector  
như cách tạo ra ma trận. Ngoài ra, có thể dùng một số cách sau:  
>>x=0:0.1:1  
>>y=linspace(1, 10, 20) % vector 20 phan tu cach deu nhau tu 1  
den 10  
>>z=rand(10,1) ; tạo 10 số ngẫu nhiên phân bố đều  
Bài 1.5. Cho vector x = [3 1 5 7 9 2 6], giải thích kết quả của các lệnh sau:  
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)  
Bài 1.6. Tạo một vector x có 100 phần tử, sao cho: x(n) = (-1)n+1/(2n+1) với n = 0  
– 99.  
1.4.3 Đa thức  
Các đa thức trong MATLAB được mô tả bằng các vector hàng với các phần tử của  
vector chính là các hệ số của đa thức, xếp theo thứ tự số mũ giảm dần. Ví dụ, đa thức m  
= s4-s3+4s2-5s-1 được biểu diễn là:  
>>m=[1 -1 4 -5 -1]  
Để xác định giá trị của đa thức, ta dùng hàm polyval. Ví dụ, xác định giá trị của đa  
thức tại điểm s=2:  
   
BÀI 1: PHẦN MỀM MATLAB  
16  
>>polyval(m,2)  
Để xác định nghiệm của đa thức, ta dùng hàm roots. Ví dụ:  
>>roots(m)  
Bài 1.7. Cho phương trình ax2+bx+c=0, giải phương trình dùng hàm roots.  
>>m=[a b c];  
>>x=roots(m)  
Thay đổi các giá trị khác nhau của a, b và c tương ứng trong 2 cách giải trên.  
Bài 1.8. Giải phương trình x3- 2x2+4x+5=0. Kiểm chứng kết quả thu được bằng hàm  
polyval. Sinh viên có nhận xét gì về kết quả kiểm chứng.  
Bài 1.9. Lặp lại bài 1.8 cho phương trình x7-2=0.  
1.5 ĐỒ HOẠ  
1.5.1 Các lệnh vẽ  
MATLAB cung cấp một loạt hàm để vẽ biểu diễn các vector cũng như giải thích và in  
các đường cong này.  
plot: đồ họa 2-D với số liệu 2 trục vô hướng và tuyến tính  
plot3: đồ họa 3-D với số liệu 2 trục vô hướng và tuyến tính  
loglog: đồ hoạ với các trục x, y ở dạng logarit  
semilogx: đồ hoạ với trục x logarit và trục y tuyến tính  
semilogy: đồ hoạ với trục y logarit và trục x tuyến tính  
1.5.2 Tạo hình vẽ  
Hàm plot có các dạng khác nhau phụ thuộc vào các đối số đưa vào. Ví dụ nếu y là  
một vector thì plot(y) tạo ra một đường quan hệ giữa các giá trị của y và chỉ số của nó.  
Nếu ta có 2 vector x và y thì plot(x,y) tạo ra đồ thị quan hệ giữa x và y.  
>>t = [0:pi/100:2*pi];  
>>y = sin(t);  
>>plot(t,y); % Vẽ hình sin từ 0->2  
>>grid on  
1.5.3 Kiểu đường vẽ  
Ta có thể dùng các kiểu đường vẽ khác nhau khi vẽ hình.  
>>t = [0:pi/100:2*pi];  
       
BÀI 1: PHẦN MỀM MATLAB  
17  
>>y = sin(t);  
>>plot(t,y,’.‘) % vẽ bằng đường chấm chấm  
Để xác định màu và kích thước đường vẽ, ta dùng các tham số sau:  
LineWidth  
: độ rộng đường thẳng, tính bằng số điểm  
MarkerEdgeColor : màu của các cạnh của khối đánh dấu  
MarkerFaceColor : màu của khối đánh dấu  
MarkerSize  
: kích thước của khối đánh dấu  
Màu được xác định bằng các tham số:  
r: red  
m magenta  
k: black  
g: green  
c: cyan  
y: yellow  
w: white  
b: blue  
Các dạng đường thẳng xác định bằng:  
- đường liền  
-- đường đứt nét  
-. đường chấm gạch  
: đường chấm chấm  
Các dạng điểm đánh dấu xác định bằng:  
+ dấu cộng  
. điểm  
o vòng tròn x chữ thập  
* dấu sao  
s hình vuông  
d hạt kim cương  
v tam giác hướng xuống  
< tam giác sang trái  
^ tam giác hướng lên  
> tam giác sang phải  
h lục giác  
p ngũ giác  
>>x = -pi : pi/10 : pi;  
>>y = tan(sin(x)) - sin(tan(x));  
>>plot(x,y,ʹ‐‐rs’,ʹLineWidthʹ,2,ʹMarkerEdgeColorʹ,ʹkʹ,...  
ʹMarkerFaceColorʹ,ʹgʹ,ʹMarkerSizeʹ,10)  
Để vẽ hai hàm trên cùng một đồ thị, ta dùng lệnh:  
>>hold on  
1.5.4 Vẽ với hai trục y  
Hàm plotyy cho phép tạo một đồ thị có hai trục y. Ta cũng có thể dùng plotyy để cho  
giá trị trên hai trục y có kiểu khác nhau nhằm tiện so sánh.  
>>t = 0:900;  
>>A = 1000;  
 
Tải về để xem bản đầy đủ
pdf 76 trang myanh 22600 Free
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Thực hành xử lý tín hiệu số - Phạm Hùng Kim Khánh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdftai_lieu_thuc_hanh_xu_ly_tin_hieu_so_pham_hung_kim_khanh.pdf