You are on page 1of 34

Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến

-------------------------------------------------------------------------------------------------------------

Bài 1: PHÂN TÍCH


TRONG MIỀN THỜI GIAN

Bài thực tập giúp các em sinh viên tìm hiểu các vẽ một số tín hiệu số cơ bản như tín
hiệu xung lực đơn vị, tín hiệu bậc đơn vị…, cách tính đáp ứng xung và tích chập
trong miền thời gian.
I. Tín hiệu
1/. Định nghĩa:
Tín hiệu là sự biến thiên của biên độ theo thời gian.

0 t

2/. Kí hiệu:
Tín hiệu tương tự: x(t)
Tín hiệu rời rạc : x(n)
3/. Một vài tín hiệu số cơ bản:
Các hàm của một số tín hiệu cơ bản :
a. Tín hiệu xung lực đơn vị:
>>n = -10 :10;
>>y = [zeros(1,10) 1 zeros(1,10)];
>>stem(n,y)
b. Tín hiệu bậc đơn vị:
>>n = -10 :10;
>>y = [zeros(1,10) ones(1,11)];
c. Tạo xung tuyến tính:
>>n = (0:0.001:1)';
>>y = n;

1
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

d. Các dạng xung khác:


>>n = (0:0.001:1)';
>>y = n.^2;
>>y = square(4*n);
e. Tạo xung tam giác/răng cưa:
>>f = 10000;
>>n = 0:1/f:1.5;
>>x = sawtooth(2*pi*50*n);
>>plot(n,x); axis([0 0.2 -1 1]);
f. Tạo xung vuông:
>> f = 10000;
>> n = 0 :1/f:1.5;
>> x = square(2*pi*50*n, 20);
>>plot(n,x); axis([0 0.2 -1 1]);
4/. Vẽ tín hiệu bằng Matlab:
Ví dụ: Vẽ tín hiệu x(t) = t2 sin10t , với 0  t  3
(Hướng dẫn : Để đơn giản, tách tín hiệu ra làm 2 thành phần rồi nhân lại :
x1(t) = t2
x2(t) = sin10t
x(t) = x1(t).x2(t)
Giải :
>> clear
>> % tính tín hiệu
>> t = linspace (0,3,200) ;
>> x1 = t.^2 ;
>> x2 = sin (10*t) ;
>> x = x1.*x2 ;
>> plot(t,x)
5/. Bài tập :
1.Tạo xung đơn vị có dạng sau:

2
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

2. Biến đổi chương trình trên để tạo ra một dãy xung đơn vị bị trễ 11 mẫu. Chạy
chương trình đã được biến đổi và vẽ mẫu đó.
3. Tạo dãy nhảy bậc đơn vị có dạng sau:

4. Biến đổi chương trình trên để tạo dãy nhảy bậc đơn vị u[n] sớm 7 mẫu. Chạy
chương trình vừa biến đổi và hiển thị dãy đó.
5. Sự khác nhau giữa toán tử số học ^ và .^, cho ví dụ.
6. Lập trình Matlab để tạo chương trình vẽ các tín hiệu số cơ bản.

II. Phân tích trong miền thời gian


1/. Hệ thống rời rạc thời gian
Hệ thống rời rạc thời gian còn được gọi là hệ thống xử lý tín hiệu số
 Tác động lên tín hiệu ngõ vào để tạo tín hiệu số ở ngõ ra khác tín hiệu vào ở một
số tính chất nào đó (ví dụ: biên độ, tần số, pha…)

3
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

x(n) y(n)
h(n)

2/. Đáp ứng xung


2.1/. Định nghĩa:
Đáp ứng xung h(n) của một lọc số là ngõ ra của tín hiệu khi tín hiệu vào là
xung lực đơn vị:

x(n) = 1 khi n =1
0 khi n  1

2.2/. Đáp ứng xung và Matlab


Trong Matlab, ta có thể tạo một đáp ứng xung bằng lệnh impz để tính đáp ứng xung
của hệ thống rời rạc thời gian LTI.
Cú pháp:
h = impz(num,den,N)
Với: num là các hệ số tín hiệu vào, den là các hệ số tín hiệu ra và N là số mẫu.
Ví dụ: Tính và vẽ 40 mẫu đầu tiên của đáp ứng xung của hệ thống có phương trình
sai phân sau:
y(n) – 0,4y(n-1) + 0,75y(n-2) = 2,2x(n) + 2,5x(n-1) + 2x(n-2)
Giải:
>> N = 40;
>> num = [2.2 2.5 2];
>> den = [1 -0.4 0.75];
>> h = impz(num,den,N);
>> stem(h);

4
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Cách khác để tạo đáp ứng xung là dùng lệnh fvtool.


Ví dụ:
imp = [1; zeros(49,1)];
Đáp ứng xung của một lọc cơ bản có hệ số b =1 và a = [1 -0.9] là
h = filter(b,a,imp);
Cách đơn giản để hiển thị đáp ứng xung là sử dụng fvtool (Filter Visualization Tool)
fvtool(b,a)
Chọn Impulse Response từ menu Analysis, hoặc nhấn vào biểu tượng của đáp ứng
xung trên thanh công cụ.

5
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

2.3/. Bài tập


1. Tính và vẽ 40 mẫu đầu tiên của đáp ứng xung của hệ thống có phương trình
sai phân sau:
y(n) – 0,4y(n-1) + 0,75y(n-2) = 2x(n) + 3x(n-1) + 2x(n-2)
2. Tính và vẽ 50 mẫu đầu tiên của đáp ứng xung của hệ thống LTI sau:
y(n) + 0.71y(n-1) – 0,46y(n-2) – 0,62y(n-3) = 0,9x(n) - 0,45x(n-1) - 0,35x(n-2)
3. Viết chương trình để tính đáp ứng xung đơn vị của hệ thống LTI nhân quả ở
câu 2 bằng cách sử dụng lệnh filter.
4. Viết chương trình tìm đáp ứng của hệ thống đối với dãy xung bậc đơn vị.

3/. Tính ổn định của hệ thống


3.1/. Định nghĩa:
Một hệ thống LTI ổn định theo nghĩa BIBO khi và chỉ khi đáp ứng xung đơn
vị của nó có tổng tuyệt đối. Đối với hệ thống IIR thì điều kiện cần để hệ thống này
ổn định là đáp ứng xung của nó phải suy giảm tới 0 khi số lượng mẫu đủ lớn.
Để kiểm tra tính ổn định của hệ thống LTI, đáp ứng xung đơn vị được đánh
giá theo công thức:
k
H ( k )   h( n)
n 0

Khi tăng k và kiểm tra các giá trị của |h(k)| tại mỗi bước lặp. Nếu giá trị của
|h(k)| nhỏ hơn 10-6 thì có thể coi tổng H(k) hội tụ và rất gần với H().
Ví dụ: Kiểm tra tính ổn định của hệ thống LTI nhân quả có phương trình sai phân:
y(n) = x(n) – 0,8x(n-1) – 1,5y(n-1) – 0,9y(n-2)
Giải:
>> num = [1 -0.8];
>> den = [1 1.5 0.9];
>> N = 100;
>> h = impz(num,den,N+1);
>> parsum = 0;
>> for k = 1:N+1;
>> parsum = parsum +abs(h(k));

6
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

>> if abs(h(k)) < 10^(-6), break, end


>> end
>> % Vẽ đáp ứng xung đơn vị
>> n = 0:N;
>> stem(n,h)
>> xlabel(‘Số mẫu’); ylabel(‘Biên độ’);
>> Title(‘Đáp ứng xung đơn vị’);
>> % Giá trị tuyệt đối của h(k)
>> disp(abs(h(k)));

3.2/. Bài tập:


Viết chương trình tính và vẽ đáp ứng xung đơn vị của hệ thống LTI có phương trình
sai phân:
y(n) = x(n) – 4y(n-1) + 3x(n-2) + 1,7y(n-1) – y(n-2)
Hệ thống này có ổn định không?

4/. Tích chập


4.1/. Định nghĩa:
Quan hệ vào/ra của hệ thống LTI (hệ thống tuyến tính và bất biến thời gian)
được xác định bởi tích chập:
 
y ( n)   h( k ) x ( n  k )   x ( k ) h( n  k )
k   k  

và được ký hiệu bằng y(n) = x(n)h(n)

7
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

4.2/. Tích chập và Matlab


Hàm tính tích chập của Matlab là hàm conv, hàm này sẽ tính tích chập một vectơ
với một vectơ khác (một hướng).
Cú pháp: x3=conv(x1,x2)
Ví dụ:
conv([1 1 1],[1 1 1])
ans =
1 2 3 2 1
Lưu ý: Đối với việc xử lý tín hiệu hai chiều, ta sử dụng hàm tính tích chập : conv2.
Ngõ ra y(k) của một lọc số liên kết với ngõ vào x(k) của nó bởi tích chập x(k) với
đáp ứng xung h(k).

y ( k )  h( k )  x ( k )   h(k  l ) x(l )
l 

Nếu đáp ứng xung h(k) của lọc số là hữu hạn thời gian, và ngõ vào x(k) cũng hữu
hạn thời gian, thì ta có thể thực hiện tích chập bằng hàm conv. Chứa x(k) trong
vectơ x, h(k) trong vectơ h, và lấy tích chập hai vectơ.
Ví dụ:
x = randn(5,1); % A random vector of length 5
h = [1 1 1 1]/4; % Length 4 averaging filter
y = conv(h,x);
4.3/. Bài tập:
1. Tính tích chập của hai tín hiệu:
x1 = {2, 3, 4}, và x2 = {3, 4, 5, 6}
2. Tín hiệu vào và đáp ứng xung lần lượt là:
x(n) = {0, 1, 2, 3, 4, 0}
h(n) = {0, 2, 0, 2, 0}
Tính tín hiệu ra.

8
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài 2: PHÂN TÍCH TRONG MIỀN TẦN SỐ

Bài thực tập này giúp sinh viên tìm hiểu một số phép phân tích trong miền tần số
như phép biến đổi Fourier rời rạc thời gian, phép biến đổi z, cách tính đáp ứng tần
số cũng như cách vẽ giản đồ cực không bằng các lệnh Matlab.
I. Biến đổi Fourier rời rạc thời gian (DTFT)
1/. Định nghĩa
Biểu thức tính biến đổi Fourier rời rạc thời gian của tín hiệu x(n):

X (e jw )   x ( n)e
n  
 jwn

Biến đổi Fourier rời rạc thời gian nghịch có dạng:


1
x ( n)   X (e
jw
)dw
2 2

2/. Đáp ứng tần số


2.1/. Định nghĩa:
Biến đổi Fourier rời rạc thời gian của đáp ứng xung h(n)

H ()   h ( n)e
n  
 jn

được gọi là đáp ứng tần số của hệ thống.


2.2/.Tính bằng Matlab
Đáp ứng tần số được tính bằng hàm freqz
Cú pháp:
[h,w] = freqz(b,a,p)
Kết quả là đáp ứng tần số phức H(eiw) p điểm của một lọc số.

Ở dạng đơn giản nhất, freqz cung cấp các vectơ hệ số lọc a và b, một số nguyên p
chỉ số điểm tính đáp ứng tần số. Hàm freqz trả đáp ứng tần số phức ở vectơ h và đáp
ứng tần số thực ở vectơ w theo rad/s.

9
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

freqz có thể chấp nhận các thông số khác, chẳng hạn một tần số lấy mẫu hoặc một
vectơ của một tần số bất kỳ.
Ví dụ: Tìm đáp ứng tần số 256 điểm của một lọc Chebyshev loại I bậc 12. Tần số
lấy mẫu fs là 1000Hz. Tần số cắt 200Hz.
[b,a] = cheby1(12,0.5,200/500);
[h,f] = freqz(b,a,256,1000);
Vì có cả tần số lấy mẫu, hàm freqz trả lại một vectơ f chứa 256 điểm tần số giữa 0
và fs/2.
Lưu ý: Tần số Nyquist bằng phân nửa tần số lấy mẫu. Tần số cắt cho tất cả các lọc
thiết kế được chuẩn hoá bằng tần số Nyquist. Chẳng hạn, đối với một hệ thống có
tần số lấy mẫu là 1000Hz, tần số cắt 300Hz là 300/500 = 0.6.
Nếu gọi hàm freqz mà không có các thông số ngõ ra, nó sẽ vẽ đường đồ thị cả biên
độ đối với tần số và pha đối với tần số.
Ví dụ: Một lọc thấp qua Butterworth bậc 9 với tần số cắt ở 400Hz, với tần số lấy
mẫu là 2000Hz là:
[b,a] = butter(9,400/1000);
Để tính đáp ứng tần số phức 256 điểm, và vẽ đồ thị biên độ và pha theo tần số:
freqz(b,a,256,2000)
Hoặc để hiển thị đáp ứng biên độ và pha trong fvtool:
fvtool(b,a)
Chọn Magnitude and Phase Response từ menu Analysis hoặc nhấn chọn biểu tượng
của Magnitude and Phase Response trên thanh công cụ.

10
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Đối với một vectơ hoặc một điểm tần số bất kỳ, ví dụ:
w = linspace(0,pi);
h = freqz(b,a,w);

II. Biến đổi z


1/. Biến đổi z thuận
1.1/. Định nghĩa:
Biến đổi z của một dãy thời gian rời rạc x(n) được định nghĩa theo công thức:

X ( z)   x ( n) z
n 
n
, trong đó, z là biến số phức

Đó là phép ánh xạ một dãy thời gian rời rạc thành một hàm biến số phức X(z). Nếu
biến đổi z tồn tại có nghĩa là hàm số phức X(z) có giá trị hữu hạn xác định. Tập hợp
tất cả các giá trị của biến số z tạo thành miền hội tụ ROC (Region of Convergence).
Ví dụ 1:
Cho X1(z) = 2 + 3z-1 + 4z-2 và X2(z) = 3 + 4z-1 + 5z-2 + 6z-3
Tính X3(z) = X1(z).X2(z)
Giải: Sử dụng hàm conv trong Matlab
>> x1 = [2 3 4]; x2 = [3 4 5 6];
>> x3 = conv(x1,x2)
x3 =

11
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

6 17 34 43 38 24
Để tính biến đổi z, trong Matlab ta sử dụng hàm:
ztrans(f )
Ví dụ: Tính biến đổi z của hàm f(n)=n4
Giải: >>syms n; % khai báo biến
>>f=n^4;
>>ztrans(f)

1.2/. Bài tập


1. Cho X1(z) = z +2 +3z-1 và X2(z) = 2z2 + 4z + 3 + 5z-1
Tính X3(z) = X1(z).X2(z)
2. Cho X1(z) = 2z +3 +4-1 và X2(z) = 3z2 + 2z + 1 + 4z-1
Tính X3(z) = X1(z).X2(z)

2/. Biến đổi z ngược


2.1/. Định nghĩa:
Phép biến đổi z ngược cho phép chúng ta phục hồi lại được dãy tín hiệu rời rạc
x(n) khi có biến đổi z của nó. Phép biến đổi z ngược thường sử dụng DSP, chẳng
hạn dùng để tìm đáp ứng xung của các phép lọc số.
Biến đổi z ngược x(n) của hàm biến đổi z X(z) được xác định từ tích phân
Cauchy:
1
2j c
x(n)  Z 1{ X ( z )}  X ( z ) z n1dz

Trong đó C là vòng tròn kín bao quanh gốc tọa độ nằm trong miền hội tụ ROC
của X(z).
2.2/. Tính toán bằng Matlab:
Để tính biến đổi z ngược bằng phương pháp phân tích thành phân thức đơn giản,
ta sử dụng hàm residuez có sẵn trong Matlab để tính.
Cú pháp:
[R,p,C] = residuez(b,a)
với b, a là hai vectơ chứa các hệ số của hai đa thức B(z) và A(z).

12
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Vectơ R chứa các giá trị thặng dư, vectơ p chứa giá trị của các cực và vectơ C chứa
các số hạng trực tiếp.
Để dùng hàm residuez, X(z) phải viết dưới dạng hàm hữu tỷ, trong đó tử số và
mẫu số là những đa thức xếp theo luỹ thừa tăng dần của z-1
b0  b1 z 1  ...  bM z  M B( z )
X ( z)  
a0  a1 z 1  ...  a N z  N A( z )
N M N
Rk
 1
  ck z  k , với M  N
k 1 1  pk z k 01

Ví dụ:
Tìm biến đổi z ngược của hàm sau đây bằng Matlab:
1
X ( z)  , z  0,9
(1  0,9 z ) (1  0,9 z 1 )
1 2

Giải:
>> b = 1; a = poly([0.9, 0.9, -0.9]);
>> [R,p,C] = residuez (b,a)
R=
0.2500
0.2500 + 0.0000i
0.5000 - 0.0000i
p=
-0.9000
0.9000 + 0.0000i
0.9000 - 0.0000i
C= []
X(z) đã được khai triển thành các phân thức đơn giản:
0,25 0,5 0,25
X ( z)  1
 1 2
 , z  0,9
1  0,9 z (1  0,9 z ) 1  0,9 z 1

0,25 0,5 (0,9 z 1 ) 0,25


 1
 z 1 2

1  0,9 z 0,9 (1  0,9 z ) 1  0,9 z 1
Sử dụng các phép biến đổi ngược cơ bản, ta được:
5
x(n)  0,25(0,9) n u (n)  (n  1)(0,9) n1 u (n  1)  0,25(0,9) n u (n)
9

13
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Ta có thể sử dụng hàm iztrans() để tính biến đổi z ngược


Ví dụ: Tính biến đổi ngược của hàm
F(z)=2z/(z-2)2
Giải: >>syms z;
>>f=2*z/(z-2)^2;
>>iztrans(f)

3/. Phân bố cực – không


3.1/. Định nghĩa:
Thường biến đổi z X(z) của tín hiệu hay H(z) của hệ thống là một hàm hữu
tỷ theo z
N ( z ) G( z  z1 )( z  z2 )( z  z3 )...( z  zM )
X ( z)  
D( z ) ( z  p1 )( z  p2 )( z  p3 )...( z  pN )

M: bậc tử số
N: bậc mẫu số
z1, z2 …: nghiệm của đa thức tử số, gọi là các không của hệ thống
p1, p2 …: nghiệm của đa thức mẫu số, gọi là các cực của hệ thống
Hình vẽ trong mặt phẳng z vị trí các không và các cực gọi là giản đồ cực –
không hoặc phân bố cực – không.
3.2/. Vẽ giản đồ cực – không bằng Matlab:
Hàm zplane vẽ đồ thị các cực và không của một hệ thống tuyến tính.
Hàm này có hai cách gọi:
- Đối với một hệ thống có dạng hàm số chuyển:
Cú pháp : zplane(num,den)
với num, den là các hệ số của đa thức ở tử số và mẫu số theo số mũ tăng dần của z-1.
- Đối với một hệ thống có dạng cực – không:
Cú pháp : zplane(zeros,poles)
với zeros, poles là các vectơ cột xác định các điểm không và điểm cực của hệ thống.
Ví dụ: Một lọc đơn giản với một không ở -1/2 và một đôi cực phức ở 0.9e j 2 (0.3) và
0.9e  j 2 (0.3) là:

14
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

zer = -0.5;
pol = 0.9*exp(j*2*pi*[-0.3 0.3]');
Để xem đồ thị cực – không của lọc:
zplane(zer,pol)
Hoặc có thể sử dụng fvtool. Đầu tiên, biến đổi các cực và không để có dạng hàm
chuyển, sau đó gọi lệnh fvtool:
[b,a] = zp2tf(zer,pol,1);
fvtool(b,a)
Chọn Pole/Zero Plot từ menu Analysis hoặc nhấn chọn biểu tượng Pole/Zero Plot từ
thanh công cụ.

Trong Matlab, việc xác định các điểm cực và điểm không của một hệ thống có hàm
truyền hữu tỷ được thực hiện nhờ lệnh tf2zp với cú pháp như sau:
Cú pháp:
[z,p,k] = tf2zp(num,den)
Trong đó, num, den là các hệ số của đa thức hữu tỷ ở tử số và mẫu số theo thứ tự
tăng dần của z-1, k là hệ số khuếch đại, z,p là các vectơ chứa điểm cực và điểm
không được cho dưới dạng vectơ cột.

Ví dụ:
>>b = [1 3];

15
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

>>a = [1 0.4 1];


>>[z,p,k] = tf2zp(b,a)
z=
-3
p=
-0.2000 + 0.9798i
-0.2000 - 0.9798i
k=
1

3.3/. Bài tập:


1. Vẽ giản đồ cực không của hàm:
1  2 z 1  3z 2
H ( z) 
2  4 z 1  4 z 2
2. Vẽ giản đồ cực không của hàm:
2  5 z 1  4 z 2
H ( z) 
5  45 z 1  2 z 2

16
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài 3: THIẾT KẾ MẠCH LỌC SỐ FIR

Bài thực hành giúp sinh viên tìm hiểu các câu lệnh Matlab nhằm thiết kế mạch lọc số FIR.
1. Định nghĩa
Thiết kế mạch lọc nghĩa là tính đáp ứng tần số của lọc sao cho thỏa yêu cầu đặt ra.
Từ phương trình lọc phi đệ quy:
N N
y ( n)   b x ( n  k )   h( k ) x ( n  k )
k  N
k
k  N

Ta tìm các hệ số bk của lọc, cũng chính là đáp ứng xung h(k), từ đó tính được đáp
ứng tần số của lọc cần thiết kế.
N
H ()   h ( k )e
k  N
 jk

2. Thiết kế các mạch lọc số FIR bằng Matlab


Quá trình thiết kế mạch lọc FIR được tiến hành theo hai bước: bước thứ 1 là
tìm bậc N của mạch lọc FIR, bước thứ 2 là xác định hàm truyền của mạch lọc thỏa
mãn các yêu cầu thiết kế. Để xác định bậc của mạch lọc FIR mong muốn, ta sử
dụng công thức gần đúng của Kaiser:

N

 20 log10  p s  13 
14,6( s   p ) / 2

Chương trình tính bậc của mạch lọc thông thấp FIR pha tuyến tính sử dụng
công thức gần đúng của Kaiser:
>> % Chương trình
>> dp = input (‘ Do map mo cua dai thong = ‘);
>> ds = input (‘ Do suy giam cua dai chan = ‘);
>> Fp = input (‘ Tan so cat cua dai thong = ‘);
>> Fs = input (‘ Tan so cat cua dai chan = ‘);
>> FT = input (‘ Tan so lay mau = ‘);
>> num = -20*log10(sqrt(dp*ds))-13;
>> den = 14.6*(Fs-Fp)/FT;
>> N = ceil(num/den);
>> fprintf(‘Bac cua mach loc la %d \n’,N)
17
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Ví dụ: Tính bậc của mạch lọc thông thấp FIR với các thông số sau: độ mấp
mô của dải thông là 0,1 dB, độ suy giảm của dải chặn là 35dB, tần số cắt dải thông
là 1,8KHz, tần số cắt dải chặn là 2KHz, và tốc độ lấy mẫu là 12KHz.

Trong hộp công cụ của Matlab còn có hàm firpmord dùng để xác định bậc
của mạch lọc số FIR dựa theo công thức của Hermann.
Cú pháp: [n,fo,ao,w] = firpmord(f,a,dev)
[n,fo,ao,w] = firpmord(f,a,dev,fs)
Ghi chú: sử dụng hàm firpmord hoặc hàm remezord
c = firpmord(f,a,dev,fs,'cell')
Với f là vectơ của các mép dải tần (nằm giữa 0 và fs/2, với fs là tần số lấy
mẫu), a là vectơ các giá trị biên độ mong muốn trong mỗi vùng tần số, dev là vectơ
qui định sai số được phép giữa đáp ứng biên độ của mạch lọc đã được thiết kế và
mạch lọc mong muốn. Chiều dài của f khoảng bằng hai lần chiều dài của a trừ đi
hai, trong khi chiều dài của dev bằng chiều dài của a. Hàm số này cho giá trị bậc N
của mạch lọc, tần số chuẩn hoá của các mép dải fo, vectơ các giá trị biên độ của dải
tần ao, và vectơ trọng số w thoả mãn các qui định của mạch lọc. Các dữ liệu lối ra
này có thể sử dụng để thiết kế mạch lọc bằng cách sử dụng hàm firpm. Hàm firpm
với kết quả ra bậc n, vectơ tần số fo, vectơ đáp ứng biên độ ao và trọng số w để thiết
kế lọc b xấp xỉ lọc được cho với các thông số f, a và dev.
Cú pháp: b = firpm(n,fo,ao,w)
Sử dụng cú pháp:
[n,fo,ao,w] = firpmord(f,a,dev,fs) với tần số lấy mẫu fs cho.
Tần số lấy mẫu fs mặc định là 2 Hz (tức tần số Nyquist là 1 Hz).
Hàm c = firpmord(f,a,dev,fs,'cell') tạo một mảng với các phần tử của mảng là
các thông số tới hàm firpm.

Ví dụ 1:
Thiết kế một mạch lọc thấp qua có số bậc nhỏ nhất với tần số cắt dải thông là
500Hz, tần số cắt dải chặn là 600Hz, với tốc độ lấy mẫu là 2000Hz, độ suy giảm ở
dải chặn là 40dB, và độ mấp mô của dải thông ít hơn 3dB.

18
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Giải:
rp = 3;
rs = 40;
fs = 2000;
f = [500 600];
a = [1 0];
dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)];
[n,fo,ao,w] = firpmord(f,a,dev,fs);
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs);
title(‘thiet ke loc thap qua FIR’);

Ví dụ 2:
Thiết kế một lọc thấp qua với tần số cắt dải thông là 1500Hz, tần số cắt dải
chặn là 2000Hz, với tốc độ lấy mẫu là 8000Hz, và biên độ dải chặn cực đại là 0,1,
và sai số dải thông cực đại là 0,01.
Hướng dẫn:
[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.01 0.1],8000 );
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs);
19
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Hoặc có thể làm theo cách sau:


c = firpmord( [1500 2000],[1 0],[0.01 0.1],8000,'cell');
b = firpm(c{:});

Bài tập:
Thiết kế mạch lọc FIR thông thấp có pha tuyến tính có tần số cắt dải thông là
800Hz, tần số cắt dải chặn là 1000Hz, độ mấp mô của dải thông là 0,5dB và độ suy
giảm của dải chặn là 40dB. Tần số lấy mẫu là 4000Hz.

3. Thiết kế các mạch lọc số FIR bằng các hàm cửa sổ


Hộp công cụ của Matlab có 5 hàm cửa sổ:
w = blackman (L)
w = hamming (L)
w = hanning (L)
w = chebwin (L, Rs)
w = kaiser (L, beta)
Các hàm cửa sổ trên cho vectơ w của các hệ số của cửa sổ có chiều dài lẻ L.
Ví dụ:
Thiết kế mạch lọc thông thấp dùng hàm cửa sổ Hamming với chiều dài là 51
và tần số cắt 0 ở 0,4 rad/s.
b = 0.4*sinc(0.4*(-25:25));
20
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

b = b.*hamming(51)';
fvtool(b,1)

21
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài 4: THIẾT KẾ MẠCH LỌC SỐ IIR

Bài thực hành giúp sinh viên tìm hiểu các câu lệnh Matlab nhằm thiết kế mạch lọc số IIR.
1. Thiết kế mạch lọc số IIR bằng phương pháp bất biến xung
Đây chính là phương pháp lấy mẫu đáp ứng xung của mạch lọc tương tự để thu
được đáp ứng xung của mạch lọc số, nghĩa là:
h[n]  ha (t ) |t nT  ha (nT )

Với h[n] là đáp ứng xung của mạch lọc số còn ha(t) là đáp ứng xung của mạch
lọc tương tự. Thông số T được chọn sao cho để dạng của ha(t) được chấp nhận bởi
các mẫu của h[n]. Vì đó là phép lấy mẫu nên các tần số tương tự và rời rạc liên hệ
với nhau bằng hệ thức:
 = T
hay ej = ejT
Đáp ứng biên độ của một mạch lọc thông thấp tương tự có thể được biểu thị
như sau:
|Ha(j)|
dB

p S
0 

Rp

-AS

Trong đó, Rp là thông số mấp mô của dải thông, p là tần số của dải thông đo
bằng rad/s, A là độ suy giảm của dải chặn và s là tần số cắt của dải chặn.
Để thiết kế mạch lọc số , trước tiên phải thiết kế mạch lọc tương tự tương
đương rồi sau đó ánh xạ nó thành mạch lọc số mong muốn:
Bước 1: Chọn khoảng lấy mẫu T và xác định các thông số cho mạch lọc tương
tự
p s
p  , s 
T T
22
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bước 2: Thiết kế mạch lọc tương tự với các thông số Rp, p, As, s.
Bước 3: Sử dụng khai triển phân thức riêng phần Ha(s) thành dạng:
N
Ck
H a ( s)  
k 1 s  sk

Bước 4: Biến đổi các điểm cực sk của mạch lọc tương tự thành các điểm cực
của mạch lọc số pk=eSkT để thu được mạch lọc số.
N
Ck
H ( z)   1 sk T
k 1 1  z e

Nếu Ha(s) được cho dưới dạng phân thức, thì hàm residue thu được các điểm
cực và điểm không để khai triển Ha(s) thành phân thức riêng phần. Sau đó, mỗi
điểm cực của mạch lọc tương tự được ánh xạ thành điểm cực của mạch lọc số. Cuối
cùng, sử dụng hàm residuez để chuyển H(z) thành dạng phân thức.
Ví dụ: Biến đổi mạch lọc tương tự
s 1
H a (s) 
s  5s  6
2

thành mạch lọc số H(z) dùng phương pháp bất biến xung với T=0,1.
Giải:
%Hàm biến đổi bất biến xung từ mạch lọc tương tự sang số:
function[b,a] = imp_invar(c,d,T)
[R,p,C] = residue(c,d);
P = exp(p*T);
[b,a] = residuez(R,P,C);
b = real(b’); a = real(a’);
%Chương trình Matlab biến đổi mạch lọc tương tự thành mạch lọc số dùng
phương pháp bất biến xung
c = [1,1]; d = [1,5,6]; T = 0.1;
[b,a] = imp_invar(c,d,T);
[H,w] = freqz(b,a,100);
magH = abs(H);
phaH = angle(H);
plot(w/pi,magH); % hoặc dùng hàm subplot nếu muốn vẽ nhiều đồ thị trên 1
figure
23
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

title(‘Dap ung tan so’)

( Hướng dẫn cách tính đáp ứng tần số:


Đầu tiên khai triển:
s 1 2 1
H a (s)   
s  5s  6 s  3 s  2
2

Có hai điểm cực là s1=-3 và s2=-2. Do vậy


2 1 1  0,8966 z 1
H ( z)    )
1  z 1e 3T 1  z 1e 2T 1  1,5559 z 1  0,6065 z 2

2. Thiết kế mạch lọc số IIR bằng Matlab


Quá trình thiết kế mạch lọc số IIR gồm hai bước: bước 1 là xác định bậc của
mạch lọc và tần số cắt tương ứng Wn, bước 2 là sử dụng các thông số vừa tính được
để xác định các hệ số của hàm truyền.
 Bước 1: Xác định bậc của mạch lọc
Các hàm để tính bậc nhỏ nhất N của mạch lọc và tần số cắt Wn của
Matlab:
[N,Wn] = buttord (Wp,Ws,Rp,Rs)
[N,Wn] = cheb1ord (Wp,Ws,Rp,Rs)
[N,Wn] = cheb2ord (Wp,Ws,Rp,Rs)
[N,Wn] = ellipord (Wp,Ws,Rp,Rs)
Đối với các mạch lọc thông thấp thì Wp và Ws là các tần số ở mép dải thông
và dải chặn với p < s, các tần số này có giá trị nằm giữa 0 và 1. Nếu tần số lấy

24
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

mẫu F lấy bằng 2 lần tần số Nyquist, tần số của dải thông fp và của dải chặn fs tính
bằng Hz, thì khi đó, Wp = 2fp/F và Ws = 2fs/F. Hai thông số Rp và Rs tính theo dB.
Đối với mạch lọc Butterworth thì Wn là tần số cắt -3dB, đối với mạch lọc
Chebyshev loại 1 và elliptic thì Wn là tần số ở mép của dải thông, trong khi đối với
mạch lọc Chebyshev loại 2 thì Wn là tần số ở mép của dải chặn.
Ví dụ 1:
Xác định bậc thấp nhất của mạch lọc thông thấp hoạt động ở tần số lấy mẫu
1000Hz với các thông số: độ mấp mô của dải thông nhỏ hơn 3dB, các mép của dải
thông từ 0 tới 40 Hz, độ suy giảm của dải chặn là 60 dB và các mép của dải chặn từ
150 Hz tới tần số Nyquist 500Hz.
Giải:
%Chuẩn hoá các mép của dải thông và dải chặn
Wp = 40/500; Ws = 150/500;
% Xác định bậc của mạch lọc
[n,Wn] = buttord(Wp,Ws,3,60)
n=
5
Wn =
0.0810
Ví dụ 2:
Xác định bậc thấp nhất của mạch lọc ellip hoạt động tại tần số lấy mẫu
1600Hz, với các thông số: các mép của dải thông tại 200Hz và 280Hz, các mép của
dải chặn tại 160Hz và 300Hz, độ mấp mô của dải thông là 0,1dB và độ suy giảm
của dải chặn là 70dB.
Giải:
%Chuẩn hoá các mép của dải thông và dải chặn
Wp=[200 280]/800;
Ws=[160 300]/800;
% Xác định bậc của mạch lọc
[n,Wn]=ellipord(Wp,Ws,0.1,70)
n=

25
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

8
Wn = 0.3500
 Bước 2: Thiết kế mạch lọc
Các hàm trong Matlab dùng để thiết kế mạch lọc
[b,a] = butter(N,Wn)
[b,a] = cheby1(N,Rp,Wn)
[b,a] = cheby2(N,Rs,Wn)
[b,a] = ellip(N,Rp,Rs,Wn)
Các hàm này cho các vectơ b và a là các vectơ có độ dài N+1 hệ số của tử số
và mẫu số của hàm truyền theo thứ tự tăng dần của số mũ z-1. Dạng của hàm truyền
thu được là
N

N ( z) b m z m
H ( z)   m 0
N
1   ak z k
D( z )
k 1

Sau khi đã xác định được các hệ số của mạch lọc thì ta có thể xác định đáp
ứng tần số của mạch lọc bằng hàm freqz(b,a,w) trong đó, w là tập hợp các tần số
góc.
Muốn xác định các điểm cực và điểm không của hàm truyền của mạch lọc
mong muốn, ta sử dụng hàm:
[z,p,k] = butter(N,Wn)
[z,p,k] = cheby1(N,Rp,Wn)
[z,p,k] = cheby2(N,Rs,Wn)
[z,p,k] = ellip(N,Rp,Rs,Wn)
Ví dụ:
Thiết kế mạch lọc elliptic và mạch lọc Butterworth thông thấp với các thông
số:
Tần số mép của dải thông fp = 800Hz, mép của dải chặn fs = 1 KHz, độ mấp mô
của dải thông là 0,5 dB, và độ suy giảm của dải chặn là 40 dB, với tần số lấy mẫu là
F = 4KHz.
Giải:
% Thiết kế mạch lọc elliptic
26
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

>>Wp=800/2000; Ws=1000/2000;
>>[n,Wn]=ellipord(Wp,Ws,0.5,40)
n=
5
Wn =
0.4000
>>[b,a]=ellip(n,0.5,40,Wn);
>>[h,omega]=freqz(b,a,256);
>>subplot(1,2,1);
>>plot(omega/pi,20*log10(abs(h)));grid;
>>xlabel('\omega/\pi');ylabel('Bien do, dB');
>>title('Mach loc elliptic')

% Thiết kế mạch lọc Butterworth


>>Wp=800/2000; Ws=1000/2000;
>>[n,Wn]=buttord(Wp,Ws,0.5,40)
n=
18
Wn = 0.4194

27
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

>>[b,a]=butter(n,Wn);
>>[h,omega]=freqz(b,a,256);
>>subplot(1,2,1);
>>plot(omega/pi,20*log10(abs(h)));grid;
>>xlabel('\omega/\pi');ylabel('Bien do, dB');
>>title('Mach loc Butterworth')

28
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài 5: THIẾT KẾ LỌC SỐ BẰNG LỆNH


SPTOOL/FDATOOL

Bài thực hành giúp sinh viên thiết kế các mạch lọc số dựa trên hộp công cụ sẵn có
trong Matlab.
SPTOOL/FDATOOL là chương trình dùng để thiết kế các lọc số dạng tương tác.
Người dùng đưa vào các thông số yêu cầu như dạng lọc, bậc của lọc, đáp ứng tần
số… chương trình sẽ tính toán hệ số lọc tương ứng.
Để thực thi một chương trình, ta thực hiện các bước sau:
 Khởi động Matlab.
Gõ >> sptool ở dòng lệnh (tương tự, gõ >> fdatool ).
Cửa sổ Start up xuất hiện
 Chọn New Design, một lọc được tạo và cửa sổ Filter Design xuất hiện. Ta
giả sử lọc này được gọi là filt1.
Xây dựng lọc mong muốn bằng cách thay đổi các thông số thích hợp.
 Trở lại cửa sổ Start up, để xem những đáp ứng khác nhau của lọc thiết kế, ta
nhấn chuột vào View, cửa sổ Filter Viewer mở ra, cho phép ta xem những đồ
thị khác nhau (đáp ứng tần số, đáp ứng xung …)
 Để rút trích các hệ số, trở lại cửa sổ Start up, chọn File -> Export. Ở cửa sổ
mới, chọn filt1 và chọn nút Export to Workspace, Matlab sẽ lưu một biến
cấu trúc gọi là filt1 vào trong cửa sổ làm việc hiện hành.
 Để xem tử số của lọc thiết kế, ở dòng lệnh, ta gõ >> filt1.tf.num
Để xem mẫu số của lọc thiết kế, ở dòng lệnh, ta gõ >> filt1.tf.den
Tương tự như vậy với lệnh FDATOOL.

Hướng dẫn thực hành

Bài tập 1: Thiết kế một lọc số FIR thấp qua với các thông số:
Tần số cắt dải thông fp = 2 kHz
Tần số cắt dải chặn fs = 3 kHz
Độ dợn dải thông Rp = 0.25 dB
Độ dợn dải chặn Rs = 50 dB
Tần số lấy mẫu fs = 20 kHz

Hướng dẫn :
 Gõ >> sptool ở dòng lệnh

29
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Chọn New Design.

Điền các thông số theo yêu cầu, hoàn tất lọc được thiết kế bằng cách nhấn Apply.

30
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Để rút trích hoặc điều chỉnh các hệ số lọc của lọc thiết kế, trở lại cửa sổ SPTool
Startup, chọn File -> Export. Đánh dấu lọc thiết kế được (filt1) và chọn nút Export
to Workspace để xuất ra các thông số lọc.

Các thông số của lọc được chứa dưới tên biến filt1, ta có thể xem các hệ số bằng
cách gõ >> filt1 ở dòng lệnh.

Để vẽ đáp ứng xung của lọc, ta gõ


>> h=filt1.tf.num;
>> stem(h)

31
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài tập 2: Thiết kế một lọc số thấp qua IIR với các yêu cầu sau:
Bậc của lọc là 8
Dạng lọc Elliptic IIR
Tần số cắt dải thông fp = 300 Hz
Độ dợn dải thông Rp = 0.5 dB
Độ dợn dải chặn Rs = 50 dB
Tần số lấy mẫu fs = 40 kHz

Hướng dẫn:

32
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Để vẽ đáp ứng xung, đối với lọc IIR cần có cả tử số và mẫu số để tính tần số và đáp
ứng xung của lọc.

Đáp ứng tần số

Đáp ứng xung (vẽ 100 mẫu đầu tiên)

33
Phần thực hành môn Xử lý tín hiệu nhập môn- GVHD: Hứa Thị Hoàng Yến
-------------------------------------------------------------------------------------------------------------

Bài tập:
3. Thiết kế lọc số thông qua FIR với
Băng thông 8-12 kHz
Độ dợn dải thông Rp = 0.001
Độ dợn dải chặn Rs = 0.001
Độ rộng chuyển đổi 3 kHz
Tần số lấy mẫu fs = 44.1 kHz
4. Thiết kế lọc số thông qua IIR với
Băng thông 8-10 kHz
Bậc của lọc 4
Dạng lọc Butterworth
Tần số lấy mẫu fs = 44.1 kHz

34

You might also like