Tài liệu TN Xử Lý Số Tín Hiệu online Đại học Bách Khoa Thành phố Hồ chí Minh (HCMUT) Bài 1: Giới thiệu tổng quan về Matlab và một số lệnh chức năng cơ bản. Giới thiệu công cụ SPTool trong hỗ trợ thiết kế bộ lọc số. Thực thi chương trình trên Matlab với các lệnh cơ bản về xử lý tín hiệu rời rạc.
Trang 1BÀI 1: GIỚI THIỆU MATLAB CƠ BẢN
1 MỤC ĐÍCH THÍ NGHIỆM
- Giới thiệu tổng quan về Matlab và một số lệnh chức năng cơ bản
- Giới thiệu công cụ SPTool trong hỗ trợ thiết kế bộ lọc số
- Thực thi chương trình trên Matlab với các lệnh cơ bản về xử lý tín hiệu rời rạc
2 THIẾT BỊ THÍ NGHIỆM
01 Máy vi tính cá nhân có cài đặt phần mềm Matlab® 01
3 GIỚI THIỆU MATLAB® VÀ MỘT SỐ LỆNH CƠ BẢN
Matlab (Matrix Laboratory) là môi trường tính toán đa ứng dụng, được tính toán để thực hiệnnhanh các phép toán ma trận Matlab hỗ trợ nhiều hàm phục vụ cho nhiều lĩnh vực khác nhau.Matlab cho phép thực hiện dễ dàng các tính toán số và đồ họa Khi khởi động Matlab, giao diênlàm việc sẽ xuất hiện như hình 1, với các cửa số sau:
Cửa sổ lệnh (command window): thực thi các lệnh.
Không gian biến (workspace): hiện thị các biến được định nghĩa.
Các lệnh đã thực hiện (command history): hiện thị các lệnh đã sử dụng.
Trang 2Hình 1 Các cửa sổ làm việc của Matlab
Để tra cứu thông tin của một hàm, chúng ta sử dụng cú pháp lệnh “help + tên hàm” trên cửa
sổ lệnh Một ví dụ về tra thông tin của làm ‘sqrt’ được thực hiện như hình 2
Hình 2 Lệnh giúp đỡ (help)
Matlab cung cấp 2 phương thức để thực thi các lệnh gồm i) Nhập lệnh từ dấu nhắc của cửa sổlênh và ii) thực thi lệnh thông qua M-files sử dụng Matlab Editor
Trang 3Một ví dụ về việc thực thi các lệnh từ dấu nhắc của cửa sổ lệnh được thực hiện cho phép cộng
5 + 3 và lưu kết quả vào biến ‘a’ như sau:
khi đó Matlab trả về kết quả là a = 8 Trong trường hợp biến lưu không được gán thì kết quả sẽđược lưu trong biến ‘ans.’
Ngoài ra, Matlab cho phép thực hiện các lệnh thông qua M-files sử dụng ‘Matlab Editor.’Hầu hết các lệnh được tạo trong Matlab sẽ được lưu trữ dưới dạng tệp có phần mở rộng m Cáctệp m này chứa một chuỗi các lệnh Matlab được thực thi theo thứ tự khi chúng được gọi Để tạomột tệp m, trước tiên, hãy duyệt qua cửa sổ thư mục hiện tại trên thanh công cụ và đặt thư mục
mà các tập lệnh Matlab sẽ được lưu trữ Tiếp theo, mở một tệp văn bản mới bằng cách nhấp vàobiểu tượng tài liệu trống trên thanh công cụ Một tập lệnh trống mới sẽ được hiển thị trong cửa sổ
‘Editor.’ Tập lệnh có thể là một chuỗi các lệnh, sẽ được thực hiện từ trên xuống dưới Các tệp M
có thể được gọi và thực thi từ cửa sổ lệnh bằng cách nhập tên của chúng Ví dụ, bằng cách gõScript trên cửa sổ lệnh, một tệp m có tên Script.m sẽ được gọi và thực thi (Bạn cũng có thể chạytập lệnh bằng menu gỡ lỗi trong trình chỉnh sửa hoặc phím tắt “Lưu và chạy”, F5.)
(Gợi ý: Không nên đặt tên tập lệnh bắt đầu bằng các số chẳng hạn như 123testing.m Matlab
sẽ coi một lệnh bắt đầu bằng một số như một phép tính và vì 123testing là một phép tính khônghợp lệ trong MATLAB, một lỗi sẽ được trả về.)
Các chú thích có thể được chèn vào dòng lệnh bằng cách thêm ‘%’ vào đầu câu lệnh của bạn
Ví dụ:
tan(x) = sin(x)/cos(x) %Tangent of an argument in radians
Bất kỳ câu lệnh nào xuất hiện sau dấu “%” trên một dòng đều bị MATLAB bỏ qua và coi nhưmột nhận xét
Ví dụ tạo hàm M-files thực hiện phép cộng 5 + 3 được thực hiện qua các bước sau:
Trang 4Bước 1: từ của sổ HOME chọn tab new, sau đó chọn ‘Script’
Bước 2: Viết lệnh vào cửa sổ script mới tạo sau đó lưu lại với tên bất kỳ Khi đó chúng tađược 1 file m lưu trong không gian ‘Current Folder’ như hình sau:
Bước 3: Để chạy file m vừa tạo chúng ta có thể thực hiện theo một trong các cách: ChọnRUN trong tab EDITOR, nhập tên file m lên cửa sổ lệnh hoặc nhấn F5 trên bàn phím Sau khichạy sẽ cho hiển thị kết quả a = 8 trên cửa sổ lệnh và một biến a được lưu trong không gian làmviệc ‘Workspace.’ Kết quả như hình sau:
Trang 5Thực hành: Thực hiện tạo một file m với tên và lệnh bất kỳ.
3.2.1 Một số lệnh cơ bản
a) Toán tử logic và quan hệ
Các toán tử logic và quan hệ cho phép so sánh các đại lượng vô hướng, ma trận hoặc từngphần tử Các toán tử sau đây có sẵn và được sử dụng rộng rãi trong lập trình Matlab
>> 7 > 8
ans =
Trang 60
Nếu các toán tử quan hệ và logic này được áp dụng cho các ma trận có cùng kích thước, thì kếtquả đưa ra khi áp dụng các toán tử này là ma trận của 0 và 1 cho giá trị của mối quan hệ giữa cácmục nhập tương ứng Ví dụ:
x so với y bằng cách kết nối biểu đồ với các điểm dữ liệu Sự khác biệt duy nhất giữa biểu đồ vàgốc là, biểu đồ sẽ vẽ một đồ thị liên tục trong khi gốc sẽ vẽ một đồ thị rời rạc Các lệnh bên dướitạo ra biểu đồ của một đồ thị cosine bằng cách sử dụng biểu đồ và gốc của hàm
Từ các lệnh trên, véc tơ x được xác định với thành phần là các giá trị cách đều nhau từ 0 đến2π với bước chạy là 0.05π và véc tơ y được định nghĩa là một hàm sin theo biến x Có một tínhnăng hữu ích khác có thể được sử dụng cùng với biểu đồ hoặc gốc là hàm có tên subplot Hàm
x = 0:pi/20:2*pi; % Define vector x from 0 to 2pi with step size pi/100
y = sin(x); % Define vector y
subplot(1,2,1); % Create a graph with two sub-graphs in 1 row 2 column and with subplot position 1
plot(x,y,'b-'); % Plot x versus y
axis([0 2*pi -1 1]);
xlabel('x (pi)');
ylabel('y=sin(x)'); %Label of x-axis and y-axis
title('Graph of Continuous Sine from 0 to 2pi'); %Title of graph
subplot(1,2,2);stem(x,y,'r-') %Plot p versus q with subplot position 2 axis([0 2*pi -1 1]);
xlabel('x (pi)');
ylabel('y=sin(x)'); %Label of p-axis and q-axis
title('Graph of Discrete Sine from 0 to 2pi'); %Title of graph
Trang 7này tạo một mảng các ô trong cùng một cửa sổ bằng cách chia ô hiện tại thành các ô hình chữnhật được đánh số theo hàng Subplot được sử dụng kết hợp với ô hoặc gốc để tạo một mảng các
ô trong cùng một cửa sổ Hàm subplot (m, n, p) chia cửa sổ hình thành ma trận m × n gồm cáctrục nhỏ và vẽ đồ thị trên các trục thứ p và trả về xử lý trục Các trục được tính từ hàng trên cùngcủa cửa sổ Figure cho đến hàng dưới cùng của cửa sổ Figure
Kết quả thu được như sau:
Hình trên cho thấy các đồ thị được tạo bởi các lệnh đã đề cập trước đó Đồ thị ở bên trái đượctạo bởi đồ thị hàm số ‘plot(x,y)’ và đồ thị ở bên phải được tạo bởi gốc hàm ‘stem(x,y)’ Vị trí củamỗi đồ thị được xác định bởi đồ thị hàm con subplot(m, n, p)
Ngoài ra, Matlab còn cung cấp các hàm cho phép vẽ đồ thị với các đặc tính khác như tỷ lệlogarithm hoành độ và tung độ, vẽ đồ thị 3D …
Thực hành 1: Viết file-M thực hiện chương trình trên và lưu với tên Bai1_NHOMx_PlotGraph.mYêu cầu 1: Ghi nhớ các lệnh matlab trong chương trình trên
Trang 8c) Vòng lặp và cấu trúc có điều kiện
Các lệnh phổ biến nhất trong MATLAB được sử dụng để viết vòng lặp, vòng lặp điều kiện vàcâu lệnh điều kiện là for, while và if-else Các câu lệnh điều khiển này hoạt động giống như bất
Câu lệnh này sẽ tạo ra một vector A có các thành phần là bình phương của chỉ số thành phần
While: Hình thức chung của vòng lặp while trong Matlab được hiển thị bên dưới:
Câu lệnh trên thực hiện việ in giá trị n khi n < x
If: Hình thức chung của câu lệnh điều kiện if trong Matlab được hiển thị bên dưới:
if conditions(relationships)
statements (actions)
end
Trang 9Các câu lệnh (hoặc hành động) sẽ chỉ được thực thi khi quan hệ là đúng Nhiều nhánh của ifcũng có thể, như được minh họa bằng ví dụ bên dưới:
3.3 MỘT SỐ PHÉP BIẾN ĐỔI TÍN HIỆU SỐ SỬ DỤNG MATLAB
3.3.1 Biến đổi DFT và IDFT
Phép biến đổi Fourier rời rạc - DFT của một tín hiệu rời rạc cho trước x n x x0, 1, , x N1
được cho bởi biểu thức sau
, 1
1
, 0,
nk k
N k
Ý nghĩa của phép biến đổi Fourier là tìm giá trị trong miền tần số của tín hiệu Do đó kết quảcủa phép biến đổi DFT có thể cho chúng ta biết các thành phần tần số có trong tín hiệu Hay nóicách khác chúng ta có thể biết phổ của tín hiệu thông qua các giá trị biến đổi DFT Từ chuỗi
X k chúng ta có thể tính giá trị phổ biên độ X k
và phổ pha X k
tương ứng bằng cáclệnh ‘abs’ và ‘angle’ trong Matlab
Trang 10Ví dụ: Thực hiện chương trình Matlab tính DFT của tín hiệu x n 1, 2,3, 4,5,6 theo 2 cách
tính toán theo biểu thức và sử dụng lệnh Matlab fft
clc;
close all;
xn = [1, 2, 3, 4, 5, 6];
L = length(xn); %find the length of the sequence
Xk = zeros(1,L); %initialize an array of same size as that
stem(t,Xk_magnitude,'bo-'); hold on;
stem(t,Xk_2_magnitude,'r* '); hold on;
Trang 11stem(t,Xk_2_phase,'r* '); hold on;
ylabel ('Phase');
xlabel ('K');
title ('Phase Response');
legend('Computing', 'fft Matlab');
Kết quả thu được như hình sau:
Thực hành 2: Viết một file-M thực hiện chương trình trên và lưu với tên Bai1_NHOMx_DFT.mYêu cầu 2: Ghi nhớ các lệnh matlab trong chương trình trên
Thực hành 3: Viết chương trình thực hiện biến đổi IDFT của chuỗi
10, 2 2 , 2, 2 2
X k i i
theo 2 cách Lưu lại với tên Bai1_NHOMx_IDFT.m
3.3.2 Tích chập
Giả sử ngõ ra của một bộ lọc là y n khi có tín hiệu ngõ vào x n và đáp ứng xung là h n .
Tín hiệu ngõ ra được xác định theo biểu thức tích chập và cho bởi y n x n h n Xem xétdạng trực tiếp của phép tích chập ta có
Trang 12Trong đó Giả sử có L là chiều dài của tín hiệu x x n và M là bậc của bộ lọc Khi đó, ngõ ra
Ngoài ra, Matlab hỗ trợ phép tích chập khi sử dụng lênh conv(x,h)
Trạng thái quá độ và ổn định của ngõ ra được mô tả như trong hình sau
Trong đó, trạng thái quá độ ngõ vào lên trong khoảng mẫu 0 đến M-1, trạng thái ổn định trongkhoảng mẫu thứ M đến L-1, và vùng quá độ ngõ vào tắt trong khoảng mẫu L đến L + M – 1.Như vậy một lưu ý quan trọng là sử dụng vùng ổn định của ngõ ra để đảm bảo tính chính xáctrong phân tích ở các bài thí nghiệm sau
Thực hành 4: Viết một file-M tìm ngõ ra y(n) của hệ thống nhân quả với ngõ vào x(n) = [1, 3, 5,
3, 6, 3] và đáp ứng xung h(n) = [1, 4, 7, 2, 8] theo 2 cách, và lưu với tên Bai1_NHOMx_conv.m
Trang 133.3.3 Đáp ứng tần số của bộ lọc
Để vẽ đáp ứng tần số của bộ lọc có hàm truyền H z
chúng ta có thể thực hiện như sau Xácđịnh đáp ứng tần số H
và khảo sát trong khoảng 0
Ví dụ, phác họa đáp ứng miền tần số của bộ lọc có hàm truyền sau 1
e H
Trong đó a, b là vec tơ hệ số của mẫu và tử của hàm truyền
Trong cả 2 cách thực hiện nêu trên, đáp ứng tần số
Thực hành 5: Viết một file-M vẽ đáp ứng tần số của hệ thống có hàm truyền trên theo 2 cách: i)tính toán đáp ứng tần số và ii) sử dụng hàm Matlab, và lưu với tên Bai1_NHOMx_freqz.m
3.3.4 Tạo mẫu giá trị một số tín hiệu cơ bản
a) Tín hiệu Sine
Yêu cầu: tạo mẫu tín hiệu sin với tần số F = 300 Hz, tần số lấy mẫu Fs = 8 kHz trong khoảngthời gian từ 0 đến 0.01 (s) Sau đó vẽ các đồ thị tín hiệu theo thời gian và mẫu Xác định và vẽbiểu đồ phổ biên độ và phổ pha của tín hiệu
Trước tiên chúng ta có các thời điểm lấy mẫu của tín hiệu là: 0, Ts, 2Ts … 0.01 – Ts, với Ts làchu kỳ lấy mẫu Khi đó mẫu tín hiệu có thể thực hiện theo chương trình sau:
clc
Trang 15Thực hành 6: Viết các chương trình Matlab thực hiện các yêu cầu sau:
1 Tạo 5 chu kỳ mẫu tín hiệu s1cos 2 f t1 với f 1 400Hz, tần số lẫy mẫu 8000 Hz.
2 Tạo mẫu tín hiệu 3
0 elsewhere
T t T
s
được lấy mẫu với 20 trong 1 chu kỳ T
3 Tạo tín hiệu sinc s4 sinc 2 f t4 0.5
với f 4 40 Hz, 0 (s) và được lấy mẫut 1
3.4 THIẾT KẾ BỘ LỌC SỐ VỚI MATLAB®
3.4.1 Thiết kế bộ lọc số với công cụ SPTool
SPTool là một công cụ có giao diện tương tác dùng cho xử lý số tín hiệu Công cụ này có thểđược sử dụng để phân tích tín hiệu, thiết kế các bộ lọc, phân tích các bộ lọc, lọc tín hiệu và phântích phổ của tín hiệu Để khởi động SPTool, từ dấu nhắc lệnh của MATLAB, nhập lệnh
>> sptool
Khi đó, giao diện của SPTool sẽ xuất hiện như sau:
Trang 16Hình 3 Giao diện của SPTool.
Khi mới mở SPTool, nó chứa một tập hợp các tín hiệu, bộ lọc và phổ mặc định Trên giao
diện của SPTool, có 3 cột: Signals, Filters và Spectra Dưới mỗi cột có các nút sử dụng cho cột
đó Cột Signals hiển thị các tín hiệu, cột Filters hiển thị các bộ lọc và cột Spectra hiển thị các
phổ trong workspace (vùng làm việc) của SPTool
Các tín hiệu, bộ lọc hoặc phổ trong workspace của MATLAB có thể được đưa vào SPTool
bằng lệnh Import trong menu File của SPTool Các tín hiệu, bộ lọc hoặc phổ được tạo ra hoặc
được import vào SPTool tồn tại dưới dạng các cấu trúc của MATLAB Để lưu lại các tín hiệu, bộ
lọc và phổ đã tạo ra hoặc chỉnh sửa trong SPTool, sử dụng lệnh Export trong menu File, chúng
cũng sẽ được lưu lại dưới dạng các cấu trúc MATLAB
Để bắt đầu thiết kế một bộ lọc mới, các bạn hãy nhấn vào nút New ngay dưới cột Filter Khi
đó, giao diện Filter Designer dùng để thiết kế bộ lọc như sau sẽ xuất hiện
Filter Designer cung cấp một môi trường đồ họa tương tác để thiết kế các bộ lọc số IIR hoặcFIR dựa trên các tiêu chuẩn do người dùng xác định
Các loại bộ lọc có thể thiết kế: Thông thấp, thông cao, thông dải, chắn dải
Các phương pháp thiết kế bộ lọc FIR: Equiripple, Least squares, Window
Các phương pháp thiết kế bộ lọc IIR: Butterworth, Chebyshev loại I, Chebyshev loại II,Elliptic
Trang 17Hình 4 Giao diện Filter Designer
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải sử dụng công cụ SPTool với các thông số sau:
Bộ lọc được thiết kế bằng phương pháp cửa sổ Kaiser
Chiều dài của đáp ứng xung: N = 89 (MATLAB hiển thị bậc bộ lọc bằng 88)
Tần số trung tâm: 2700 Hz
Tần số cắt: 2500 Hz và 2900 Hz
Giá trị của = 4
Tần số lấy mẫu 8000 Hz
Các bước thiết kế như sau:
1 Khởi động SPTool Dưới cột Filters, nhấn nút New để mở cửa sổ Filter Designer
2 Trong giao diện của Filter Designer:
a Trong text box Filter: Tên bộ lọc được tự đặt (ở đây là filt1) Tên này có thể thay
đổi sau này
b Nhập các thông số thiết kế vào:
i Sampling Frequency = 8000
ii Algorithm: Kaiser Window FIR
Trang 18iii Bỏ chọn ở check box Minimum Order (nếu chọn thì sẽ thiết kế bộ lọc cóbậc tối thiểu)
iv Filter Order = 88, Type = Bandstop, Fc1 = 2500, Fc2 = 2900, Beta = 4
c Nhấn Apply Khi đó đáp ứng tần số của bộ lọc thiết kế sẽ được hiển thị
Hình 5 Đáp ứng tần số của bộ lọc đã thiết kế
3 Trở về cửa sổ SPTool, trong cột Filters sẽ xuất hiện thêm một dòng filt1 [design].
Đây chính là bộ lọc vừa thiết kế Nếu muốn sửa đổi thiết kế, chúng ta có thể nhấnchọn tên bộ lọc và nhấn nút Edit ở phía dưới Để dễ nhớ, ta sẽ thay đổi tên bộ lọc trên
thành bs2700 bằng cách chọn Edit Name…filt1 [design] Trong cửa sổ mới
xuất hiện, nhập tên mới
Khi thiết kế một bộ lọc FIR như trên, kết quả mà ta cần nhận được sau khi thiết kế là các
giá trị của vector đáp ứng xung h của bộ lọc thiết kế Để lấy các giá trị của vector đáp ứng
xung, ta thực hiện như sau:
1 Từ cửa sổ SPTool, chọn File Export… Trong Export list xuất hiện, chọn
Filter: bs2700 [design] rồi nhấn nút Export to workspace
2 Đóng cửa sổ SPTool lại Một thông báo xuất hiện hỏi có muốn lưu lại phiên làm việchiện tại hay không Nếu muốn lưu lại, chọn Save
Trang 193 Mở cửa sổ Workspace của MATLAB, ta sẽ thấy trong workspace sẽ xuất hiện biến
mới là bs2700 Đây chính là bộ lọc mà ta đã thiết kế trong SPTool và xuất ra
workspace của MATLAB Biến này được lưu dưới dạng một cấu trúc mô tả bộ lọc đãthiết kế Nhấn đúp chuột vào tên biến bs2700 trong workspace, ta sẽ thấy được cácfield của cấu trúc này như sau:
Trang 20Hình 7 Vector đáp ứng xung của bộ lọc đã thiết kế
Các giá trị thu được của vector đáp ứng xung sẽ được sử dụng để thực hiện bộ lọc số lêntrên kit DSP
Thực hành 7: Thực hiện việc thiết kế bộ lọc FIR chắn dải với các thông số như trong ví dụ 1 Lấycác hệ số của bộ và viết chương trình vẽ đáp ứng tần số của bộ lọc trên Lưu lại với tênBAI_1_NHOMx_bs2700_freqz
Sử dụng hàm semilogy thay cho plot đưa ra nhận xét về sự khác biệt
Ví dụ 2: Thiết kế bộ lọc IIR chắn dải sử dụng công cụ SPTool với các yêu cầu sau:
Sử dụng phương pháp Elliptic để thiết kế một bộ lọc IIR chắn dải bậc 10, tần số trung tâm1750Hz Chú ý rằng MATLAB hiển thị bậc bộ lọc là 5, biểu diễn số phần bậc 2 của bộ lọc
(Điều này đúng với các bộ lọc IIR thông dải và chắn dải)
Các thông số của bộ lọc này như sau
Tần số cắt: 1700 Hz và 1800 Hz
Độ gợn dải thông và dải chắn tương ứng là 1 dB và 60 dB
Tần số lấy mẫu: 8000 Hz
Cách thực hiện:
Thực hiện tương tự như ví dụ trên, lưu bộ lọc thiết kế với tên bs1750 và xuất ra workspace.
Trong workspace sẽ có một cấu trúc tên là bs1750 Các hệ số tử số và mẫu số của hàm truyền
được lưu tương ứng trong các biến bs1750.tf.num và bs1750.tf.den.