Function x n stepseq n0 n1 n2 là gì
Related documents
Preview textTrang 1 Show
BÀI 1: TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC1. PHẦN MỀM MATLAB1 KHỞI ĐỘNG MATLABMatlab(Matrix laboratory) là phần mềm dùng để giải các bài toán kỹ thuật, đặc biệt là các bài toán liên quan đến ma trận. Matlab cung cấp các Toolbox, tức các hàm mở rộng môi trường Matlab để giải quyết các vấn đề cơ bản như xử lý tín hiệu số, hệ thống điều khiển, mạng neuron, fuzzy logic, mô phỏng v. v. Cửa sổ biểu tượng của chương trình Matlab: Hình 1 – Cửa sổ khởi động Matlab Cửa sổ làm việc của Matlab: Hình 1 – Cửa sổ làm việc của Matlab
nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện hoặc các hàm do người dung lập trình ra trong M-files. Các lệnh được nhập sau dấu nhăc ‘>>’ và thực thi lệnh bằng phím enter. Để mở chương trình soạn thảo trong Matlab, gõ lệnh: edit Trang 2
thảo chương trình ứng dụng, được khởi động bằng lệnh edit trong Command window. Chương trình soạn thảo trong cửa sổ edit có hai dạng:
dưới dạng liệt kê, không có biến dữ liệu vào và biến ra.
biến ra. Hình 1 – Cửa sổ edit để soạn script hay function
cửa sổ Command History và cửa sổ này cho phép ta sử dụng lại những lệnh đó bằng cách nhấp đúp chuột lên các lệnh hay biến đó.
vùng nhớ(số byte), kiểu dữ liệu(lớp), các biến được giải phóng sau mỗi lần tắt chương trình. Cửa sổ Workspace cho phép thay đổi giá trị của biến bằng cách nhấn phím chuột phải lên các biến và chọn Edit. 1 CÁC VẤN ĐỀ CƠ BẢN1.2 Các phép toán và toán tử Các phép toán : +, - , *,/,(chia trái), ^(mũ),’(chuyển vị hay số phức liên hợp). Các phép toán quan hệ: <, <=, >,>=, ==, `~= Các toán tử logic: &, |(or), ~(not) Chú ý:
hàng dài quá ta có thể xuống dòng bằng toán tử ba chấm(...) 1.2 Khai báo biến
các tên đặc biệt của Matlab.
khóa global phía trước. 1.2.2 Toán tử ‘’ : ’’ Toán tử ‘’ : ’’ là một toán tử quan trọng của Matlab. Nó xuất hiện ở nhiều dạng khác nhau. Biểu thức 1 :10 là một vector hàng chứa 10 số nguyên từ 1 đến 10. Trang 4 Hàm plot có các dạng khác nhau phụ thuộc vào các đối số đưa vào. Ví dụ nếu y là một vector thì plot(y) tạo ra một đường quan hệ giữa các giá trị của y và chỉ số của nó. Nếu ta có 2 vector x và y thì plot(x,y) tạo ra đồ thị quan hệ giữa x và y. t = 0:pi/100:2*pi; y = sin(t); plot(t,y); % Vẽ hình sin từ 0 - >2grid on Hình 1 – Đồ thị hình sin 1.3 Kiểu đường vẽ Ta có thể dùng các kiểu đường vẽ khác nhau khi vẽ hình. t = [0:pi/100:2*pi]; y = sin(t) plot(t,y,’.’) % vẽ bằng đường chấm chấm Để xác định màu và kích thước đường vẽ, ta dùng tham số sau : Màu được xác định bằng các tham số : Các dạng đường thẳng xác định bằng : Các dạng điểm đánh dấu xác định bằng : Trang 5 x = - pi : pi/10 : pi; y = tan(sin(x)) - sin(tan(x)); plot(x,y,ʹ‐‐rs’,ʹLineWidthʹ,2,ʹMarkerEdgeColorʹ,ʹkʹ,... ʹMarkerFaceColorʹ,ʹgʹ,ʹMarkerSizeʹ,10) Để vẽ hai hàm trên cùng một đồ thị, ta dùng lệnh : hold on 1.3 Vẽ với hai trục y Hàm plotyy cho phép tạo một đồ thị có hai trục y. Ta cũng có thể dùng plotyy để cho giá trị trên hai trục y có kiểu khác nhau nhằm tiện so sánh. t = 0 :900 ; A = 1000 ; b =0 ; a = 0 ; z2 = sin(bt) ; z1 = Aexp(-a*t) ; [haxes, hline1, hline2] = plotyy(t,z1,t,z2, ‘semilogy’, ‘plot’); 1.3 Vẽ đường cong 3-D Nếu x,y,z là ba vector có cùng độ dài thì plot3 sẽ vẽ đường cong 3D. t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square; grid on Vẽ nhiều trục tọa độ Dùng hàm subplot để vẽ nhiều trục tọa độ. subplot(2,3,5) %2,3: xác định có 2 hàng, 3 cột % 5: chọn trục thứ 5 (đếm từ trái sang phải, trên xuống dưới) Ví dụ : x = linspace(1,2*pi); y1 = sin(x);y2 = cos(x); y3 = 2.*exp(-x).*sin(x); x1 = linspace(-2pi,2pi); y4 = sinc(x1); subplot(221);plot(x,y1); title(& 039;Ham y = sinx&039;);subplot(222);plot(x,y2); title(& 039;Ham y = cosx&039;);subplot(223);plot(x,y3); title(& 039;Ham y = 2e^{-x}sinx&039;);subplot(224);plot(x1,y4); title(& 039;Ham y =sinπxπx{sin\pi x \over\pi x} & 039;,&039;interpreter&039;,&039;latex&039;);1.3.5 Giới hạn của trục và chia vạch trên trục Trang 7 Thực thi chương trình trên bằng cách nhấn phím F5, hoặc nhấn vào biểu tượng Run, hoặc trong Command window bằng dòng lệnh sau: hinhsin 1.4 File hàm Hàm là M-file có chứa các đối số. Ta có một ví dụ hàm xây dựng hàm gptb2 để giải phương trình bậc 2: ax 2
function [x1,x2]=gptb2(a,b,c) if nargin < error(& 039;Error! Nhap 3 he so cua phuong trinh&039;)elseif a== x1=-c/b; x2=[]; else delta = b^2 - 4ac; x1 = (-b+sqrt(delta))/(2a); x2 = (-b-sqrt(delta))/(2a); end Từ ví dụ trên ta thấy một hàm M-file gồm các phần tử cơ bản sau :
y, tên hàm gptb2 và đối số vào x.
tên hàm phải bắt đầu bằng ký tự và cùng tên file chứa hàm. Tên hàm là gptb2 thì tên file cũng là gptb2. Lưu ý rằng trong một tên file có thể có nhiều hàm nhưng hàm đầu tiên phải có tên trùng với tên file. Kiểm tra kết quả : [x1,x2]=gptb2(1,6,-7) [x1,x2]=gptb2(0,4,3) [x1,x2]=gptb2(1,6) gptb2(2,7,14) Các hàm toán học cơ bản exp(x) hàm mũ cơ số esqrt(x) căn bậc hai của xlog(x) logarit cơ số elog10(x) logarit cơ số 10abs(x) module của số phức xangle(x) argument của số phức ximag(x) phần ảo của xreal(x) phần thực của xsign(x) dấu của xTrang 8 II. TÍN HIỆU RỜI RẠC THỜI GIAN2 CÁC DÃY SỐ CƠ BẢN
(n)= 𝛿 (𝑛 − 𝑛0 )\= {1 𝑛 = 𝑛0 0 𝑛 ≠ 𝑛0 Trong Matlab để tạo dãy xung đơn vị bằng cách gõ các dòng lệnh vào cửa sổ soạn thảo ( Editor ) và lưu lại thành file “impseq” như sau: function [x,n] = impseq(n0,n1,n2) % tao ra day x(n) = delta(n-n0); n1 <= n0,n0 <= n if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error(& 039;arguments must satisfy n1 <= n0 <= n2&039;)end n = [n1:n2]; x = [(n-n0) == 0]; Trên cơ sở xây dựng được hàm impseq chúng ta mô phỏng tín hiệu dãy xung đơn vị như sau: % Phát một dãy xung đơn vị % tạo vector từ - 5 đến 10 n= [-5 :10]; % phát ra dãy xung đơn vị x = impseq(0,-5,10); % vẽ ra dãy xung stem(n,x);xlabel(‘chi so thoi gian n’); ylabel(‘Bien do’); Đồ thị mô phỏng được thể hiện như hình 2.
u(n) = 𝑢 (𝑛 − 𝑛0 )\= {1 𝑛 ≥ 𝑛0 0 𝑛 < 𝑛0 Tạo dãy nhảy xung đơn vị theo chương trình mẫu bằng cách gõ các dòng lệnh cho ở bảng dưới đây. Vào của sổ soạn thảo ( Editor ) và lưu lại thành file “stepseq”. function [x,n] = stepseq(n0,n1,n2) % tao ra day x(n) = u(n-n0); n1 <= n0,n0 <= n if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error(& 039;arguments must satisfy n1 <= n0 <= n2&039;)end n = [n1:n2]; \= 0 0 1 0 n n 0 0 1 0 n n Hình 2 - Dãy xung đơn vị Trang 10 xlabel(‘chi so thoi gian n’);ylabel(‘Bien do’); title(& 039;day ham sin x ‘);Đồ thị được biểu diễn như hình vẽ 2. 2. 2. MỘT SỐ PHÉP TOÁN DÃY SỐ
y(n) = x(n – n0) Trong Matlab phép toán này được thực hiện bởi hàm sigshift được định nghĩa như sau: function [y,n] = sigshift(x,m,n0) % ham dich chuyen y[n] = x(n - n0); n = m + n0; y = x; 2.2 Phép đảo(Phép chuyển vị) Phép toán này được thực hiện bằng cách thay đổi dấu của đối số của tín hiệu đó: y(n) = x(- n) với mọi n. Trong Matlab phép toán này được thực hiện bởi hàm sigfold được định nghĩa như sau: function [y,n] = sigfold(x,n) % thuc hien y(n) = x(-n) y = fliplr(x); n = - fliplr(n); 2.2 Tổng của hai dãy. Để thực hiện phép cộng trong Matlab thì các dãy phải có cùng chiều dài, trong trường hợp các dãy có chiều dài khác nhau thì trước hết phải tăng một số mẫu có giá trị bằng không để các dãy có cùng độ dài. Việc này thực hiện được nhừ toán tử giao “&” và các toán tử “<=” ; “==”; hàm find khi đó hàm số sigadd minh họa toán tử đó như sau: function [y,n] = sigadd(x1,n1,x2,n2) %thuc hien y(n) = x1(n)+x2(n) n=min(min(n1),min(n2)):max(max(n1),max(n2)); y1=zeros(1,length(n)); y2 = y1; % khoi tao y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 voi chi so cua y(n) y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 voi chi so cua y(n) y=y1+y2; Trang 11 Ví dụ 2. 3 Giả sử x(n) = {1;2;3;4;5;6;7;6;5;4;3;2;1} Hãy xác định và vẽ các dãy sau đây:
n = [0:12] x = [1:1:7,6:-1:1] [x1,n1] = sigshift(x,n,3); [x2,n2] = sigshift(x,n,-2); [x3,n3] = sigadd(2.*x1,n1,-3.*x2,n2); subplot(4,1,1);stem(n,x);grid; subplot(4,1,2);stem(n1,x1);grid; subplot(4,1,3);stem(n2,x2);grid; subplot(4,1,4);stem(n3,x3); Đồ thị được biễu diễn như hình 2. 9. 2.2 Tích của hai dãy. Trong Matlab phép toán này được thực hiện nhờ toán tử mảng(array). Ngoài ra nó còn được thực hiện nhờ hàm Matlab sigmult được định nghĩa như sau: function [y,n] = sigmult(x1,n1,x2,n2) % thuc hien y(n) = x1(n) * x2(n) n = min(min(n1),min(n2)):max(max(n1),max(n2)); y1 = zeros(1,length(n)); y2 = y1; y1 (find((n>=min(n1))&(n<=max(n1))==1)) =x1; y2 (find((n>=min(n2))&(n<=max(n2))==1)) =x2; y = y1.*y2; Ví dụ 2. 4 Giả sử x(n) = {1;2;3;4;5;6;7;6;5;4;3;2;1} Hãy xác định và vẽ các dãy sau đây:
n = [0:12] ; x = [1,2,3,4,5,6,7,6,5,4,3,2,1] [x1,n1] = sigshift(x,n,5); [x2,n2] = sigshift(x,n,-4); [x3,n3] = sigmult(x1,n1,x2,n2); subplot(4,1,1);stem(n,x);title(& 039;tin hieu ban dau&039;);grid;subplot(4,1,2);stem(n1,x1);title(& 039;tin hieu x1&039;);grid;subplot(4,1,3);stem(n2,x2);title(& 039;tin hieu x2&039;);grid;subplot(4,1,4);stem(n3,x3); title(& 039;tin hieu x3&039;);grid;Đồ thị được biễu diễn như hình 2 0. Hình 2. Hình 2 - Tổng của hai dãy Trang 13 clear all; n = 0:40; a = [1 0 0 - 0]; b = [1 2 2]; h = impz(b,a,n+1); stem(n,h);title(& 039;dap ung xung cua he thong&039;);Đồ thị được biễu diễn như hình 2. 14.
Trong thực tế, người ta thường ghép nối tiếp các hệ thống LTI nhân quả bậc thấp với nhau để được các hệ thống bậc cao. Chẳng hạn, người ta ghép hai hệ thống bậc 2 có phương trình sai phân: Hình 2 - Sơ đồ ghép nối hai hệ thống 1 1 1 y ( )n + 0,9 y ( n − 1) + 0,8 y ( n − 2) = 0,3 ( )x n − 0,3 (x n −1) + 0, 4 (x n −2)2 2 2 1 1 1 y ( )n + 0,7 y ( n −1) + 0,85 y ( n − 2) = 0, 2 y ( )n − 0,5 y ( n − 1) + 0,3 y ( n−2) Xét ví dụ mô phỏng hệ thống nối tiếp hai hệ thống bậc 2 giữa hai hệ thống trên. Trong chương trình này, tín hiệu x(n) là tín hiệu kích thích của hệ thống ghép nối. Ví dụ 2. x = stepseq(0,0,40);n=[0:40]; a1 = [1 0 0]; b1 = [0 - 0 0]; a2 = [1 0 0]; b2 = [0 - 0 0]; y1 = filter(b1,a1,x); % Tinh tin hieu ra y1(n) y2 = filter(b2,a2,y1); subplot(3,1,1)stem(n,x);title(& 039;tin hieu loi vao&039;);axis([-5 40 - 0 1 ]);grid;xlabel(& 039;n&039;);ylabel(&039;x(n)&039;);subplot(3,1,2);stem(n,y1); title(& 039;tin hieu dau ra he thong thu nhat&039;);axis ([-5 40 - 1 1]);grid;xlabel(& 039;n&039;);ylabel(&039;y1(n)&039;);subplot(3,1,3); stem(n,y2);title(& 039;tin hieu dau ra&039;);axis([-5 40 - 1 1]);grid;xlabel(& 039;n&039;);ylabel(&039;y(n)&039;);Đồ thị mô phỏng ở hình vẽ 2. 16. 2 BÀI TẬP THỰC HÀNHBài 1: Viết chương trình và vẽ dạng tín hiệu hàm u(n-3), u(n+2), rect 3 (n-2); (n+1) với n [- 10;10]Bài 2: Viết chương trình thể hiện trên đồ thị kết quả phép tính tích chập giữa hai dãy: Hình 2. 16. Mô phỏng ví dụ 2. Hình 2. 14 Đáp ứng xung của hệ thống Trang 14 Bài 3: Xét hệ thống có phương trình sai phân: y(n) = 0(n) + 0(n - 1) - 0(n - 2) - 0(n - 1) + 0(n - 2).
(𝑛)\= {2 𝑣ớ𝑖 𝑛 = − 2 𝑛 + 1 𝑣ớ𝑖 − 1 ≤ 𝑛 ≤ 1 0 𝑛 𝑐ò𝑛 𝑙ạ𝑖 Bài 4: Xác định đáp ứng xung tương đương của hệ thống sau: Hình 2 Sơ đồ ghép nối của bài 6 Viết chương trình xác định ngõ ra của hệ thống khi ngõ vào là x(n) = (-2) n u(n- 2 ).(Tính toán cho giá trị n từ - 20 đến 20). |