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.
BÀI 1: GIỚI THIỆU MATLAB CƠ BẢN MỤC ĐÍCH THÍ NGHIỆM - Giới thiệu tổng quan Matlab số lệnh chức - Giới thiệu công cụ SPTool hỗ trợ thiết kế lọc số - Thực thi chương trình Matlab với lệnh xử lý tín hiệu rời rạc THIẾT BỊ THÍ NGHIỆM STT Tên thiết bị/Phần mềm Số lượng 01 Máy vi tính cá nhân có cài đặt phần mềm Matlab® 01 GIỚI THIỆU MATLAB® VÀ MỘT SỐ LỆNH CƠ BẢN 3.1 GIỚI THIỆU PHẦN MỀM MATLAB® Matlab (Matrix Laboratory) mơi trường tính tốn đa ứng dụng, tính tốn để thực nhanh 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 Matlab cho phép thực dễ dàng tính tốn số đồ họa Khi khởi động Matlab, giao diên làm việc xuất hình 1, với cửa số sau: Cửa sổ lệnh (command window): thực thi lệnh Không gian biến (workspace): thị biến định nghĩa Các lệnh thực (command history): thị lệnh sử dụng Hình Các cửa sổ làm việc Matlab Để tra cứu thông tin hàm, sử dụng cú pháp lệnh “help + tên hàm” cửa sổ lệnh Một ví dụ tra thơng tin làm ‘sqrt’ thực hình Hình Lệnh giúp đỡ (help) Matlab cung cấp phương thức để thực thi lệnh gồm i) Nhập lệnh từ dấu nhắc cửa sổ lênh ii) thực thi lệnh thông qua M-files sử dụng Matlab Editor Một ví dụ việc thực thi lệnh từ dấu nhắc cửa sổ lệnh thực cho phép cộng + lưu kết vào biến ‘a’ sau: Matlab trả kết a = Trong trường hợp biến lưu khơng gán kết lưu biến ‘ans.’ Ngoài ra, Matlab cho phép thực lệnh thông qua M-files sử dụng ‘Matlab Editor.’ Hầu hết lệnh tạo Matlab lưu trữ dạng tệp có phần mở rộng m Các tệp m chứa chuỗi lệnh Matlab thực thi theo thứ tự chúng gọi Để tạo tệp m, trước tiên, duyệt qua cửa sổ thư mục công cụ đặt thư mục mà tập lệnh Matlab lưu trữ Tiếp theo, mở tệp văn cách nhấp vào biểu tượng tài liệu trống công cụ Một tập lệnh trống hiển thị cửa sổ ‘Editor.’ Tập lệnh chuỗi lệnh, thực từ xuống Các tệp M gọi thực thi từ cửa sổ lệnh cách nhập tên chúng Ví dụ, cách gõ Script cửa sổ lệnh, tệp m có tên Script.m gọi thực thi (Bạn chạy tập lệnh menu gỡ lỗi trình chỉnh sửa phím tắt “Lưu chạy”, F5.) (Gợi ý: Không nên đặt tên tập lệnh bắt đầu số chẳng hạn 123testing.m Matlab coi lệnh bắt đầu số phép tính 123testing phép tính khơng hợp lệ MATLAB, lỗi trả về.) Các thích chèn vào dịng lệnh cách thêm ‘%’ vào đầu câu lệnh bạn Ví dụ: tan(x) = sin(x)/cos(x) %Tangent of an argument in radians Bất kỳ câu lệnh xuất sau dấu “%” dòng bị MATLAB bỏ qua coi nhận xét Ví dụ tạo hàm M-files thực phép cộng + thực qua bước sau: Bước 1: từ sổ HOME chọn tab new, sau chọn ‘Script’ Bước 2: Viết lệnh vào cửa sổ script tạo sau lưu lại với tên Khi file m lưu không gian ‘Current Folder’ hình sau: Bước 3: Để chạy file m vừa tạo thực theo cách: Chọn RUN tab EDITOR, nhập tên file m lên cửa sổ lệnh nhấn F5 bàn phím Sau chạy cho hiển thị kết a = cửa sổ lệnh biến a lưu không gian làm việc ‘Workspace.’ Kết hình sau: Thực hành: Thực tạo file m với tên lệnh 3.2 MỘT SỐ LỆNH MATLAB® CƠ BẢN SỬ DỤNG TRONG MƠN HỌC 3.2.1 Một số lệnh a) Toán tử logic quan hệ Các toán tử logic quan hệ cho phép so sánh đại lượng vô hướng, ma trận phần tử Các tốn tử sau có sẵn sử dụng rộng rãi lập trình Matlab < Nhỏ Lớn >= Lớn == Bằng ~= Khơng | OR & AND ~ NOT Các tốn tử logic OR (|), AND (&), and NOT (~) sử dụng để kết nối định lượng quan hệ Khi toán tử logic áp dụng cho tốn tử vơ hướng, kết tốn tử tốn tử vơ hướng 0’s (Sai) 1’s (Đúng) Ví dụ, kết logic phép tính lớn thực sau >> > ans = Nếu toán tử quan hệ logic áp dụng cho ma trận có kích thước, kết đưa áp dụng toán tử ma trận cho giá trị mối quan hệ mục nhập tương ứng Ví dụ: >> A = [1 2; 4]; B = [1 ; 5]; A == B ans = 1 b) Vẽ đồ thị Một tính hữu ích MATLAB trực quan hóa liệu (tức vẽ biểu đồ) Hai hàm biểu đồ phổ biến sử dụng xử lý tín hiệu số (DSP) biểu đồ lệnh biểu đồ gốc Nếu x y hai vectơ có độ dài, biểu đồ (x, y) gốc (x, y) lập biểu đồ x so với y cách kết nối biểu đồ với điểm liệu Sự khác biệt biểu đồ gốc là, biểu đồ vẽ đồ thị liên tục gốc vẽ đồ thị rời rạc Các lệnh bên tạo biểu đồ đồ thị cosine cách sử dụng biểu đồ gốc hàm x = 0:pi/20:2*pi; % Define vector x from to 2pi with step size pi/100 lệnh trên, véc tơ xác định với y Từ = sin(x); % x Define vector y thành phần giá trị cách từ đến Create graph with two sub-graphs in biến row column 2πsubplot(1,2,1); với bước chạy 0.05π% véc tơ ay định nghĩa hàm sin theo x Có tính and with subplot position hữu ích khác sử dụng với biểu plot(x,y,'b-'); % Plot x versus y đồ gốc hàm có tên subplot Hàm axis([0 tạo một2*pi mảng-1các1]); ô cửa sổ cách chia thành hình chữ xlabel('x (pi)'); nhật đánh số theo hàng Subplot sử dụng kết hợp với ô gốc để tạo mảng ylabel('y=sin(x)'); %Label of x-axis and y-axis Sine(m, from to 2pi'); %Title ô title('Graph of cửaContinuous sổ Hàm subplot n, p)0 chia cửa sổ hình thànhofmagraph trận m × n gồm trục nhỏ vẽ đồ thị trục thứ p trả xử lý trục Các trục tính từ hàng subplot(1,2,2);stem(x,y,'r-') %Plot p versus q with subplot position axis([0 2*pi -1 cửa sổ Figure cho1]); đến hàng cửa sổ Figure xlabel('x (pi)'); Kết thu sau: ylabel('y=sin(x)'); %Label of p-axis and q-axis title('Graph of Discrete Sine from to 2pi'); %Title of graph Hình cho thấy đồ thị tạo lệnh đề cập trước Đồ thị bên trái tạo đồ thị hàm số ‘plot(x,y)’ đồ thị bên phải tạo gốc hàm ‘stem(x,y)’ Vị trí đồ thị xác định đồ thị hàm subplot(m, n, p) Ngồi ra, Matlab cịn cung cấp hàm cho phép vẽ đồ thị với đặc tính khác tỷ lệ logarithm hoành độ tung độ, vẽ đồ thị 3D … Thực hành 1: Viết file-M thực chương trình lưu với tên Bai1_NHOMx_PlotGraph.m Yêu cầu 1: Ghi nhớ lệnh matlab chương trình c) Vịng lặp cấu trúc có điều kiện Các lệnh phổ biến MATLAB sử dụng để viết vòng lặp, vòng lặp điều kiện câu lệnh điều kiện for, while if-else Các câu lệnh điều khiển hoạt động giống ngôn ngữ lập trình khác For: Một câu lệnh lặp; ví dụ sử dụng lệnh for hiển thị bên dưới: >> n = 5; A = []; for i = 1:n, A = [A, i^2]; end >> A A = 16 25 Câu lệnh tạo vector A có thành phần bình phương số thành phần While: Hình thức chung vòng lặp while Matlab hiển thị bên dưới: while conditions(relationships); statements(actions) end Câu lệnh while thực thi lặp lặp lại quan hệ Ví dụ minh họa luồng câu lệnh while n = 0; x = 5; while n < x n = n + 1; fprintf('%d ', n); end Câu lệnh thực việ in giá trị n n < x If: Hình thức chung câu lệnh điều kiện if Matlab hiển thị bên dưới: if conditions(relationships) statements (actions) end Các câu lệnh (hoặc hành động) thực thi quan hệ Nhiều nhánh if có thể, minh họa ví dụ bên dưới: if n < counter = 0; elseif n = counter = counter + 1; else n > counter = counter + 2; end 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 IDFT Phép biến đổi Fourier rời rạc - DFT tín hiệu rời rạc cho trước x n x , x1 , �, x N 1 cho biểu thức sau N 1 X k �x nW n0 nk N N 1 �x n e j 2 nk N , k 0,�, N n0 Trong j đơn vị phức Phép biến đổi Fourier rời rạc ngược - IDFT tín hiệu trước X k X , X , �, X N 1 cho biểu thức sau x n N N 1 �X k e j 2 nk N , n 0, �, N k 0 Ngoài ra, Matlab cung cấp lệnh ‘fft’ ‘ifft’ dùng tương ứng cho biến đổi Fourier rời rạc thuận (DFT) nghịch (IDFT) Cú pháp sử dụng lệnh sau Xk = fft(xn) xn = ifft(Xk) Ý nghĩa phép biến đổi Fourier tìm giá trị miền tần số tín hiệu Do kết phép biến đổi DFT cho biết thành phần tần số có tín hiệu Hay nói cách khác biết phổ tín hiệu thơng qua giá trị biến đổi DFT Từ chuỗi X k tính giá trị phổ biên độ X k phổ pha �X k tương ứng lệnh ‘abs’ ‘angle’ Matlab Ví dụ: Thực chương trình Matlab tính DFT tín hiệu x n 1, 2,3, 4,5, 6 theo cách tính tốn theo biểu thức sử dụng lệnh Matlab fft clc; close all; xn L Xk of = [1, 2, 3, 4, 5, 6]; = length(xn); %find the length of the sequence = zeros(1,L); %initialize an array of same size as that input sequence %DFT of the sequence for k = 0:L-1 for n = 0:L-1 Xk(k+1) = Xk(k+1) + xn(n+1)*exp(-1j*2*pi*k*n/L); end end % Using FFT Matlab Xk_2 = fft(xn,L); %Plotting input sequence t=0:L-1; subplot(1,3,1); stem(t,xn); ylabel ('Amplitude'); xlabel ('Time Index'); title('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'); % Find the phases of individual DFT points Xk_phase = angle(Xk); Xk_2_phase = angle(Xk_2); % plot the magnitude sequence subplot(1,3,3); stem(t,Xk_phase,'bo-'); hold on; stem(t,Xk_2_phase,'r* '); hold on; ylabel ('Phase'); xlabel ('K'); title ('Phase Response'); legend('Computing', 'fft Matlab'); Kết thu hình sau: Thực hành 2: Viết file-M thực chương trình lưu với tên Bai1_NHOMx_DFT.m Yêu cầu 2: Ghi nhớ lệnh matlab chương trình Thực hành 3: Viết chương trình thực biến đổi IDFT chuỗi X k 10, 2 2i, 2, 2 2i theo cách Lưu lại với tên Bai1_NHOMx_IDFT.m 3.3.2 Tích chập Giả sử ngõ lọc y n có tín hiệu ngõ vào x n Tín hiệu ngõ xác định theo biểu thức tích chập cho đáp ứng xung y n x n h n h n Xem xét dạng trực tiếp phép tích chập ta có y n n , M � m max 0, n L x 1 h m x m n , x n Trong Giả sử có L x chiều dài tín hiệu M bậc lọc Khi đó, ngõ y n có chiều dài L y Lx N 1 Như vậy, ngõ h n y n tìm thơng qua lưu đồ tính tích chập trực tiếp x n sau Lx = length(xn); N = length(hn); M = N - 1; Ly = Lx + M; yn = zeros(1, Ly); for n = : 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 sử dụng lênh conv(x,h) Trạng thái độ ổn định ngõ mơ tả hình sau Trong đó, trạng thái độ ngõ vào lên khoảng mẫu đến M-1, trạng thái ổn định khoảng mẫu thứ M đến L-1, vùng độ ngõ vào tắt khoảng mẫu L đến L + M – Như lưu ý quan trọng sử dụng vùng ổn định ngõ để đảm bảo tính xác phân tích thí nghiệm sau Thực hành 4: Viết file-M tìm ngõ y(n) hệ thống nhân với ngõ vào x(n) = [1, 3, 5, 3, 6, 3] đáp ứng xung h(n) = [1, 4, 7, 2, 8] theo cách, lưu với tên Bai1_NHOMx_conv.m 3.3.3 Đáp ứng tần số lọc Để vẽ đáp ứng tần số lọc có hàm truyền định đáp ứng tần số H H z thực sau Xác khảo sát khoảng � � Ví dụ, phác họa đáp ứng miền tần số lọc có hàm truyền sau H z 0.4 z 1 0.8 z 1 2e j 0.8e j với 2 f / f s Khi đồ thị đáp ứng tần số Ta có đáp ứng tần số thực 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); H Ngoài ra, Matlab cho phép tính đáp ứng tần số từ hệ số hàm truyền thông qua lệnh freqz sau a = [1, -0.8]; b = [5, 2]; [H_matlab, w] = freqz(b,a); H_matlab_manitude = abs(H_matlab); H_matlab_phase = angle(H_matlab); Trong a, b vec tơ hệ số mẫu tử hàm truyền Trong cách thực nêu trên, đáp ứng tần số Thực hành 5: Viết file-M vẽ đáp ứng tần số hệ thống có hàm truyền theo cách: i) tính tốn đáp ứng tần số ii) sử dụng hàm Matlab, lưu với tên Bai1_NHOMx_freqz.m 3.3.4 Tạo mẫu giá trị số tín hiệu 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 = kHz khoảng thời gian từ đến 0.01 (s) Sau vẽ đồ thị tín hiệu theo thời gian mẫu Xác định vẽ biểu đồ phổ biên độ phổ pha tín hiệu Trước tiên có thời điểm lấy mẫu tín hiệu là: 0, Ts, 2Ts … 0.01 – Ts, với Ts chu kỳ lấy mẫu Khi mẫu tín hiệu thực theo chương trình sau: clc clear % Signal Genergating Fs = 8e3; % Sampling frequency kHz Ts = 1/Fs; % Sampling period F_xt = 300; % Frequency of signal 300 Hz T_sim = 0.01; % Signal duration in seconds 50 ms t = : Ts : T_sim - Ts; xn = sin(2 * pi * F_xt * t); N = length(xn); % DFT length = signal length Xk = fft(xn, N); % DFT of signal Xk_Man = abs(Xk); Xk_Pha = angle(Xk); %% 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'); Thực hành 6: Viết chương trình Matlab thực yêu cầu sau: s cos 2 f 1t Tạo chu kỳ mẫu tín hiệu với f 400 Hz, tần số lẫy mẫu 8000 Hz T �t 3T � s3 � elsewhere � Tạo mẫu tín hiệu lấy mẫu với 20 chu kỳ T s sinc 2 f t 0.5 Tạo tín hiệu sinc với f 40 Hz, �t (s) lấy mẫu tần số 500 Hz d) Tín hiệu khác Ngồi Matlab cịn cung cấp hàm tín hiệu khác bảng sau: Hàm Dirac Bước đơn vị Xung vuông Xung tam giác Lệnh Matlab dirac Heaviside rectpuls tripuls 3.4 THIẾT KẾ BỘ LỌC SỐ VỚI MATLAB® 3.4.1 Thiết kế lọc số với công cụ SPTool SPTool công cụ có giao diện tương tác dùng cho xử lý số tín hiệu Cơng cụ sử dụng để phân tích tín hiệu, thiết kế lọc, phân tích lọc, lọc tín hiệu phân tích phổ tín hiệu Để khởi động SPTool, từ dấu nhắc lệnh MATLAB, nhập lệnh >> sptool Khi đó, giao diện SPTool xuất sau: Hình Giao diện SPTool Khi mở SPTool, chứa tập hợp tín hiệu, lọc phổ mặc định Trên giao diện SPTool, có cột: Signals, Filters Spectra Dưới cột có nút sử dụng cho cột Cột Signals hiển thị tín hiệu, cột Filters hiển thị lọc cột Spectra hiển thị phổ workspace (vùng làm việc) SPTool Các tín hiệu, lọc phổ workspace MATLAB đưa vào SPTool lệnh Import menu File SPTool Các tín hiệu, lọc phổ tạo import vào SPTool tồn dạng cấu trúc MATLAB Để lưu lại tín hiệu, lọc phổ tạo chỉnh sửa SPTool, sử dụng lệnh Export menu File, chúng lưu lại dạng cấu trúc MATLAB Để bắt đầu thiết kế lọc mới, bạn nhấn vào nút New cột Filter Khi đó, giao diện Filter Designer dùng để thiết kế lọc sau xuất Filter Designer cung cấp môi trường đồ họa tương tác để thiết kế lọc số IIR FIR dựa tiêu chuẩn người dùng xác định Các loại lọc 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ế lọc FIR: Equiripple, Least squares, Window Các phương pháp thiết kế lọc IIR: Butterworth, Chebyshev loại I, Chebyshev loại II, Elliptic Hình Giao diện Filter Designer Ví dụ 1: Thiết kế lọc FIR chắn dải sử dụng công cụ SPTool với thông số sau: Bộ lọc thiết kế phương pháp cửa sổ Kaiser Chiều dài đáp ứng xung: N = 89 (MATLAB hiển thị bậc lọc 88) Tần số trung tâm: 2700 Hz Tần số cắt: 2500 Hz 2900 Hz Giá trị = Tần số lấy mẫu 8000 Hz Các bước thiết kế sau: Khởi động SPTool Dưới cột Filters, nhấn nút New để mở cửa sổ Filter Designer Trong giao diện Filter Designer: a Trong text box Filter: Tên lọc tự đặt (ở filt1) Tên thay đổi sau b Nhập 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 thiết kế lọc có bậc tối thiểu) iv Filter Order = 88, Type = Bandstop, Fc1 = 2500, Fc2 = 2900, Beta = c Nhấn Apply Khi đáp ứng tần số lọc thiết kế hiển thị Hình Đáp ứng tần số lọc thiết kế Trở cửa sổ SPTool, cột Filters xuất thêm dịng filt1 [design] Đây lọc vừa thiết kế Nếu muốn sửa đổi thiết kế, nhấn chọn tên lọc nhấn nút Edit phía Để dễ nhớ, ta thay đổi tên lọc thành bs2700 cách chọn Edit Name…filt1 [design] Trong cửa sổ xuất hiện, nhập tên Khi thiết kế lọc FIR trên, kết mà ta cần nhận sau thiết kế giá trị vector đáp ứng xung h lọc thiết kế Để lấy giá trị vector đáp ứng xung, ta thực sau: Từ cửa sổ SPTool, chọn File Export… Trong Export list xuất hiện, chọn Filter: bs2700 [design] nhấn nút Export to workspace Đóng cửa sổ SPTool lại Một thơng báo xuất hỏi có muốn lưu lại phiên làm việc hay không Nếu muốn lưu lại, chọn Save 3 Mở cửa sổ Workspace MATLAB, ta thấy workspace xuất biến bs2700 Đây lọc mà ta thiết kế SPTool xuất workspace MATLAB Biến lưu dạng cấu trúc mô tả lọc thiết kế Nhấn đúp chuột vào tên biến bs2700 workspace, ta thấy field cấu trúc sau: Hình Các field bs2700 Trong field này, field tf thể hàm truyền lọc Field cấu trúc gồm field: tf.num tf.den thể tương ứng hệ số đa thức tử số đa thức mẫu số Đối với lọc FIR, hàm truyền có tử số hệ số tử số đáp ứng xung lọc Do đó, với lọc trên, giá trị vector đáp ứng xung lưu bs2700.tf.num Trong cửa sổ Array Editor trên, nhấn đúp vào field tf nhấn đúp vào num, ta thấy hệ số đáp ứng xung lọc Để gán hệ số vào vector h, MATLAB dùng lệnh sau: >> h = bs2700.tf.num Hình Vector đáp ứng xung lọc thiết kế Các giá trị thu vector đáp ứng xung sử dụng để thực lọc số lên kit DSP Thực hành 7: Thực việc thiết kế lọc FIR chắn dải với thông số ví dụ Lấy hệ số viết chương trình vẽ đáp ứng tần số lọc Lưu lại với tên BAI_1_NHOMx_bs2700_freqz Sử dụng hàm semilogy thay cho plot đưa nhận xét khác biệt Ví dụ 2: Thiết kế lọc IIR chắn dải sử dụng công cụ SPTool với yêu cầu sau: Sử dụng phương pháp Elliptic để thiết kế lọc IIR chắn dải bậc 10, tần số trung tâm 1750Hz Chú ý MATLAB hiển thị bậc lọc 5, biểu diễn số phần bậc lọc (Điều với lọc IIR thông dải chắn dải) Các thông số lọc sau Tần số cắt: 1700 Hz 1800 Hz Độ gợn dải thông dải chắn tương ứng dB 60 dB Tần số lấy mẫu: 8000 Hz Cách thực hiện: Thực tương tự ví dụ trên, lưu lọc thiết kế với tên bs1750 xuất workspace Trong workspace có cấu trúc tên bs1750 Các hệ số tử số mẫu số hàm truyền lưu tương ứng biến bs1750.tf.num bs1750.tf.den Hình Đáp ứng tần số lọc IIR thiết kế Dạng cực – zero hàm truyền H(z) sau: Hàm truyền viết lại sau: Với L số nguyên gần lớn cực đại n/2 m/2 Trong MATLAB, phần bậc H(z) lưu ma trận sau: Từ hệ số tử mẫu trên, ta chuyển thành dạng phần bậc hai lệnh sau: >> [z,p,k] = tf2zp(bs1750.tf.num, bs1750.tf.den) >> sos = zp2sos(z,p,k) Các phần tử ma trận sos sử dụng để thực lọc IIR lên kit DSP Thực hành 8: Thực việc thiết kế lọc FIR chắn dải với thông số ví dụ Lấy hệ số viết chương trình vẽ đáp ứng tần số lọc Lưu lại với tên BAI_1_NHOMx_bs2700_freqz Sử dụng hàm semilogy thay cho plot 3.4.2 Thiết kế lọc lệnh MATLAB Bên cạnh việc sử dụng công cụ SPTool để thiết kế lọc trên, MATLAB có số lệnh sử dụng để thiết kế lọc Các lệnh sử dụng thiết kế số loại lọc mà SPTool khơng có sẵn, ví dụ lọc multiband Ví dụ 1: Thiết kế lọc FIR multiband lệnh MATLAB Trong ví dụ này, thiết kế lọc FIR multiband gồm 63 hệ số Tần số lấy mẫu 10 kHz Chúng ta sử dụng hàm remez MATLAB Hàm remez sử dụng giải thuật Parks – McClellan dựa giải thuật Remez lý thuyết xấp xỉ Chebyshev Bộ lọc cần thiết kế có đáp ứng tần số sau: 1.2 0.8 0.6 0.4 0.2 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 Hình Đáp ứng tần số lọc multiband FIR cần thiết kế Bộ lọc mong muốn có dải thơng, biểu diễn dải sau: Dải Tần số (Hz) Tần số chuẩn hóa f/FN Biên độ – 500 – 0.1 600 – 900 0.12 – 0.18 1000 – 1500 0.2 – 0.3 1600 – 1900 0.32 – 0.38 2000 - 5000 0.4 - Trong FN tần số Nyquist, ½ tần số lấy mẫu Chúng ta viết file m để thiết kế lọc này, lưu lại với tên multibandfir63.m Nội dung file sau: %multibandfir63.m: Multiband FIR filter with 63 coefficients f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1]; m = [0 1 0 1 0]; n = 63; cof = remez(n-1,f,m); % frequency response with 256 points [h w] = freqz(cof,1,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, có số lưu ý: Dịng lệnh cof = remez(n-1,f,m) trả vector hệ số lọc FIR bậc n – 1, với f m xác định dải tần số theo bảng Lệnh freqz để tính đáp ứng tần số lọc Lệnh plot thứ vẽ đáp ứng tần số mong muốn dựa f m Lệnh figure tạo cửa sổ lệnh plot thứ hai vẽ đáp ứng tần số lọc thiết kế lên cửa sổ Ở đây, kết trình thiết kế mà ta cần nhận hệ số chứa biến cof Chúng sử dụng thực lọc lên kit DSP Ví dụ 2: Thiết kế lọc IIR multiband lệnh MATLAB Trong thí nghiệm này, thiết kế lọc IIR multiband có đáp ứng mong muốn lọc ví dụ Tần số lấy mẫu 10 kHz Các bước thiết kế giống với nội dung file multibandiir63.m dùng để thiết kế sau: %multibandiir63.m: Multiband IIR filter with 63 coefficients f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1]; m = [0 1 0 1 0]; 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 thay lệnh yulewalk dùng để thiết kế lọc IIR Lệnh trả hệ số tử số mẫu số hàm truyền lọc, chứa tương ứng biến num den Lệnh freqz sửa đổi để vẽ đáp ứng tần số lọc IIR thiết kế Các giá trị num den sử dụng để thực lọc Thực hành: Thực chương trình thiết kế lọc thơng dải đa dải vẽ đáp ứng tần số với yêu cầu ví dụ Thực hành: Thiết kế lọc FIR chắn đa dải 1000-1500 2500-3000, có bậc 62, tần số lấy mẫu 10 kHz Sau vẽ đáp ứng tần số lọc Thực hành: Thiết kế lọc IIR chắn đa dải 1000-1500 2500-3000, có bậc 62, có tần số lấy mẫu 10 kHz Sau vẽ đáp ứng tần số lọc ... thông qua lệnh freqz sau a = [1, -0.8]; b = [5, 2]; [H _matlab, w] = freqz(b,a); H _matlab_ manitude = abs(H _matlab) ; H _matlab_ phase = angle(H _matlab) ; Trong a, b vec tơ hệ số mẫu tử hàm truyền Trong... biến ‘ans.’ Ngồi ra, Matlab cho phép thực lệnh thơng qua M-files sử dụng ? ?Matlab Editor.’ Hầu hết lệnh tạo Matlab lưu trữ dạng tệp có phần mở rộng m Các tệp m chứa chuỗi lệnh Matlab thực thi theo... hiệu khác Ngồi Matlab cịn cung cấp hàm tín hiệu khác bảng sau: Hàm Dirac Bước đơn vị Xung vuông Xung tam giác Lệnh Matlab dirac Heaviside rectpuls tripuls 3.4 THIẾT KẾ BỘ LỌC SỐ VỚI MATLAB? ? 3.4.1