Bài giảng Xử lý tín hiệu nâng cao - Chương 2 Tín hiệu rời rạc
Khái niệm về tín hiệu rời rạc
Trong DSP, tín hiệu thời gian rời rạc, được
biểu thị bằng một dãy rời rạc:
x(n)={-3 , 2, 4, -4, 0, 1 }
Quá trình rời rạc hóa còn gọi là quá trình lấy
mẫu tín hiệu
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Xử lý tín hiệu nâng cao - Chương 2 Tín hiệu rời rạc", để 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: Bài giảng Xử lý tín hiệu nâng cao - Chương 2 Tín hiệu rời rạc
Xử lý tín hiệu nâng cao Chương 2 Tín hiệu rời rạc -Advanced signal processing- Khái niệm về tín hiệu rời rạc Trong DSP, tín hiệu thời gian rời rạc, được biểu thị bằng một dãy rời rạc: x(n)={-3 , 2, 4, -4, 0, 1} Quá trình rời rạc hóa còn gọi là quá trình lấy mẫu tín hiệu Tín hiệu rời rạc MATLAB chỉ có khả năng biểu diễn một dãy số với độ dài hữu hạn Khi đó dãy số được khai báo và lưu trữ dưới dạng vector, ví dụ: >> x = [3, 2, -1, 7, -5] dãy số không thể hiện được chỉ số của các thành phần trong dãy. Để biểu diễn một dãy rời rạc có độ dài hữu hạn, ta cần khởi tạo và lưu trữ chúng dưới dạng 2 vector. Ví dụ: >> n = [-2:2] >> x = [3, 2, -1, 7, -5] plot và stem vẽ đồ thị của một dãy số plot: để thể hiện dạng liên tục stem: để thể hiện dạng rời rạc • thường sử dụng hàm stem để vẽ tín hiệu ở miền n. Các tín hiệu cơ sở Dãy xung đơn vị: hay còn gọi là hàm Delta, có giá trị bằng đơn vị khi đối số = 0 và có giá trị bằng 0 trong các trường hợp còn lại: { } ,0,0,1,0,0, 0,0 0,1)( ↑ = ≠ = = n n nδ Một tín hiệu thời gian rời rạc bất kỳ có thể được khai triển từ các dãy xung đơn vị ( ) ( ) ( ) k x n x n n kδ ∞ =−∞ = −∑ Dãy xung đơn vị (tiếp) Để vẽ tín hiệu này, có thể sử dụng hàm số zeros(1,N) để tạo ra một vecto hàng N giá trị 0. % Day xung don vi { } ,0,0,1,0,0, 0,0 0,1)( ↑ = ≠ = = n n nδ Day xung don vi n=-10:20; delta=[zeros(1,10) 1 zeros(1,20)]; stem(n,delta); xlabel('Thoi gian roi rac n'); ylabel('Bien do'); title('Day xung don vi'); axis([-10 20 0 1.2]); -10 -5 0 5 10 15 200 0.2 0.4 0.6 0.8 1 Thoi gian roi rac n B i e n d o Dãy xung đơn vị (tiếp) Trong Matlab ta có thể biểu diễn như sau: function[x,n]=impseq(n0,n1,n2) %Tao ra day x(n) = delta(n-n0); n1 <= n <= n2 n=[n1:n2]; x=[(n-n0)==0]; 20121 0 0 0 ,, ,0 ,1)( nnnnnn nn nn nn ≤≤≤≤ ≠ = =−δ -5 -4 -3 -2 -1 0 1 2 3 4 5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Ví dụ: Tạo dãy xung đơn vị trong khoảng [-5:5] n=-5:5; x=impseq(0,-5,5); stem(n,x); Kết quả: Các tín hiệu cơ sở (tiếp) Dãy nhảy bậc đơn vị: Một dãy tín hiệu rời rạc theo thời gian bất kỳ x[n] để có thể khai triển ( ) 1 khi n 0 0 khi n 0 u n ≥ = < thành một tổng các dãy xung nhảy bậc đơn vị ( ) ( ) ( ) ( )( )1 k x n x k u n u n +∞ =−∞ = − −∑ Dãy nhảy bậc đơn vị (tiếp) Để vẽ dãy này, ta có thể sử dụng hàm ones(1,N) để tạo ra một vecto hàng gồm N số một. % Tao day nhay don vi ( ) 1 khi n 0 0 khi n 0 u n ≥ = < n=[-10:20]; u=[zeros(1,10) ones(1,21)]; stem(n,u); xlabel('Thoi gian roi rac n'); ylabel('Bien do'); title('Day nhay don vi'); axis([-10 20 0 1.5]); -10 -5 0 5 10 15 20 0 0.5 1 1.5 Thoi gian roi rac n B i e n d o Day nhay don vi Dãy nhảy bậc đơn vị (tiếp) Trong Matlab để tạo ra dãy xung nhảy bậc đơn vị ta xây dựng hàm stepseq: function [x,n]=stepseq(n0,n1,n2) %Tao ra day x(n) = u(n-n0); n1 <= n <= n2 n=[n1:n2]; x=[(n-n0)>=0]; -5 -4 -3 -2 -1 0 1 2 3 4 5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Ví dụ: tạo dãy nhảy bậc đơn vị trong khoảng [-5:5] [x,n]=stepseq(0,-5,5); stem(n,x); Kết quả: Thực hành Vẽ đồ thị tín hiệu: x[n]=2*δ[n-5]-4*δ[n+7] trên đoạn [-10:10] Vẽ đồ thị tín hiệu: x[n]=e-0.3(n-10)(u(n-5)-u(n-15)) trên đoạn [0:20] Thực hành Vẽ đồ thị tín hiệu: x[n]=2*δ[n-5]-4*δ[n+7] trên đoạn [-10:10] n=[-10:10]; x=[2*impseq(5,-10,10)-4*impseq(-7,-10,10)]; stem(n,x); title('Day so theo dau bai x[n]=2*δ[n-5]-4*δ[n+7]'); xlabel('n'); ylabel('x(n)'); Thực hành Vẽ đồ thị tín hiệu: x[n]=e-0.3(n-10)(u(n-5)-u(n-15)) trên đoạn [0:20] n=[0:20]; x=[exp(-0.3*(n-10)).*(stepseq(5,0,20)- stepseq(15,0,20))]; stem(n,x); Các tín hiệu cơ sở (tiếp) Dãy tín hiệu hình sin: Dãy tín hiệu hình sin được biểu thị bằng hàm số sin (hoặc cos). Ví dụ tạo dãy tín hiệu: trên [0:50] n=[0:50]; ( ) 2cos sin 10 2 20 2 n n x n pi pi pi pi = − − + 0 5 10 15 20 25 30 35 40 45 50 -3 -2 -1 0 1 2 3x=[2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2)]; stem(n,x); Kết quả: Dãy tín hiệu hình sin (tiếp) Ví dụ 2: Tín hiệu (trong ví dụ trên) bị ảnh hưởng bởi nhiễu Gauss: y[n]=x[n]+0.2*w[n] w(n) là hàm có giá trị ngẫu nhiên theo phân bố Gauss, trung bình bằng 0, phương sai bằng 1 n=[0:50]; [ ] +− −= 220 sin 210 cos2 pipipipi nnnx 0 5 10 15 20 25 30 35 40 45 50 -3 -2 -1 0 1 2 3 x=[2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2)]; w=randn(1,51); y=[x+0.2*w]; stem(n,y); Các tín hiệu cơ sở (tiếp) Dãy e-mũ phức: được định nghĩa bởi hệ thức: Trong Matlab ta sử dụng hàm exp để tạo ra các dãy e-mũ phức. real(z) và imag(z) :phần thực và phần ảo của số phức z = x + iy. ∠ ( ) ( ) ( )( )( ) cos sinj nx n ae a n j nω ϕ ω ϕ ω ϕ+= = + + + abs(z) và angle(z) : độ lớn và góc pha của số phức z = x + iy = r θ polar(theta,r) vẽ đồ thị trong tọa độ cực • r là độ lớn • theta là góc pha tính theo radian. Các tín hiệu cơ sở (tiếp) Dãy e-mũ phức: Ví dụ với dãy trên đoạn [-10:20] n=[-10:20]; x=exp(0.1j*n*pi); subplot(221);stem(n,real(x));title('Phan thuc'); ( ) 0.1 jnx n e pi= subplot(222);stem(n,imag(x));title('Phan ao'); subplot(223);stem(n,abs(x));title('Bien do'); subplot(224);stem(n,angle(x));title('Pha cua x'); Dãy e-mũ phức (tiếp) -10 0 10 20 -1 -0.5 0 0.5 1 Phan thuc -10 0 10 20 -1 -0.5 0 0.5 1 Phan ao Hàm e-mũ phức là một hàm tuần hoàn -10 0 10 20 0 0.5 1 Bien do -10 0 10 20 -4 -2 0 2 4 Pha cua x Bài tập Tạo và vẽ dãy hàm mũ thực trong khoảng [n1, n2] ( ) na khi n 0 0 khi n 0 e n ≥ = < Tạo và vẽ dãy xung chữ nhật có chiều dài L. Bài tập Thể hiện trên đồ thị 4 chu kỳ của dãy tuần hoàn với chu kỳ N=5 ( ) { }...5, 4,3, 2,1,5 , 4,3, 2,1,5, 4,3, 2,1,... , 10 9x n n= ↑ − ≤ ≤∼ n = [-10:9]; x = [5 4 3 2 1]; Day so theo de bai P = 4; xtilde = x'*ones(1,P) xtilde = xtilde(:)' stem(n,xtilde);title('Day tin hieu'); xlabel('n'); ylabel('xtilde(n)'); -10 -8 -6 -4 -2 0 2 4 6 8 100 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 n x t i l d e ( n ) Các phép toán trên tín hiệu Phép dịch chuyển Biến số n đảo Phép cộng 2 tín hiệu Phép nhân 2 tín hiệu Phép nhân chập 2 tín hiệu Các phép toán trên tín hiệu Phép dịch chuyển: y(n) = x(n-m) Trong Matlab, phép toán dịch có thể được thực hiện nhờ vào hàm trễ sau: function [y,n] = sigshift(x,m,n0) % implements y(n) = x(n-n0) % ------------------------- %[y,n] = sigshift(x,m,n0) n = m+n0; y = x; Các phép toán trên tín hiệu Biến số n đảo: y(n)=x(-n) Trong Matlab, phép toán này có thể được thực hiện nhờ vào hàm sau: function [y,n] = sigfold(x,n) % implements y(n) = x(-n) % ----------------------- % [y,n] = sigfold(x,n) y = fliplr(x); n = -fliplr(n); fliplr: lộn ngược lại thứ tự các phần tử trong mộ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. Các phép toán trên tín hiệu Phép cộng 2 tín hiệu y(n) = x1(n)+ x2(n) function [y,n] = sigadd(x1,n1,x2,n2) %Thuc hien y(n) = x1(n)+x2(n) %---------------------------------------------- %[y,n] = sigadd(x1,n1,x2,n2) % y = day tong co vector chi so n % x1 = day thu nhat co vector chi so n1 % x2 = day thu hai co vector chi so n2 % n2 co the khac n1 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; Các phép toán trên tín hiệu Phép nhân 2 tín hiệu: y(n) = x1(n).x2(n) function [y,n] = sigmult(x1,n1,x2,n2) %Thuc hien y(n) = x1(n)*x2(n) %---------------------------------------------- % y = day tich co vector chi so n %x1 = day thu nhat co vector chi so n1 %x2 = day thu hai co vector chi so n2 % n2 co the khac n1 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; Các phép toán trên tín hiệu Phép nhân chập 2 tín hiệu y(n)=x1(n)*x2(n) Matlab cung cấp hàm conv để tính phép nhân chập cho hai dãy có chiều dài hữu hạn. Hàm conv thực hiện phép nhân chập cho hai dãy có chiều dài hữu hạn từ n =0 và cho kết quả: y =conv(x,h) hàm conv không cho biết thông tin về thời gian. Để có thêm thông tin về thời gian và thực hiện phép nhân chập cho các dãy hữu hạn nhưng có gốc thời gian khác nhau định nghĩa hàm Matlab conv_m Các phép toán trên tín hiệu Phép nhân chập 2 tín hiệu y(n)=x(n)*h(n) function [y,ny] = conv_m(x,nx,h,nh) %Ham tinh tich chap da duoc sua doi danh cho %xu ly so tin hieu %------------------------------------------------- %[y,ny] = conv_m(x,nx,h,nh) %[y,ny] = day ket qua %[x,nx] = day thu nhat %[h,nh] = day thu hai % nyb = nx(1)+nh(1); nye = nx(length(x))+nh(length(h)); ny = [nyb:nye]; y = conv(x,h); Năng lượng Dãy được tính năng lượng có thể là dãy thực hoặc dãy phức ( ) ( ) ( ) 2*x n n E x n x n x n +∞ +∞ =−∞ =−∞ = =∑ ∑ function[Ex]=energy(x); Ex=sum(x.*conj(x)); % sum(abs(x).^2) Công suất Công suất trung bình của một dãy tuần hoàn ( )1 2 0 1 N x n P x n N − = = ∑ function[Px]=power(x); Px=sum(abs(x).^2)/N Bài tập Cho x(n)=2-n với 0≤n≤5 Vẽ dãy x(n)u(n) theo n Vẽ dãy x(n)u(2-n) theo n Vẽ dãy x(-n)u(-n) theo n Bài tập Cho x=[1, 2, 3↑, 4, 5, 6, 5, 4, 3, 2, 1, 2, 3]. Hãy tạo và vẽ các dãy sau: y1(n)=2x(n-5) + 3x(n+4) y (n)=2x(3-n) – x(n).x(n+2)2 Với -2 ≤ n≤10 Bài tập Cho các dãy có chiều dài 7 mẫu sau: 1 3 2 0 1 4 3 2x = − − ↑ 2 0 7 1 1 3 4 2x = ↑ − − 5 2 3 6 4 0 2x = − − ↑ Tìm và vẽ các dãy sau đây: •y(n)=x1(n)+x2(n) •y(n)=x1(n).x2(n) •y(n)=x1(n)-x3(n) 3 Bài tập Cho hai dãy 3 11 7 0 1 4 2x = ↑ − 2 3 0 5 2 1h = ↑ − Tính tích chập của x(n) với h(n). Hệ thống rời rạc Hệ thống rời rạc Tín hiệu vào được gọi là đầu vào (input) hay kích thích (excitation) của hệ thống. Tín hiệu ra được gọi là đầu ra (output) hay đáp ứng (response) của hệ thống. Trong MATLAB, hệ thống được định chung bởi khái niệm filter Hệ thống tuyến tính bất biến Một hệ thống là tuyến tính bất biến (Linear Time- Invariant – LTI) nếu nó tuyến tính (linearity) và bất biến theo thời gian (time-invariance). Tuyến tính: đáp ứng của hệ thống với kích thích là một tổ hợp tuyến tính các tín hiệu rời rạc sẽ bằng với tổ hợp tuyến tính của các đáp ứng, với mỗi đáp ứng này là đầu ra khi cho từng thành phần của đầu vào qua hệ thống. Bất biến theo thời gian: đáp ứng của hệ thống có dạng giống hệt nhau với cùng một kích thích mà không phụ thuộc vào thời điểm đưa kích thích tới đầu vào. Hệ thống tuyến tính bất biến Một hệ thống tuyến tính bất biến luôn có đáp ứng ra y(n) là tích chập (convolution sum) giữa đầu vào x(n) với dãy đáp ứng xung h(n) của hệ thống, là đáp ứng của hệ thống khi đưa kích thích δ(n) tới đầu vào ( ) ( ) ( ) ( ) ( ) ( )* *y n T x n x n h n h n x n= = = ( ) ( ) ( ) ( ) k k x n h n k h n x n k +∞ +∞ =−∞ =−∞ = − = −∑ ∑ Hệ thống nhân quả Một hệ thống là nhân quả nếu đáp ứng ra tại thời điểm hiện tại không phụ thuộc vào kích thích vào tại các thời điểm tương lai. Một hệ thống tuyến tính bất biến là nhân quả nếu đáp ứng xung thoả mãn: ( ) 0 0h n khi n= < Hệ thống ổn định Một hệ thống là ổn định (Bounded In Bounded Out Stable – BIBO Stable) nếu với một kích thích bị chặn luôn sinh ra một đáp ứng cũng bị chặn, tức là giá trị của đáp ứng ra không tiến đến vô cùng. Một hệ thống tuyến tính bất biến là ổn định nếu đáp ứng xung thoả mãn: ( ) n h n +∞ =−∞ < ∞∑ Phương trình sai phân Tất cả các hệ thống tuyến tính bất biến có thể thực hiện được, thông qua phần cứng hoặc mô tả phần mềm, đều được mô tả bởi phương trình sai phân tuyến tính hệ số hằng có dạng: ∑∑ == −=− M r r N k k rnxbknya 00 )()( hay có thể viết dưới dạng sau thích hợp với thể hiện mô hình sơ đồ khối của hệ thống: ( ) 0 1 ( ) ( ) M N r k r k y n b x n r a y n k = = = − − −∑ ∑ Phương trình sai phân Trong MATLAB có hàm filter cho phép tìm dãy đáp ứng đầu ra y(n) nếu biết trước các biến đầu vào là các hệ số của phương trình sai phân, dãy ak, br và kích thích đầu vào x(n). y=filter(b,a,x) Ví dụ: y(n)-y(n-1)+0.9y(n-2)=x(n) cần tính h(n) a=[1,-1,0.9]; b=[1]; [x,n]=impseq(0,-10, 100); h=filter(b,a,x); stem(n,h); -20 0 20 40 60 80 100 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Bài tập Viết chương trình tạo dãy hàm mũ thực với các tham số đầu vào và đầu ra được nhập theo câu lệnh: [x,n] = expseq(a,n1,n2) Chú ý: tham số a có thể thực hoặc phức Viết chương trình 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. Các tham số đầu vào và đầu ra được nhập theo câu lệnh: [x,n] = randnseq(n1,n2) Bài tập Viết chương trình thể hiện trên đồ thị các dãy sau đây: với w(n) là hàm có giá trị ( ) ( ) ( ) ( ) ( ) 10110 10 10 20 , 0 20 3 n x n n u n u n u n u n n − = − − + − − − ≤ ≤ ( ) ( ) ( )cos 0.04 0.2 , 0 20x n n w n npi= + ≤ ≤ ngẫu nhiên theo phân bố Gauss, trung bình bằng 0, phương sai bằng 1 Sau đó tính năng lượng của từng dãy. Bài tập Cho dãy x(n)={1,2,3,4,5,6,7↑,6,5,4,3,2,1} -2≤n ≤ 2. Viết chương trình thể trên đồ thị các dãy sau đây: x1(n)=2x(n-5)-3x(n+4) x (n)=x(3-n)-x(n)x(n-2)2 Bài tập 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 2 dãy sau: ( ) ( ) ( ) 6 1 0 3 x n rect n n n h n = − ≤ ≤ = Với -4≤n ≤ 10 4 0 3, 0n n > < Bài tập Đáp ứng xung của hệ thống rời rạc theo thời gian có chiều dài hữu hạn Cho một hệ thống rời rạc có chiều dài hữu hạn có dạng tổng quát như sau: 1 1 0 0 ( ) ( ) N M k r k r a y n k b x n r − − = = − = −∑ ∑ a) Hãy sử dụng hàm impz để tính toán và vẽ đáp ứng xung của hệ thống. b) Kiểm tra lại với các hệ thống sau: ( ) 3 ( 1) 4 ( 2) ( ) 2 ( 1)xy n y n y n x n n− − − − = + − ( ) 0,4 ( 1) 0,03 ( 2) ( )y n y n y n x n− − + − = Bài tập Đáp ứng ra của hệ thống mô tả bởi phương trình sai phân tuyến tính hệ số hằng 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)-0.5y(n -1)+ 0.06y(n - 2) = x(n) Viết chương trình sử dụng hàm filter của MATLAB thực hiện các công việc sau: • Biểu diễn bằng đồ thị hàm đáp ứng xung đơn vị của hệ thống với -20 ≤ n ≤ 100 • Biểu diễn bằng đồ thị dãy đáp ứng của hệ thống với -20 ≤ n ≤ 100 khi dãy đầu vào là dãy nhảy đơn vị. Bài tập 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: Viết chương trình sử dụng hàm filter của MATLAB thực ( ) ( ) ( ) ( )1 0.9 2y n y n y n x n− − + − = hiện các công việc sau: • a. Biểu diễn bằng đồ thị hàm đáp ứng xung đơn vị của hệ thống với -20 ≤ n ≤ 100 • b. Biểu diễn bằng đồ thị dãy đáp ứng của hệ thống với - 20 ≤ n ≤ 100 khi dãy đầu vào là dãy nhảy đơn vị. Bài tập Cho hai hệ thống có phương trình sai phân tuyến tính hệ số hằng như sau: Hệ thống 1: y(n)=0,5x(n)+0,25x(n-1)+0,82x(n-2) Hệ thống 2: y(n)=0,45x(n)+0,5x(n-1)+0,4x(n-2)+0,52y(n-1)-0,45y(n-2) Viết chương trình Matlab để tính đầu ra của hai hệ thống trên với đầu vào: 2 *10 2 *100( ) 256 256 os os n n x n c c pi pi = + Mở rộng Xem xét việc giải phương trình vi phân tuyến tính hệ số hằng với các điều kiện đầu cho trước. Gợi ý: dựa trên hàm filter và filtic nằm trong bộ công cụ Signal Processing Toolbox Tín hiệu hai chiều (ảnh số) Biểu diễn ảnh Một ảnh được biểu diễn dưới dạng một hàm f(x,y) Đối với ảnh số đơn sắc, giá trị f tại (x,y) được gọi là mức xám Kết quả của quá trình lấy mẫu và lượng tử hóa là một ma trận số liệu. Một ảnh có kích thước M x N là một ma trận có M hàng và N cột, mỗi một giá trị trên ma trận gọi là một điểm ảnh (pixel). Biểu diễn ảnh Một ma trận tọa độ ảnh trong Matlab được biểu diễn Đọc ảnh, hiển thị ảnh Hàm Ý nghĩa imread(‘filename’) đọc một ảnh imshow(image) hiện ảnh imwrite(image,’filename’) Lưu một ảnh từ ma trận ra một file Cải thiện ảnh Biểu đồ histogram của ảnh I figure, imhist(I) Cân bằng Histogram I2 = histeq(I); Hiệu chỉnh Histogram I = imread(‘D:baby.jpg'); J = imadjust(I,[0.3 0.7],[]); imshow(I), figure, imshow(J); Tạo ảnh nhị phân level = graythresh(I); (graythresh: xác định ngưỡng mức xám của ảnh sử dụng phương pháp Otsu) bw = im2bw(I,level); figure, imshow(bw)
File đính kèm:
- bai_giang_xu_ly_tin_hieu_nang_cao_chuong_2_tin_hieu_roi_rac.pdf