Tải bản đầy đủ (.pdf) (54 trang)

Bài giảng Xử lý tín hiệu nâng cao (Advanced signal processing) - Chương 2: Tín hiệu rời rạc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (465.83 KB, 54 trang )

Xử lý tín hiệu nâng cao
-Advanced signal processingChươ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


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:

1, n = 0
δ ( n) = 
=
0, n ≠ 0

{

,0,0, 1,0,0,


}

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ị

x (n) =



∑ x (n)δ (n − k )
k =−∞



Dãy xung đơn vị (tiếp)
1, n = 0
δ ( n) = 
=
0, n ≠ 0

{

}

,0,0, 1,0,0,


Để 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.

Bien do

% 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]);

Day xung don vi


1

0.8

0.6

0.4

0.2

0
-10

-5

0

5
Thoi gian roi rac n

10

15

20


Dãy xung đơn vị (tiếp)
Trong Matlab ta có thể biểu diễn như sau:
1, n = n0

, n1 ≤ n ≤ n2 , n1 ≤ n0 ≤ n2
0, n ≠ n0

δ ( n − n0 ) = 

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];

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ả:

1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
-5


-4

-3

-2

-1

0

1

2

3

4

5


Các tín hiệu cơ sở (tiếp)
Dãy nhảy bậc đơn vị:

1 khi n ≥ 0
u (n) = 
0 khi n < 0
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
thành một tổng các dãy xung nhảy bậc đơn vị


x (n) =

+∞

∑ x ( k ) ( u ( n ) − u ( n − 1) )

k =−∞


Dãy nhảy bậc đơn vị (tiếp)
1 khi n ≥ 0
u (n) = 
0 khi n < 0
Để 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.
Day nhay don vi
1.5

1
Bien do

% Tao day nhay don vi
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]);


0.5

0
-10

-5

0

5
Thoi gian roi rac n

10

15

20


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];

Ví dụ: tạo dãy nhảy bậc đơn vị trong khoảng [-5:5]
1


[x,n]=stepseq(0,-5,5);

0.9
0.8

stem(n,x);

Kết quả:

0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
-5

-4

-3

-2

-1

0

1


2

3

4

5


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: x ( n ) = 2 cos  π n − π  − sin  π n + π  trên [0:50]
 10

2

 20

2

n=[0:50];
x=[2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2)];
3

stem(n,x);


2

1

Kết quả:

0

-1

-2

-3

0

5

10

15

20

25

30

35


40

45

50


Dãy tín hiệu hình sin (tiếp)
Ví dụ 2: Tín hiệu

 πn π 
 πn π 
x[n ] = 2 cos −  − sin 
+  (trong ví dụ
 10 2 
 20 2 

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];
3

x=[2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2)];
2

w=randn(1,51);
y=[x+0.2*w];


1

0

-1

stem(n,y);

-2

-3

0

5

10

15

20

25

30

35

40


45

50


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:
x ( n ) = ae j (ω n +ϕ ) = a ( cos (ω n + ϕ ) + j sin (ω n + ϕ ) )
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.
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

x ( n ) = e0.1π jn

trên đoạn [-10:20]

n=[-10:20];
x=exp(0.1j*n*pi);

subplot(221);stem(n,real(x));title('Phan thuc');
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)
Phan thuc

Phan ao

1

1

0.5

0.5

0

0

-0.5

-0.5

-1
-10


0

10

20

-1
-10

Bien do

0

10

20

Pha cua x

1

4
2

0.5

0
-2

0

-10

0

10

20

-4
-10

Hàm e-mũ phức là một hàm tuần hoàn

0

10

20


Bài tập
Tạo và vẽ dãy hàm mũ thực
a n khi n ≥ 0
e (n) = 
 0 khi n < 0

trong khoảng [n1, n2]
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
x ( n ) = {...5, 4,3, 2,1,5 ↑, 4,3, 2,1,5, 4,3, 2,1,...} , − 10 ≤ n ≤ 9


n = [-10:9]; x = [5 4 3 2 1];

Day so theo de bai
5
4.5

P = 4;

4
3.5

xtilde = xtilde(:)'

3
xtilde(n)

xtilde = x'*ones(1,P)

2.5
2
1.5

stem(n,xtilde);title('Day tin hieu');
xlabel('n'); ylabel('xtilde(n)');


1
0.5
0
-10

-8

-6

-4

-2

0
n

2

4

6

8

10


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;


×