Giới thiệu matlab Matlab Matrix Laboratory là mơi trường tính tốn đa ứng dụng, được tính tốn để thực hiện nhanh các phép toán ma trận.. Matlab cho phép thực hiện dễ dàng các tính toán số
Trang 1TRƯỜNG ĐẠI HỌC QUY NHƠN
KHOA KỸ THUẬT VÀ CÔNG NGHỆ
- -
BÀI GIẢNG
THÍ NGHIỆM XỬ LÝ TÍN HIỆU SỐ
Biên soạn: TS Phạm Hồng Thịnh
Bộ môn: Điện tử - Viễn thông
Tài liệu lưu hành nội bộ
Trang 2BÀI 1 MÔ PHỎNG HỆ THỐNG VÀ TÍN HIỆU RỜI
RẠC BẰNG MATLAB
1 Giới thiệu matlab
Matlab (Matrix Laboratory) là môi trường tính toán đa ứng dụng, được tính toán để thực hiện nhanh 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ên làm việc (command window) sẽ xuất hiện như hình:,
- 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
Để hiểu rõ cách sử dụng một hàm, có thể sử dụng lệnh >>help và hàm tương ứng Matlab có thể thực thi các lệnh ở cửa sổ lệnh từ dấu nhắc của cửa sổ lệnh
Ví dụ1: Các lệnh vẽ đồ thị tín hiệu sin
>> t = 0:0.01:2; % cho t thay giá trị từ 0 đến 2, mỗi giá trị cach nhau 0.01
>> x = sin(2*pi*t); % tính giá trị hàm (2 pi t) cho từng giá trị t
>> plot(t,x,’b’); % Vẽ đồ thị đường màu xanh
>> xlabel(’t in sec’); ylabel(’x(t)’); % Đặt tên trục x và trục y
>> title(’Plot of sin(2\pi t)’); % Tiêu đề đồ thị
Ví dụ 2: Tạo hàm m cộng hai tín hiệu sin có tần số và biên độ khác nhau
function y=sumsin(A1, f1, A2, f2, Time, fs)
% Cong 2 tin hieu sin co bien do va tan so khac nhau
% Input
% A1, f1: bien do va tan so tin hieu sin 1
% A2, f2: bien do va tan so tin hieu sin 2
% Time (giay) khoang thoi gian can tinh
% fs (Hz): tan so lay mau
2 Thiết kế bộ lọc số bằng công cụ SPTool
Trang 3SPTool 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
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ặ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
3 Tiến hành thí nghiệm
Thí nghiệm 1 Viết chương trình con tạo một dãy thực ngẫu nhiên xuất phát từ n1
đến n2 và có giá trị của biên độ theo phân bố GAUSS với trung bình bằng 0,
phương sai bằng 1 Yêu cầu chương trình con có các tham số đầu vào và đầu ra được nhập theo lệnh với cú pháp :[x,n] = randnseq(n1,n2);
Thí nghiệm 2 Cho dãy x(n) = {1,2,3,4,5,6,7,6,5,4,3,2,1} Viết chương trình con
thể hiện trên đồ thị các dãy :
Trang 4Thí nghiệm 3 Cho hệ thống được mô tả bởi phương trình sai phân tuyến tính hệ
số hằng như sau : y(n) – y(n – 1) + 0.9y(n – 2) = x(n)
Sử dụng hàm filter của Matlap, viết chương trình thực hiện các công việc sau:
title('Step Response'); xlabel('n'); ylabel('s(n)');
Thí nghiệm 4 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
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
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ị
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ế 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 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
4 Báo cáo thí nghiệm
Trang 5BÀI 2 THIẾT KẾ BỘ LỌC FIR THÔNG THẤP BẰNG PHƯƠNG
PHÁP XẤP XỈ TỐI ƯU
1 Bài toán thiết kế
Thiết kế bộ chuyển đổi Hilbert theo cấu trúc FIR bằng phương pháp xấp xỉ tối
ưu cân bằng gợn sóng trên dải tần cho trước (0.1 0.9 )
2 Các bước tiến hành thiết kế
* Bước 1: Nhập các chỉ tiêu kỹ thuật của bộ lọc f, m, N Dựa vào dải tần đã cho
xác định bậc N và đáp ứng biên độ mong muốn m tại mỗi cạnh dải thích hợp
Chọn N = 30
Đối với bộ biến đổi Hilbert giá trị m được chọn là [1 1]
* Bước 2: Chọn kiểu bộ lọc FIR thích hợp để thiết kế
Đối với bộ biến đổi Hilbert lý tưởng đáp ứng tần số có dạng:
j
j j
d
je
je e
n n
Sử dụng bộ lọc FIR pha tuyến tính loại 3 để thiết kế bộ biến đổi là thích
hợp nhất Bởi vì hệ thống FIR loại 3 có đáp ứng xung đơn vị phản đối xứng, M lẻ
Đáp ứng tần số có giá trị bằng 0 tại = 0 và = Ngoài ra, đáp ứng biên độ của
nó có giá trị bằng 1 trong một vùng tần số xác định giống với đáp ứng biên độ của
bộ Hilbert lý tưởng
*Bước 3: Tìm đáp ứng xung của bộ biến đổi Hilbert lý tưởng
Đáp ứng xung lý tưởng được tính theo công thức (*)
*Bước 4: Dùng thuật toán Parks-McClellan để xác định đáp ứng xung h(n) của bộ
biến đổi cần thiết kế Thuật toán này được tích hợp trong hàm Remez
*Bước 5: Tìm đáp ứng biên độ - tần số của bộ biến đổi Hilbert thực tế h(n), hd(n)
Hr( ), Hr( )
3 Chương trình thiết kế bộ lọc số
Chương trình được viết và chạy trên nền Matlab 7.0 Trong chương trình sử
dụng một số hàm hỗ trợ có sẵn của Matlab cho xử lý tín hiệu số và một số hàm
thêm vào được tham khảo từ tài liệu
Các hàm liên quan:
[h]=remez(N,f,n,ftype): tìm đáp ứng xung của bộ lọc thực tế theo thuật toán
Parks-McClellan
h : là các hệ số bộ lọc có chiều dài M=N+1
Trang 6N : ký hiệu bậc của bộ lọc
f : một mảng ký hiệu các cạnh dải tính theo đơn vị của π, 0 f 1 Đối với
bộ biến đổi Hilbert tần số thấp nhất không được = 0 và tần số cao nhất không được
bằng 1
m : đáp ứng biên độ mong muốn ở mỗi f Chiều dài của mảng f và m là giống nhau và phải có số phần tử là chẵn
- ftype: loại bộ lọc cần thiết kế
- function [db,mag,pha,grd,w] = freqz_m(h, [1]): tính đáp ứng tần số của bộ
lọc có đáp ứng xung h
- function [Hr,w,c,L]=Hr_Type3(h): hàm này sẽ tính đáp ứng biên độ Hr(w)
theo đáp ứng xung h(n) của bộ lọc FIR loại 3
function [db,mag,pha,grd,w] = freqz_m(b,a);
% Modified version of freqz subroutine
%
% [db,mag,pha,grd,w]=freqz_m(b,a);
% db=Relative magnitude in dB computed over 0 to pi radians
% mag=absolute magnitude computed over 0 to pi radians
% grd= Group delay over 0 to pi radians
% w=501 frequency samples between 0 to pi radians
% b=numerator polynomial of H(z) (for FIR: a=h)
% a=demonitor polynomial of H(z) (for FIR: a=[1])
% w=frequencies between [0 pi] over which Hr is computed
% c= Type-3 LP filter coefficients
% L=Order of Hr
% h=Type-3 LP impulse response
M=length(h);
L=(M-1)/2;
Trang 7fprintf('\n\t\t\t\t QUY NHON 05/2021');
subplot(2,2,1); stem(n,hd); title('Ideal Impulse Response');
xlabel('n'); ylabel('hd(n)'); axis([0 N -0.8 0.8])
set(gca,'XTickMode','manual','XTick',[0,N])
set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8])
subplot(2,2,3); stem(n,h); title('Actual Impulse Response');
xlabel('n'); ylabel('h(n)'); axis([0 N -0.8 0.8])
set(gca,'XTickMode','manual','XTick',[0,N])
set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8])
subplot(2,2,2); plot(w/pi,mag); title('Magnitude Response');
xlabel('frequency in pi units'); ylabel('|Hr|')
Trang 8set(gca,'XTickMode','manual','XTick',[0,f,1])
set(gca,'YTickMode','manual','YTick',[-1,1]);grid
4 Kết quả chạy chương trình và nhận xét đánh giá
BÀI 3 THIẾT KẾ BỘ LỌC FIR THÔNG CAO BẰNG PHƯƠNG
PHÁP LẤY MẪU TẦN SỐ
1 Bài toán thiết kế
Hãy thiết kế bộ lọc FIR thông cao pha tuyến tính theo phương pháp lấy mẫu tần
số, với các chỉ tiêu bộ lọc cần thiết kế được cho như sau:
Cạnh dải chắn: ws
Cạnh dải thông: wp
Độ gợn sóng trong dải thông: Rp
Suy hao trong dải chắn: As
Các đại lượng này có thể được mô tả trên hình 1 như sau:
Điều kiện: ws< wp<1
Hoặc bài toán cho các chỉ tiêu 1 và 2 ta cũng có thể tính được As và Rp dựa vào quan hệ giữa chúng theo công thức (1.1) và (1.2)
2 Các bước tiến hành thiết kế
Bước 1 Chọn số mẫu để lấy mẫu tần số của bộ lọc lý tưởng
Hình 1 Các chỉ tiêu của bộ lọc thông cao HPF (high pass filter)
Trang 9Trong phương pháp lấy mẫu tần số, việc chọn số mẫu để lấy mẫu bộ lọc lý tưởng là rất quan trọng Ở đây, chọn số mẫu M để có 02 mẫu rơi vào dải chuyển tiếp
M = [round(1/(ws1-wp1))]*6+1;
Bước 2 Thực hiện lấy M mẫu tần số bộ lọc lý tưởng
Lúc này ta có M điểm lấy mẫu, trong đó đáp ứng tần số biên độ của các điểm trong dải thông là 1, trong dải chắn là 0 Việc xác định đáp ứng tần số biên độ của
02 mẫu trong dải chuyển tiếp được thực hiện lặp để xác đinh được bộ lọc có Rp và
As là tốt nhất
Bước 3 Tìm đáp ứng xung của bộ lọc thông cao cần thiết kế
Đáp ứng xung của bộ lọc thông cao có thể tìm được bằng phép biển đổi DFT ngược các mẫu hd(n) :
1 ) (
M
k
M nk j
e k H M n
3 Chương trình thiết kế bộ lọc số
Trong phần này sẽ thực hiện chương trình thiết kế bộ lọc thông cao bằng phương pháp lấy mẫu tần số Chương trình sẽ nhận các chỉ tiêu yêu cầu của bộ lọc cần thiết kế, sau đó thực hiện các bước thiết kế để tìm được đáp ứng xung h(n)
Để khảo sát bộ lọc vừa thiết kế, chương trình cũng sẽ thực hiện tính toán và vẽ đáp ứng biên độ - tần số của bộ lọc theo dB, cũng như vẽ các đáp ứng xung lý tưởng hd(n), hàm cửa sổ w(n) và đáp ứng xung bộ lọc thực tế h(n)
Chương trình được viết và chạy trên nền Matlab, với việc sử dụng một số hàm
hỗ trợ có sẵn của Matlab cho xử lý tín hiệu số, và một số hàm viết thêm được tham khảo từ tài liệu [1] (các hàm dưới dạng các file m)
Trang 10As1=input('Nhap sai, nhap lai As>21, As = ');
axis([0,1,-0.1,1.1]); title('Frequency Samples at M=%2.4f',M);
xlabel('Frequency in pi units'); ylabel('Hr(k)')
set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])
set(gca,'XTickLabelMode','manual','XTickLabels',[0;ws;wp; 1])
set(gca,'YTickMode','manual','YTick',[0,T1op,T2op,1]); grid
subplot(2,2,2); stem(l,h); axis([-1,M,-0.4,0.4])
title('Impulse Response'); xlabel('n');ylabel('h(n)');text(M+1,-0.4,'n')
subplot(2,2,3); plot(ww/pi,Hr,wl(1:alpha+1)/pi,Hrs(1:alpha+1),'o');
axis([0,1,-0.1,1.1]); title('Amplitude Response')
xlabel('Frequency in pi units'); ylabel('Hr(w)')
set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])
set(gca,'XTickLabelMode','manual','XTickLabels',[ 0;ws;wp;1])
Trang 11set(gca,'YTickMode','manual','YTick',[T1op,T2op]); grid
subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid
title('Magnitude Response');xlabel('Frequency in pi units'); ylabel('Decibels');
set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])
set(gca,'XTickLabelMode','manual','XTickLabels',[ 0;ws;wp; 1])
set(gca,'YTickMode','Manual','YTick',[-As;0]);
set(gca,'YTickLabelMode','manual','YTickLabels',[As; 0])
4 Kết quả chạy chương trình và nhận xét đánh giá
Kết quả chương trình được thực hiện với ws=0.4pi, wp=0.65pi, Rp=0.4, As=45
BÀI 4 THIẾT KẾ BỘ LỌC THÔNG DẢI IIR SỬ DỤNG BỘ LỌC CHEBYSHEV-1 BẰNG PHƯƠNG PHÁP BIẾN ĐỔI SONG TUYẾN
1 Bài toán thiết kế :
Thiết kế bộ lọc thông dải theo cấu trúc IIR sử dụng bộ lọc Chebyshev-1 bằng phương pháp biến đổi song tuyến tính
2 Các bước tiến hành thí nghiệm :
Các bước được thực hiện như sau:
Bước 1: Nhập các chỉ tiêu kỹ thuật của bộ lọc số :
- Tần số ở mép dải thông wp
- Tần số ở mép dải chắn ws
- Độ mấp mô dải thông Rp
- Độ suy giảm dải chắn As và tham số T
Bước 2: Chiếu các tần số cắt wp và ws từ miền tần số số lên miền tần số tương
tự theo công thức sau:
s
T
Bước 3: Xác định đặc tuyến bộ lọc có hàm truyền Ha(s) thỏa mãn các chỉ tiêu
tương tự trên các điểm Ωp, Ωs.
Bước 4: Chiếu hàm Ha(s) theo phép biến đổi song tuyến
(
z
z T H Z
Bước 5: Chuyển đổi tần số để đạt được bộ lọc số thông dải:
H(z) = HLP(Z )
2 1
1 2
1
2 1
2 1
1
1 )
z z
z G Z
k k
Bước 6: Biến đổi dải tần đạt được bộ lọc số thông dải
Bước 7: Vẽ đáp ứng biên độ - pha tần số và trễ nhóm của các bộ lọc
3 Chương trình thiết kế bộ lọc số
function MANHHUNG_OpeningFcn(hObject, eventdata, handles, varargin) set(handles.mess,'Visible','off');
Trang 12[ws1,wp1,wp2,ws2,Rp,As,wplp,wslp,T,OmegaP,OmegaS,ep,Ripple,Attn]=pushbutton1_Callback(hObject, eventdata, handles)
% nhan data chi dinh wplp
wplp = 0.2*pi; % Digital Passband Freq in Hz
Trang 13% tinh wslp
%wslp = 0.4*pi; % Digital Stopband Freq in Hz
beta = (cos((wp2 + wp1)/2))/(cos((wp2 - wp1)/2));
% Analog prototype specifications: Inverse mapping for frequency %T = 1; % Set T=1
OmegaP = (2/T)*tan(wplp/2); % Prewarp Prototype Passband freq
OmegaS = (2/T)*tan(wslp/2); % Prewarp Prototype Stopband freq
% eventdata reserved - to be defined in MANHHUNG future version of MATLAB
% Analog Chebyshev-I Prototype Filter Calculation
Trang 14
set(gca,'XTickMode','manual','XTick',[0,OmegaP/pi,OmegaS/pi,0.5,1],'FontSize',10);
set(gca,'YTickmode','manual','YTick',[0,Attn,Ripple,1],'FontSize',10); grid
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in MANHHUNG future version of MATLAB
%[N,wn] =
cheb1ord(wplp/pi,wslp/pi,Rp,As);%++++++++++++++++++++++++++++++++++
Trang 15% Impulse invariance transformation to obtain MANHHUNG digital Chebyshev-I lowpass filter
% Plotting Magnitude response :
set(gcf,'CurrentAxes',handles.axes1); cla; % Magnitude response :
set(gca,'YTickmode','manual','YTick',[0,Attn,Ripple,1],'FontSize',10); grid
% Phase response :
set(gcf,'CurrentAxes',handles.axes2); cla;
plot(w2/pi,pha2/pi); title('Phase Response','FontSize',10) xlabel('frequency in pi units','FontSize',10); ylabel('pi units','FontSize',10); axis([0,1,-1,1.1]);
set(gca,'XTickMode','manual','XTick',[0,wplp/pi,wslp/pi,1],'FontSize',10);
set(gca,'YTickmode','manual','YTick',[-As,-Rp,0]); grid %set(gca,'YTickLabelMode','manual','YTickLabel',['-
% hObject handle to pushbutton7 (see GCBO)