Xử lý tín hiệu nâng cao - Chương 5: Bộ lọc số có đáp ứng xung hữu hạn và vô hạn

Lọc số: biến dạng sự phân bố tần số của

các thành phần của một tín hiệu

Phân loại

 FIR: Hệ thống đặc trưng bởi đáp ứng xung có

chiều dài hữu hạn

 IIR: Hệ thống đặc trưng bởi đáp ứng xung có chiều

dài vô hạn

pdf 44 trang dienloan 16440
Bạn đang xem 20 trang mẫu của tài liệu "Xử lý tín hiệu nâng cao - Chương 5: Bộ lọc số có đáp ứng xung hữu hạn và vô hạn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Xử lý tín hiệu nâng cao - Chương 5: Bộ lọc số có đáp ứng xung hữu hạn và vô hạn

Xử lý tín hiệu nâng cao - Chương 5: Bộ lọc số có đáp ứng xung hữu hạn và vô hạn
Xử lý tín hiệu nâng cao
-Advanced signal processing-
Chương 5
Bộ lọc số có đáp ứng xung hữu hạn và 
vô hạn
Khái niệm
Lọc số: biến dạng sự phân bố tần số của
các thành phần của một tín hiệu
Phân loại
 FIR: Hệ thống đặc trưng bởi đáp ứng xung có
chiều dài hữu hạn
 IIR: Hệ thống đặc trưng bởi đáp ứng xung có chiều
dài vô hạn
Các mạch lọc đơn giản
Mạch lọc thông thấp (lowpass)
Mạch lọc thông cao (highpass)
Mạch lọc thông chắn (bandpass)
Mạch lọc thông dải (bandstop)
Mạch lọc FIR
Mạch lọc FIR có hàm truyền dạng tổng quát
∑ −=
M
mzbzH )(
=m
m
0
Mạch lọc FIR thông thấp
 Hàm truyền đạt
( )11
2
1)( −+= zzH
Hàm truyền đạt này có một điểm không tại z=-1 và 
một điểm cực tại z=0 
Mạch lọc FIR thông thấp
Đáp ứng tần số của mạch lọc thông thấp:
( ) ( )
2
1 1( ) 1 1 cos sin
2 2
1 2cos 2 sin cos
2 2 2 2
j jH e e j
j
ω ω ω ω
ω ω ω
−
= + = + −
  
= −  
  
 Vì:
2cos 2cos 1
2
sin 2sin cos
2 2
ω 
ω= − 
 
ω ω
ω=
cos cos sin
2 2 2
jω ω ω  = −  
  
Mạch lọc FIR thông thấp
Đáp ứng tần số của mạch lọc thông thấp:
( ) ( )
2
1 1( ) 1 1 cos sin
2 2
1 2cos 2 sin cos
2 2 2 2
j jH e e j
j
ω ω ω ω
ω ω ω
−
= + = + −
  
= −  
  
jj 2H(e ) cos e
2
ω
−
ω ω 
=  
 
cos cos sin
2 2 2
jω ω ω  = −  
  
Mạch lọc FIR thông thấp
Đáp ứng biên độ






=





=
−
2
cos
2
cos)( 2 ωω
ω
ω
jj eeH
b=[0.5 0.5];
a=[1];
[H,w]=freqz(b,a,100);
subplot(1,2,1);plot(w/pi,abs(H));
subplot(1,2,2);plot(w/pi,angle(H));
hàm freqz trả về đáp ứng tần số của một hệ thống tại một số hữu hạn 
các điểm rời rạc trên vòng tròn đơn vị khi biết hàm truyền đạt của nó
Mạch lọc FIR thông thấp
Kết quả:
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.8
-0.6
-0.4
-0.2
0
Tùy thuộc vào yêu cầu mà có thể sử dụng 1 lúc 
nhiều bộ lọc
0 0.5 1
0
0.1
0.2
0.3
0 0.5 1
-1.6
-1.4
-1.2
-1
Mạch lọc FIR thông cao
Hàm truyền đạt
( )11
2
1)( −−= zzH
Đáp ứng tần số
)
2
sin()( 2 ω
ω
ω jj jeeH −=
Mạch lọc FIR thông cao
Đáp ứng biên độ
)sin()sin()( 2 ωω
ω
ω
==
− jj jeeH
22
Mạch lọc FIR thông cao
b=[0.5 -0.5];
a=[1];
[H,w]=freqz(b,a,100);
subplot(1,2,1);plot(w/pi,abs(H));
subplot(1,2,2);plot(w/pi,angle(H));
1 1.6
0 0.5 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0 0.5 1
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Mạch lọc IIR
Mạch lọc IIR thông thấp
1
1
1
1
2
1)(
−
−
−
+−
=
z
z
zH
α
α
Đáp ứng tần số của của mạch lọc là: 
ω
ω
ω
α
α
j
j
j
e
e
eH
−
−
−
+−
=
1
1
2
1)(
Mạch lọc IIR thông thấp
alpha1=0.9; b1=[1-alpha1, 1-alpha1]; a1=[2,-2*alpha1];
alpha2=0.7; b2=[1-alpha2, 1-alpha2]; a2=[2,-2*alpha2];
alpha3=0.4; b3=[1-alpha3, 1-alpha3]; a3=[2,-2*alpha3];
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);
plot(w/pi,abs(H1),'b--',w/pi,abs(H2),'r-',w/pi,abs(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);
plot(w/pi,angle(H1),'b—’,w/pi,angle(H2),'r',w/pi,angle(H3),'g-
');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Kết quả
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.2
0.4
0.6
0.8
1
alpha=0.9
alpha=0.7
alpha=0.4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-2
-1.5
-1
-0.5
0
alpha=0.9
alpha=0.7
alpha=0.4
Mạch lọc IIR thông cao
Hàm truyền đạt
1
1
1
1
2
1)(
−
−
−
−+
=
z
z
zH
α
α
Đáp ứng tần số
ω
ω
ω
α
α
j
j
j
e
e
eH
−
−
−
−+
=
1
1
2
1)(
Mạch lọc IIR thông cao
alpha1=0.9; b1=[1+alpha1, -1-alpha1]; a1=[2,-2*alpha1];
alpha2=0.7; b2=[1+alpha2, -1-alpha2]; a2=[2,-2*alpha2];
alpha3=0.4; b3=[1+alpha3, -1-alpha3]; a3=[2,-2*alpha3];
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);
plot(w/pi,abs(H1),'b--',w/pi,abs(H2),'r-',w/pi,abs(H3),'g-
');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);
plot(w/pi,angle(H1),'b--',w/pi,angle(H2),'r-
',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4'); 
Mạch lọc IIR thông cao
Mạch lọc IIR thông dải
Hàm truyền đạt
211)(
−
−−
=
z
zH α 21)1(12 −− ++− zz ααβ
Mạch lọc IIR thông dải
beta=0.3;
alpha1=0.9; b1=[1-alpha1,0, -1+alpha1]; 
a1=[2,-2*beta*(alpha1+1),2*alpha1];
alpha2=0.7; b2=[1-alpha2,0, -1+alpha2];
a2=[2,-2*beta*(alpha2+1),2*alpha2];
alpha3=0.4; b3=[1-alpha3,0, -1+alpha3]; 
a3=[2,-2*beta*(alpha3+1),2*alpha3];
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);
plot(w/pi,abs(H1),'b--',w/pi,abs(H2),'r-',w/pi,abs(H3),'g-
');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);plot(w/pi,angle(H1),'b--',w/pi,angle(H2),'r-
',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Mạch lọc IIR thông dải
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.2
0.4
0.6
0.8
1
alpha=0.9
alpha=0.7
alpha=0.4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-2
-1
0
1
2
alpha=0.9
alpha=0.7
alpha=0.4
Mạch lọc chắn dải
Hàm truyền đạt
21
21
)1(1
21
2
1)(
−−
−−
++−
+−+
=
zz
zz
zH
ααβ
βα
Mạch lọc chắn dải
beta=0.3;
alpha1=0.9; b1=[1+alpha1,-2*beta*(1+alpha1), 1+alpha1]; 
a1=[2,-2*beta*(alpha1+1),2*alpha1];
alpha2=0.7; b2=[1+alpha2, -2*beta*(1+alpha2), 1+alpha2];
a2=[2,-2*beta*(alpha2+1),2*alpha2];
alpha3=0.4; b3=[1+alpha3, -2*beta*(1+alpha3), 1+alpha3]; 
a3=[2,-2*beta*(alpha3+1),2*alpha3];
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);
plot(w/pi,abs(H1),'b--',w/pi,abs(H2),'r-',w/pi,abs(H3),'g-
');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);
plot(w/pi,angle(H1),'b--',w/pi,angle(H2),'r-
',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Mạch lọc chắn dải
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.2
0.4
0.6
0.8
1
alpha=0.9
alpha=0.7
alpha=0.4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-2
-1
0
1
2
alpha=0.9
alpha=0.7
alpha=0.4
SỬ DỤNG MATLAB ĐỂ THIẾT KẾ BỘ LỌC SỐ
Thiết kế bộ lọc số bằng 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 
 phân tích phổ của tín hiệu
Thiết kế bộ lọc số bằng công cụ SPTool
 Để 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:
Thiết kế bộ lọc số bằng công cụ 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: hiển thị các tín hiệu
 Filters: hiển thị các bộ lọc 
 Spectra: hiển thị các phổ trong workspace (vùng làm việc) 
của SPTool
Dưới mỗi cột có các nút sử dụng cho cột đó.
Thiết kế bộ lọc số bằng công cụ 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.
Thiết kế bộ lọc số bằng công cụ SPTool
Để 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 sẽ xuất hiện.
Thiết kế bộ lọc số bằng công cụ SPTool
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. 
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
Bộ lọc, được thiết kế bằng phương pháp cửa 
sổ Kaiser, với các thông số sau: 
 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 
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
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 
• 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. 
• Nhập các thông số thiết kế vào: 
 Sampling Frequency = 8000
 Algorithm: Kaiser Windows FIR 
 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). 
Order = 88, Type = Bandstop, Fc1 = 2500, Fc2 = 2900, Beta = 4 
• Nhấn Apply. Khi đó đáp ứng tần số của bộ lọc thiết kế sẽ được 
hiển thị. 
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
Ví dụ 1: Thiết kế một bộ lọc FIR chắn 
dải bằng SPTool 
 Các bước thiết kế như sau: 
 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ế. Sau này, nếu muốn sửa 
đổi thiết kế, chọn lại 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:
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
 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ệc hiện tại hay không. Nếu muốn lưu lại, chọn Save. 
 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: 
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
 Trong các field này, field tf thể hiện hàm truyền đạt của bộ lọc. 
Field này cũng là một cấu trúc gồm 2 field: tf.num và tf.den thể 
hiện tương ứng các hệ số của đa thức tử số và đa thức mẫu 
số. Đối với bộ lọc FIR, hàm truyền chỉ có tử số và các hệ số 
của tử số chính là đáp ứng xung của bộ lọc. Do đó, với bộ lọc 
trên, các giá trị của vector đáp ứng xung được lưu trong 
bs2700.tf.num. Trong cửa sổ Array Editor trên, lần lượt 
double click vào field tf rồi nhấn đúp vào num, ta sẽ thấy các 
hệ số đáp ứng xung của bộ lọc. Để gán các hệ số này vào 
một vector h, trong MATLAB có thể dùng lệnh sau: 
 >> h = bs2700.tf.num
Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải 
bằng SPTool 
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ên trên kit DSP.
Ví dụ 2: Thiết kế bộ lọc IIR chắn dải bằng 
SPTool 
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. 
 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 
Ví dụ 2: Thiết kế bộ lọc IIR chắn dải bằng 
SPTool 
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 
• 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. 
• Nhập các thông số thiết kế vào: 
 Sampling Frequency = 8000
 Algorithm Elliptic IIR 
 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). 
Order = 5, Type = Bandstop, Fp1 = 1700, Fp2 = 1800, Rp=1, Rs=60
• Nhấn Apply. Khi đó đáp ứng tần số của bộ lọc thiết kế sẽ được 
hiển thị. 
Ví dụ 2: Thiết kế bộ lọc IIR chắn dải bằng 
SPTool 
Đáp ứng tần số của bộ lọc IIR đã thiết kế
Ví dụ 2: Thiết kế bộ lọc IIR chắn dải bằng 
SPTool 
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.
Thiết kế bộ lọc bằng lệnh của MATLAB
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.
Thiết kế bộ lọc bằng lệnh của MATLAB

File đính kèm:

  • pdfxu_ly_tin_hieu_nang_cao_chuong_5_bo_loc_so_co_dap_ung_xung_h.pdf