Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
222,25 KB
Nội dung
BÀI MƠ PHỎNG HỆ THỐNG VÀ TÍNHIỆU RỜI RẠC BẰNG MATLAB TÍNHIỆU VÀ HỆ THỐNG RỜI RẠC Ở MIỀN THỜI GIAN RỜI RẠC n Yêu cầu trước làm thínghiệm Sinh viên nắm vững kiến thức “Tín hiệu hệ thống rời rạc” bao gồm: • Các tínhiệu • Hệ thống tuyến tính bất biến Đáp ứng xung hệ thống tuyến tính bất biến • Phương trình sai phân tuyến tính hệ số Mục đích phần thínghiệm Sinh viên dùng MATLAB mơ nội dung sau: • Các tínhiệu miền thời gian • Tính tích chập • Đáp ứng hệ thống mơ tả phương trình sai phân tuyến tính hệ số Tóm tắt lý thuyết Xửlýsốtín hiệu, chất, tìm hiểu phép toán giải thuật liên quan đến tínhiệu rời rạc hệ thống rời rạc Các tínhiệu rời rạc thường thể dạng dãy số sau: {…, x(-3), x(-2), x(-1), x(0), x(1), x(2), x(3), …} Tuy nhiên, MATLAB có khả biểu diễn dãy số với độ dài hữu hạn Khi dãy số khai báo lưu trữ dạng vector, ví dụ: >> x = [3, 2, -1, 7, -5] Với cách khai báo vậy, dãy sốsố thành phần dãy Vì vậy, để biểu diễn dãy rời rạc có độ dài hữu hạn, ta cần khởi tạo lưu trữ chúng dạng vector Ví dụ: >> n = [-2:2] >> x = [3, 2, -1, 7, -5] hiểu dãy gồm phần tử xuất phát từ -2 đến có: x(-2)=3, x(-1)=2, x(0)=-1, x(1)=7 x(2)=-5 Trong tất thínghiệm MATLAB mơn học này, nên tuân theo nguyên tắc Định nghĩa số dãy a Dãy xung đơn vị: Dãy xung đơn vị trễ (dịch) n0 mẫu: b Dãy nhảy đơn vị: c Dãy hàm mũ thực: d Dãy hàm mũ phức: σ độ suy giảm tín hiệu, ω0 tần số góc tính theo đơn vị radians e Dãy lượng giác: Dãy lượng giác dãy thể tínhiệu có dạng hàm tốn học tổ hợp tuyến tính hàm sin cosin Một ví dụ dãy lượng giác sau: với θ pha ban đầu tínhiệu f Dãy ngẫu nhiên: Là dãy mà phần tử dãy có giá trị ngẫu nhiên Sự phân bố ngẫu nhiên điều chỉnh phân bố hay tuân theo quy luật phân bố xác suất Trong MATLAB có sẵn số hàm cho phép khởi tạo dãy ngẫu nhiên theo phân bố theo phân bố Gauss g Dãy tuần hoàn: Dãy tuần hoàn dãy có giá trị phần tử lặp lại tuần hoàn sau số mẫu định Dãy tuần hoàn thường ký hiệu đọc ‘x ngã’ Chúng ta biểu diễn dãy với số chu kỳ tuần hoàn MATLAB cách đặt liên tiếp số hữu hạn dãy xuất phát từ dãy có chiều dài hữu hạn Mỗi dãy thể chu kỳ dãy tuần hoàn Một số lệnh hàm MATLAB : Phần đưa danh mục lệnh hàm MATLAB sử dụng phần thínghiệm Để biết cụ thể chức hàm cú pháp lệnh gọi hàm, gõ lệnh help kèm theo tên hàm cửa số lệnh MATLAB zeros: tạo ma trận với tồn phần tử có giá trị ones: tạo ma trận với toàn phần tử có giá trị rand: tạo ma trận với phần tử nhận giá trị ngẫu nhiên phân bố khoảng từ đến randn: tạo ma trận với phần tử nhận giá trị ngẫu nhiên theo phân bố Gauss có giá trị trung bình 0, phương sai min: trả giá trị nhỏ ma trận max: trả giá trị lớn ma trận fliplr: lộn ngược lại thứ tự phần tử ma trận theo hướng xuất phát từ phải qua trái trở thành từ trái qua phải plot stem: vẽ đồ thị dãy số, plot để thể dạng liên tục, stem để thể dạng rời rạc, thường sử dụng hàm stem để vẽ tínhiệu miền n conv: trả tích chập vector filter: trả đáp ứng theo thời gian hệ thống mô tả phương trình sai phân tuyến tính hệ số Ngồi ra, sinh viên cần tìm hiểu cách cẩn thận phép toán ma trận vector phần trợ giúp (Help) MATLAB cách nhấn F1 vào mục MATLAB -> Getting Started -> Matrices and Arrays Các bước thực hành 1.1 Tạo dãy xung đơn vị dãy nhảy đơn vị theo chương trình mẫu cách gõ dòng lệnh cho bảng vào cửa số soạn thảo (Editor) ghi lại theo tên tệp impseq.m stepseq.m: Dãy xung đơn vị: function [x,n] = impseq(n0,n1,n2) %Tao day x(n) = delta(n-n0); n1 >solution_1_8 xtilde = 5 5 4 4 3 3 2 2 1 1 xtilde = 5 Day so theo dau bai 1.8 4.5 3.5 xtilde(n) 2.5 1.5 0.5 -10 -8 >> energy(x,n) -6 -4 -2 n 10 Dap ung don vi 2.5 y 1.5 0.5 -20 20 40 n 60 80 100 C TÍNHIỆU VÀ HỆ THỐNG RỜI RẠC Ở MIỀN Z, MIỀN TẦN SỐ LIÊN TỤC ω, VÀ MIỀN TẦN SỐ RỜI RẠC k Yêu cầu trước làm thínghiệm Sinh viên nắm vững kiến thức phép biến đổi xửlýsốtín hiệu, ứng dụng phép biến đổi việc biểu diễn hệ thống tínhiệu cách gián tiếp miền khác bao gồm: biểu diễn hệ thống tínhiệu rời rạc miền Z, biểu diễn hệ thống tínhiệu rời rạc miền tần số liên tục (miền ω), biểu diễn tínhiệu rời rạc miền tần số rời rạc (miền k) Mục đích phần thínghiệm Sinh viên dùng MATLAB mơ nội dung sau: • Biểu diễn đồ thị hàm phổ biên độ phổ pha dãy tínhiệu biết trước hàm ảnh qua phép biến đổi Fourier hàm số • Viết chương trình tính gần biểu diễn đồ thị biến đổi Fourier dãy có chiều dài hữu hạn • Biểu diễn đồ thị phân bố điểm cực điểm khơng hệ thống • Biểu diễn đồ thị hàm đáp ứng tần số hệ thống • Biểu diễn đồ thị ảnh phép biến đổi Fourier rời rạc dãy có chiều dài hữu hạn • Đánh giá hiệu thuật toán biến đổi Fourier nhanh với chiều dài dãy thay đổi Tóm tắt lý thuyết Một số lệnh hàm MATLAB Phần đưa danh mục lệnh hàm MATLAB sử dụng phần thínghiệm Để biết cụ thể chức hàm cú pháp lệnh gọi hàm, gõ lệnh help kèm theo tên hàm cửa số lệnh MATLAB abs, angle: trả hàm thể Mođun Agumen số phức real, imag: trả hàm thể phần thực phần ảo số phức residuez: trả điểm cực hệ số tương ứng với điểm cực phân tích hàm phân thức hữu tỷ miền Z thành thành phần hàm phân thức đơn giản, ngược lại đầu vào danh sách điểm cực hệ số, hàm residuez trả hàm phân thức hữu tỷ miền Z poly: xây dựng đa thức từ danh sách nghiệm ztrans: trả biến đổi Z hàm số định nghĩa theo công thức biểu tượng (symbol) iztrans: hàm ngược lại hàm ztrans zplane: thể hiển phân bố điểm cực điểm không hàm phân thức hữu tỷ lên mặt phẳng Z freqz: trả đáp ứng tần số hệ thống số hữu hạn điểm rời rạc vòng tròn đơn vị biết hàm truyền đạt fft: thực biến đổi Fourier rời rạc dãy số có độ dài hữu hạn theo thuật toán biến đổi Fourier nhanh trả kết biến đổi Fourier rời rạc dãy số clock: trả thời gian thực etime: trả thời gian tính giây thời điểm Các bước thực hành 1.14 Cho dãy x(n)=0,5n u(n) a Dựa định nghĩa biến đổi Z, tìm biến đổi Z dãy b Kiểm chứng lại kết câu a hàm ztrans c Từ kết trên, tìm biến đổi Fourier x(n) d Dùng MATLAB thể đồ thị phổ X(ω) 501 điểm rời rạc khoảng [0,π] theo chương trình mẫu cách gõ dòng lệnh theo bảng vào cửa số soạn thảo (Editor) ghi lại theo tên tệp Solution_1_14 w = [0:1:500]*pi/500; X = exp(j*w) / (exp(j*w)- 0.5*ones(1,501)); magX = abs(X); angX = angle(X); realX = real(X); imagX = imag(X); % subplot(2,2,1); plot(w/pi,magX); grid; title('Magnitude Part'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,3); plot(w/pi,angX); grid; title('Angle Part'); xlabel('frequency in pi units'); ylabel('Radians'); subplot(2,2,2); plot(w/pi,realX); grid; title('Real Part'); xlabel('frequency in pi units'); ylabel('Real'); subplot(2,2,4); plot(w/pi,imagX); grid; title('Imaginary Part'); xlabel('frequency in pi units'); ylabel('Imaginary'); Gõ lệnh Solution_1_14 cửa sổ lệnh MATLAB để chạy kịch nói xem đồ thị b >> sym n; >> ztrans(0.5^n) ans = z/(z - 1/2) d 1.5 Real 1.5 0.5 Radians Real Part 0.5 frequency in pi units Angle Part 0.5 0 -0.2 -0.2 Imaginary Magnitude Magnitude Part -0.4 -0.6 -0.8 0.5 frequency in pi units 0.5 frequency in pi units Imaginary Part 0.5 frequency in pi units -0.4 -0.6 -0.8 1.15 Cho phổ: Viết chương trình thể đồ thị hàm phổ biên độ, phổ pha, phần thực phần ảo X(ejω), tính 2001 điểm rời rạc khoảng [-2π,2π] w = [-1000:1:1000]*pi/500; X = exp(-j*w/2).*sin(3*w); magX = abs(X); angX = angle(X); realX = real(X); imagX = imag(X); subplot(2,2,1); plot(w/pi,magX); grid; title('Magnitude Part'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,3); plot(w/pi,angX); grid; title('Angle Part'); xlabel('frequency in pi units'); ylabel('Radians'); subplot(2,2,2); plot(w/pi,realX); grid; title('Real Part'); xlabel('frequency in pi units'); ylabel('Real'); subplot(2,2,4); plot(w/pi,imagX); grid; title('Imaginary Part'); xlabel('frequency in pi units'); ylabel('Imaginary'); Magnitude Part Real Part Real 0.5 0.5 -0.5 -2 Radians -1 frequency in pi units Angle Part -1 -2 0.5 Imaginary Magnitude -2 -4 -2 -1 frequency in pi units -1 frequency in pi units Imaginary Part -1 frequency in pi units -0.5 -1 -2 1.16 Cho dãy x(n) có dạng sau: Đây dãy số xác định khoảng hữu hạn từ -1 đến Tính thể phổ dãy x(n) 501 điểm rời rạc khoảng [0,π] theo chươngtrình mẫu cách gõ dòng lệnh theo bảng vào cửa số soạn thảo (Editor)và ghi lại theo tên tệp Solution_1_16 n = -1:3; x = 1:5; k = 0:500; w = (pi/500)*k; X = x*(exp(-j*pi/500)).^(n'*k); magX = abs(X); angX = angle(X); realX = real(X); imagX = imag(X); % subplot(2,2,1); plot(k/500,magX); grid; title('Magnitude Part'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,3); plot(k/500,angX); grid; title('Angle Part'); xlabel('frequency in pi units'); ylabel('Radians'); subplot(2,2,2); plot(k/500,realX); grid; title('Real Part'); xlabel('frequency in pi units'); ylabel('Real'); subplot(2,2,4); plot(k/500,imagX); grid; title('Imaginary Part'); xlabel('frequency in pi units'); ylabel('Imaginary'); Gõ lệnh Solution_1_16 cửa sổ lệnh MATLAB để chạy kịch nói xem đồ thị Magnitude Part Real Part 15 10 10 Real Magnitude 15 0 0.5 frequency in pi units Angle Part -5 Imaginary Radians 0.5 frequency in pi units Imaginary Part 0.5 frequency in pi units -2 -4 0.5 frequency in pi units -5 -10 1.17 Cho dãy x(n)=rect7(n) Viết chương trình tính thể phổ dãy x(n) 501điểm rời rạc khoảng [0,π] tương tự 1.16 n = [0:6]; x =[1 1 1 1]; k = 0:500; w = (pi/500)*k; X = x*(exp(-j*pi/500)).^(n'*k); magX = abs(X); angX = angle(X); realX = real(X); imagX = imag(X); % subplot(2,2,1); plot(k/500,magX); grid; title('Magnitude Part'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,3); plot(k/500,angX); grid; title('Angle Part'); xlabel('frequency in pi units'); ylabel('Radians'); subplot(2,2,2); plot(k/500,realX); grid; title('Real Part'); xlabel('frequency in pi units'); ylabel('Real'); subplot(2,2,4); plot(k/500,imagX); grid; title('Imaginary Part'); xlabel('frequency in pi units'); ylabel('Imaginary'); Magnitude Part Real Part 10 Real Magnitude 0 0.5 frequency in pi units Angle Part -5 0.5 frequency in pi units Imaginary Part 0.5 frequency in pi units Imaginary Radians 0 -2 -4 0.5 frequency in pi units -2 -4 -6 1.18 Một hàm miền Z cho với cơng thức sau đây: Hàm số X(z) viết dạng tỷ số hai đa thức theo z-1 sau: a Sử dụng lệnh residuez MATLAB, tính điểm cực, thặng dư điểm cực theo chương trình mẫu cách gõ dòng lệnh theo bảng vào cửa số soạn thảo (Editor) ghi lại theo tên tệp Solution_1_18 b = [0 1]; a = [3 -4 1]; [R,p,C] = residuez(b,a) % [b a] = residuez(R,p,C) Gõ lệnh Solution_1_18 cửa sổ lệnh MATLAB để chạy kịch nói xem kết tính tốn Từ viết dạng tổng hàm phân thức đơn giản X(z) b Từ kết câu trên, viết công thức khai triển X(z) thành tổng phân thức đơn giản, từ tìm biến đổi Z ngược X(z) miền cho x(n) dãy nhân c Kiểm chứng lại kết câu b hàm iztrans a R= 0.5000 -0.5000 p= 1.0000 0.3333 C= [] b= -0.0000 0.3333 a= 1.0000 -1.3333 X ( z) = 0.3333 0,5 0,5 0,5 0,5 − = − −1 −1 −1 (1 − z ) (1 − 0,3333z ) (1 − z ) (1 − / z −1 ) b x(n) = 0,5 u(n)-0,5*(1/3)n u(n) c >> x=iztrans(0.5*z/(z-1))+iztrans(1.5*z/(3*z-1)) x= (1/3)^n/2 + 1/2 1.19 Cho hàm X(z) với công thức sau: X ( z) = −1 (1 − 0,9 z ) (1 − 0,9 z −1 ) a Viết chương trình tính điểm cực, thặng dư điểm cực hàm X(z) (gợi ý: dùng hàm poly MATLAB để khôi phục lại đa thức mẫu số từ mảng nghiệm đa thức - mảng điểm cực X(z)) b Từ kết câu trên, viết công thức khai triển X(z) thành tổng phân thức đơn giản, từ tìm biến đổi Z ngược X(z) miền |z|>0,9 a b = 1; a =poly([0.9 0.9 0.9]); [R,p,C] = residuez(b,a) % [b a] = residuez(R,p,C) R= 0.0000 - 0.0000i -0.0000 + 0.0000i 1.0000 p= 0.9000 0.9000 + 0.0000i 0.9000 - 0.0000i C= [] b = 1.0000 - 0.0000i -0.0000 + 0.0000i 0.0000 - 0.0000i a = 1.0000 -2.7000 2.4300 -0.7290 b X ( z) = (1 − 0,9 z −1 ) Với |z|>0,9 thì: x(n)= (9/10)^n+3/2*(9/10)^n*n+1/2*(9/10)^n*n^2 1.20 Cho hệ thống nhân biểu diễn phương trình sau: y(n)-0,9y(n-1)=x(n) a Tìm hàm truyền đạt hệ thống Sau thực cơng việc sau: b Dùng lệnh zplane MATLAB biểu diễn đồ thị mặt phẳng Z phân bố điểm cực điểm không b = [1 0]; a = [1 -0.9]; % Tim phan bo diem cuc va diem khong subplot(1,2,1); zplane(b,a); title('Z plane'); % Tim dap ung tan so bang cach danh gia 200 diem roi rac % cua H(z) tren duong tron don vi [H, w] = freqz(b,a,200,'whole'); magH = abs(H(1:101)); phaH= angle(H(1:101)); % Ve dap ung tan so subplot(2,2,2); plot(w(1:101)/pi,magH); grid; title('Magnitude Response'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,4); plot(w(1:101)/pi,phaH/pi); grid; title('Phase Response'); xlabel('frequency in pi units'); ylabel('Phase in pi units'); c Dùng lệnh freqz tính biểu diễn đồ thị hàm đáp ứng tần số H(e jω) hệ thống (bao gồm đáp ứng biên độ - tần số đáp ứng pha - tần số) 200 điểm rời rạc đường tròn đơn vị theo chương trình mẫu cách gõ dòng lệnh theo bảng vào cửa số soạn thảo (Editor) ghi lại theo tên tệp Solution_1_20 Gõ lệnh Solution_1_20 cửa sổ lệnh MATLAB để chạy kịch nói xem đồ thị a [ Y ( z ) − 0,9 z −1 ] = X ( z) ⇒ H ( z) = Y ( z) = X ( z ) − 0,9 z −1 b,c: Z plane Magnitude Response 15 Magnitude 1.5 0.5 0 Phase in pi units Imaginary Part 10 -0.5 -1 -1.5 -2 -1 -0.5 0.5 Real Part 0.5 frequency in pi units Phase Response 0.5 frequency in pi units -0.1 -0.2 -0.3 -0.4 1.21 Cho hệ thống nhân biểu diễn phương trình sau: y(n)-0,81y(n-2)=x(n)-x(n-2) a.Viết cơng thức hàm truyền đạt H(z) hệ thống Viết chương trình MATLAB thực cơng việc sau: b Tính vị trí điểm cực, hệ số khai triển H(z) thành tổng phân thức đơn giản c Biểu diễn phân bố điểm cực điểm không mặt phẳng Z d Tính biểu diễn đồ thị hàm đáp ứng tần số H(e jω) hệ thống (bao gồm đáp ứng biên độ - tần số đáp ứng pha - tần số) 200 điểm rời rạc đường tròn đơn vị Từ kết thu câu b tìm hàm đáp ứng xung h(n) hệ thống a Biến đổi Z vế thu [ ] Y ( z ) − 0,81z −2 = [ ] Y ( z) − z −2 X ( z ) − z −2 ⇒ H ( z ) = X ( z ) = − 0,81z −2 b Các điểm cực là: z1 = 0,9 z2 = -0,9 Phân tích H(z) dạng phân thức tối giản là: H ( z) = 1/ 1/ 5/9 5/9 + − + − 0,9 z −1 + 0,9 z −1 ( z − 0,9) ( z + 0,9) [ ] [ ] c,d: b = [1 -1]; a = [1 0.81]; % Tim phan bo diem cuc va diem khong subplot(1,2,1); zplane(b,a); title('Z plane'); % Tim dap ung tan so bang cach danh gia 200 diem roi rac % cua H(z) tren duong tron don vi [H, w] = freqz(b,a,200,'whole'); magH = abs(H(1:101)); phaH= angle(H(1:101)); % Ve dap ung tan so subplot(2,2,2); plot(w(1:101)/pi,magH); grid; title('Magnitude Response'); xlabel('frequency in pi units'); ylabel('Magnitude'); subplot(2,2,4); plot(w(1:101)/pi,phaH/pi); grid; title('Phase Response'); xlabel('frequency in pi units'); ylabel('Phase in pi units'); Z plane Magnitude Response 15 Magnitude 1.5 0.5 0 0.5 frequency in pi units Phase Response 0.5 frequency in pi units 0.5 -0.5 Phase in pi units Imaginary Part 10 -1 -1.5 -2 -1 -0.5 0.5 Real Part -0.5 1.22 Tạo hàm thực việc biến đổi Fourier rời rạc thuận Fourier rời rạc ngược theo chương trình mẫu cách gõ dòng lệnh cho bảng vào cửa số soạn thảo (Editor) ghi lại theo tên tệp dft.m idft.m: Tìm biến đổi Fourier rời rạc thuận: function [Xk] = dft(xn,N) % Tim bien doi Fourier roi rac thuan % % [Xk] = dft(xn,N) % Xk = day cac he so DFT tren doan 0