Professional Documents
Culture Documents
B1 GIỚI THIỆU MATLAB CƠ BẢN - Sinh vien
B1 GIỚI THIỆU MATLAB CƠ BẢN - Sinh vien
- 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.
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.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 2
Để 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.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 3
Mộ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ác tệ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ạo mộ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ào biể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ạy tậ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ông hợ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ụ:
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:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 4
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ọn RUN
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 khi chạ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àm việc
‘Workspace.’ Kết quả như hình sau:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 5
Thực hành: Thực hiện tạo một file .m với tên và lệnh bất kỳ.
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ừng phầ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.
Các toán tử logic OR (|), AND (&), and NOT (~) được sử dụng để kết nối hoặc định lượng các
quan hệ. Khi các toán tử logic này được áp dụng cho các toán tử vô hướng, kết quả của các toán
tử này là các toán tử vô hướng là 0’s (Sai) hoặc 1’s (Đúng). Ví dụ, kết quả logic của phép tính 7
lớn hơn 8 được thực hiện như sau
>> 7 > 8
ans =
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 6
0
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ết
quả đư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ác
mục nhập tương ứng. Ví dụ:
b) Vẽ đồ thị
Một trong những tính năng hữu ích của MATLAB là trực quan hóa dữ liệu (tức là vẽ biểu đồ).
Hai hàm biểu đồ phổ biến nhất sẽ được sử dụng trong xử lý tín hiệu số (DSP) là biểu đồ lệnh và
biểu đồ gốc. Nếu x và y là hai vectơ có cùng độ dài, thì biểu đồ (x, y) hoặc gốc (x, y) lập biểu đồ
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ưới
tạ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 đến
2π 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ính
nă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 nà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
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 7
đượ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ác trụ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ùng của
cửa sổ Figure cho đến hàng dưới cùng của cửa sổ Figure.
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 được
tạ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ủa
mỗ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.m
Yêu cầu 1: Ghi nhớ các lệnh matlab trong chương trình trên.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 8
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 kỳ
ngôn ngữ lập trình nào khác.
For: Một câu lệnh lặp; một ví dụ sử dụng lệnh for được hiển thị bên dưới:
>> n = 5;
A = [];
for i = 1:n,
A = [A, i^2];
end
>> A
A =
1 4 9 16 25
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:
while conditions(relationships);
statements(actions)
end
Câu lệnh while sẽ được thực thi lặp đi lặp lại trong khi quan hệ vẫn đúng. Ví dụ dưới đây minh
họa luồng của câu lệnh while.
n = 0;
x = 5;
while n < x
n = n + 1;
fprintf('%d ', n);
end
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
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 9
Cá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 if
cũng có thể, như được minh họa bằng ví dụ bên dưới:
if n < 0
counter = 0;
elseif n = 0
counter = counter + 1;
else n > 0
counter = counter + 2;
end
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 0 , x1 ,, x N 1
N 1 N 1 2 nk
j
X k x nW nk
N x ne N , k 0, , N 1.
n0 n0
Trong đó j là đơn vị phức. Phép biến đổi Fourier rời rạc ngược - IDFT của tín hiệu trước
N 1 2 nk
1
x n X ke
j
N , n 0, , N 1.
N k 0
Ngoài ra, Matlab cung cấp các lệnh ‘fft’ và ‘ifft’ được dùng tương ứng cho biến đổi Fourier rời
rạc thuận (DFT) và nghịch (IDFT). Cú pháp sử dụng 2 lệnh trên như sau Xk = fft(xn) và xn =
ifft(Xk).
Ý 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ói
cá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ác lệnh ‘abs’
Ví 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
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 10
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
of input sequence
t=0:L-1;
% Find the magnitudes of individual DFT points
Xk_magnitude = abs(Xk);
Xk_2_magnitude = abs(Xk_2);
% plot the magnitude response
subplot(1,3,2);
stem(t,Xk_magnitude,'bo-'); hold on;
stem(t,Xk_2_magnitude,'r*--'); hold on;
ylabel ('Amplitude');
xlabel ('K');
title('Magnitude Response');
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 11
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.m
Yê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
X k 10, 2 2i, 2, 2 2i theo 2 cách. Lưu lại với tên Bai1_NHOMx_IDFT.m.
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ét
min n , M
y n h m x m n ,
m max 0,n L x 1
Trong đó Giả sử có L x là chiều dài của tín hiệu x n và M là bậc của bộ lọc. Khi đó, ngõ ra
y n sẽ có chiều dài là L y L x N 1 .
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 12
Như vậy, ngõ ra y n có thể tìm được thông qua lưu đồ tính tích chập trực tiếp của x n và
h n như sau
Lx = length(xn);
N = length(hn);
M = N - 1;
Ly = Lx + M;
yn = zeros(1, Ly);
for n = 0 : Ly-1
for m = max(0,n-Lx + 1):min(n,M)
yn(n+1) = yn(n+1) + hn(m+1) * xn(n-m+1);
end
end
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 trong
khoả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ác trong
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
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 13
Để 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 .
5 1 0.4 z 1
Ví dụ, phác họa đáp ứng miền tần số của bộ lọc có hàm truyền sau H z .
1 0.8 z 1
5 2e j
Ta có đáp ứng tần số H với 2 f / f s . Khi đó đồ thị đáp ứng tần số có thể
1 0.8e j
được thực hiện thông qua chương trình Matlab sau
omega = 0:pi/10:pi;
H = (5 + 2*exp(-1j*omega))./(1-0.8*exp(-1j*omega));
H_manitude = abs(H);
H_phase = angle(H);
Ngoài ra, Matlab cho phép tính đáp ứng tần số từ các hệ số của hàm truyền thông qua lệnh freqz
như sau
a = [1, -0.8];
b = [5, 2];
[H_matlab, w] = freqz(b,a); stem
plot(w,H_matlab_manitude)
H_matlab_manitude = abs(H_matlab); semilogy(x, y)
H_matlab_phase = angle(H_matlab); semilogy(w,H_matlab_manitude)
Trong đó a, b là vec tơ hệ số của mẫu và tử của hàm truyền. freqz(h)
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
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ảng thờ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
clear
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 14
% Signal Genergating
Fs = 8e3; % Sampling frequency 8 kHz
Ts = 1/Fs; % Sampling period
F_xt = 300; % Frequency of signal 300 Hz
%% Signal plot
figure(1)
subplot(1,2,1)
hold on
plot(t, xn);
xlabel('Time (sec)');
ylabel('Amplitude');
title('Nhom: xx | MSSV: yyyyy');
subplot(1,2,2)
hold on
plot(0:N-1, xn);
xlabel('Sampling index - n');
ylabel('Amplitude');
title('Nhom: xx | MSSV: yyyyy');
%% Spectrum plot
figure(2)
subplot(1,2,1)
stem((0:N/2-1)*Fs/N, Xk_Man(1:N/2) / N);
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Nhom: xx | MSSV: yyyyy');
subplot(1,2,2)
plot((0:N/2-1)*Fs/N, Xk_Pha(1:N/2) );
xlabel('Frequency (Hz)');
ylabel('Phase');
title('Nhom: xx | MSSV: yyyyy');
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 15
Thự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 s1 cos 2 f 1t với f 1 400 Hz, tần số lẫy mẫu 8000 Hz.
1 T 4 t 3T 4
2 Tạo mẫu tín hiệu s 3 được lấy mẫu với 20 trong 1 chu kỳ T.
0 elsewhere
3 Tạo tín hiệu sinc s 4 sinc 2 f 4 t 0.5 với f 4 40 Hz, 0 t 1 (s) và được lấy
Ngoài ra Matlab còn cung cấp các hàm tín hiệu khác như bảng sau:
Hàm Lệnh Matlab
Dirac dirac
Bước đơn vị Heaviside
Xung vuông rectpuls
Xung tam giác tripuls
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ân
tí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:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 16
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ặc
FIR 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.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 17
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:
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
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 18
iii. 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ị.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 19
3. 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ác field của
cấu trúc này như sau:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 20
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ấy cá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ên
BAI_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âm
1750Hz. 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.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 21
Dạng cực – zero của một hàm truyền H(z) như sau:
H ( z) k
z z1 z z 2 ...z z n
z p1 z p2 ...z pm
Hàm truyền trên có thể được viết lại như sau:
L L
b0 k b1k z 1 b2 k z 2
H ( z ) g H k z g 1
k 1 k 1 1 a1k z a2 k z 2
Với L là số nguyên gần nhất lớn hơn cực đại của n/2 và m/2.
Trong MATLAB, các phần bậc 2 của H(z) được lưu trong 1 ma trận như sau:
b01 b11 b21 1 a11 a21
b b12 b22 1 a12 a22
sos 02
b0 L b1L b2 L 1 a1L a2 L
Từ các hệ số tử và mẫu ở trên, ta sẽ chuyển thành dạng các phần bậc hai bằng các lệnh sau:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 22
Thực hành 8: 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ụ 2.
Lấy cá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ên
BAI_1_NHOMx_bs2700_freqz.
Sử dụng hàm semilogy thay cho plot.
Bên cạnh việc sử dụng công cụ SPTool để thiết kế bộ lọc như trên, MATLAB cũng có một số
lệnh có thể sử dụng để thiết kế bộ lọc. Các lệnh này có thể được sử dụng khi thiết kế một số loại
bộ lọc mà SPTool không có sẵn, ví dụ như các bộ lọc multiband.
Ví dụ 1: Thiết kế bộ lọc FIR multiband bằng các lệnh MATLAB
Trong ví dụ này, chúng ta sẽ thiết kế một bộ lọc FIR multiband gồm 63 hệ số. Tần số lấy mẫu
là 10 kHz. Chúng ta sử dụng hàm remez của MATLAB. Hàm remez sử dụng giải thuật Parks –
McClellan dựa trên giải thuật Remez và lý thuyết xấp xỉ Chebyshev.
Bộ lọc cần thiết kế có đáp ứng tần số như sau:
1.2
0.8
0.6
0.4
0.2
0
0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000
Hình 9. Đáp ứng tần số của bộ lọc multiband FIR cần thiết kế
Bộ lọc mong muốn có 2 dải thông, được biểu diễn bởi 5 dải như sau:
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 23
Dòng lệnh cof = remez(n-1,f,m) trả về vector hệ số của bộ lọc FIR bậc n – 1, với f và
m xác định các dải tần số theo bảng ở trên.
Lệnh plot thứ nhất vẽ đáp ứng tần số mong muốn dựa trên f và m.
Lệnh figure tạo ra một cửa sổ mới và lệnh plot thứ hai vẽ đáp ứng tần số của bộ lọc đã
thiết kế được lên cửa sổ mới này.
Ở đây, kết quả của quá trình thiết kế mà ta cần nhận được chính là các hệ số chứa trong
biến cof. Chúng được sử dụng khi thực hiện bộ lọc lên trên kit DSP.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -
TÀI LIỆU THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU (EE2016) 24
n = 63;
[num, den] = yulewalk(n-1,f,m);
% frequency response with 256 points
[h w] = freqz(num,den,256);
% plot magnitude of the filter
plot(f * 5000,m, 'b'); hold on;
plot(w/pi*5000,abs(h), 'r-.');
Trong đoạn chương trình trên, lưu ý:
Lệnh remez được thay bằng lệnh yulewalk dùng để thiết kế bộ lọc IIR. Lệnh này trả về
các hệ số của tử số và mẫu số của hàm truyền bộ lọc, được chứa tương ứng trong biến
num và den.
Lệnh freqz được sửa đổi để vẽ đáp ứng tần số của bộ lọc IIR đã thiết kế.
Các giá trị của num và den sẽ được sử dụng để thực hiện bộ lọc.
Thực hành: Thực hiện các chương trình thiết kế bộ lọc thông dải đa dải và vẽ đáp ứng tần số
với các yêu cầu như trong ví dụ 1 và 2.
Thực hành: Thiết kế bộ lọc FIR chắn đa dải 1000-1500 và 2500-3000, có bậc 62, tần số lấy
mẫu là 10 kHz. Sau đó vẽ đáp ứng tần số của bộ lọc.
Thực hành: Thiết kế bộ lọc IIR chắn đa dải 1000-1500 và 2500-3000, có bậc 62, có tần số lấy
mẫu là 10 kHz. Sau đó vẽ đáp ứng tần số của bộ lọc.
Sinh viên thực hiện các yêu cầu và thực hành trong bài và viết báo cáo thực hiện.
BỘ MÔN VIỄN THÔNG – ĐẠI HỌC BÁCH KHOA TP. HCM - Lưu hành nội bộ -