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

Tài liệu hướng dẫn ôn tập kỹ sư máy tính

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 (364.37 KB, 20 trang )

Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Bài 1: Dãy xung đơn vị và dãy nhảy bậc đơn vị
Dãy xung đơn vị:




=
=
0 ,0
0 ,1
][
n
n
n
δ

Dãy nhảy bậc đơn vị:



<

=
0 ,0
0 ,1
][
n
n


nu

Dãy xung đơn vị
][n
δ
chiều dài N có thể được tạo thành bằng lệnh Matlab sau:
u = [1 zeros (1, N-1)];
Nếu
][n
δ
bị trễ M mẫu với M < N thì ta sử dụng lệnh:
ud = [zeros (1, M) 1 zeros (1, N -M -1)];
để tạo chuỗi
][ Mn −
δ

Tương tự dãy nhảy bậc đơn vị u[n] chiều dài N được tạo bằng lệnh:
S = [ones (1, N)];
Hãy chạy chương trình P1-1 sau để tạo và vẽ chuỗi xung đơn vị.

% Program P1_1
% Generation of a Unit Sample Sequence
clf;
% Generate a vector from -10 to 20
n = -10:20;
% Generate the unit sample sequence
u = [zeros(1,10) 1 zeros(1,20)];
% Plot the unit sample sequence
stem(n,u);
xlabel('Time index n');ylabel('Amplitude');

title('Unit Sample Sequence');
axis([-10 20 0 1.2]);

Câu hỏi:
1. Nêu công dụng của các lệnh clf, axis, title, xlabel, ylabel
2. Sử dụng chương trình P1-1 để viết chương trình tạo chuỗi xung đơn vị trễ
11 mẫu {
]11[ −n
δ
}. Chạy chương trình đó.
3. Tương tự viết chương trình tạo dãy nhảy bậc đơn vị u[n]
4. Viết chương trình tạo dãy nhảy bậc đơn vị sớm 7 mẫu u[n+7]

Bài 2: Biểu diễn tín hiệu hàm mũ
Dạng tín hiệu: x[n] = Aα
n

Trong đó A và α là các số thực hoặc phức.
Nếu A, α là các giá trị phức thì:
φ
ωσ
α
j
j
ee AA ,
)(
00
==
+


Khi đó ta có:

)sin()cos(][
00
)(
0000
φωφω
σσφωσ
+++==
++
neAjneAeAnx
nnnjn

Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Chạy chương trình P1-2 và P1-3 dưới đây để tạo chuỗi hàm mũ phức và chuỗi
hàm mũ thực.

% Program P1_2
% Generation of a complex exponential sequence
clf;
c = -(1/12)+(pi/6)*i;
K = 2;
n = 0:40;
x = K*exp(c*n);
subplot(2,1,1);
stem(n,real(x));
xlabel('Time index n');ylabel('Amplitude');
title('Real part');

%axis([0 40 -5 5]);
subplot(2,1,2);
stem(n,imag(x));
xlabel('Time index n');ylabel('Amplitude');
title('Imaginary part');

% Program P1_3
% Generation of a real exponential sequence
clf;
n = 0:35; a = 1.2; K = 0.2;
x = K*a.^n;
stem(n,x);
xlabel('Time index n');ylabel('Amplitude');

Câu hỏi:
1. Trong chương trình P1_2 tham số nào điều khiển độ tăng hay giảm của
chuỗi, tham số nào điều khiển biên độ của chuỗi?
2. Nếu c = (1/12) + (pi/6)*i thì đồ thị của chuỗi có gì thay đổi?
3. Nêu công dụng của các toán tử real và imag.
4. Nêu công dụng của lệnh subplot
5. Trong chương trình P1-3 tham số nào điều khiển độ tăng hay giảm của
chuỗi? Tham số nào điều khiển biên độ của chuỗi?
6. Nêu sự khác nhau giữa các toán tử số học ^ và .^
7. Chạy lại chương trình P1-3 với tham số a < 1 và K = 20. Rút ra kết luận gì?
8. Có thể dùng lệnh Matlab sum(s.*s) để tính năng lượng của chuỗi số thực
s[n]. Hãy dùng lệnh này để tính năng lượng của dãy x[n] trong chương trình
P1_3 với a = 0.9 và K = 20





Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Bài 3: Tín hiệu rời rạc dạng sin thực
Tín hiệu sin có dạng:
)cos(][
0
φω
+= nAnx

Trong đó A,
φω
,
0
là các số thực.
A: biên độ

0
ω
: tần số góc

φ
: góc pha ban đầu.
Chạy chương trình P1-4 dưới đây để tạo dãy tín hiệu sin

% Program P1_4
% Generation of a sinusoidal sequence
n = 0:40;
f = 0.1;

phase = 0;
A = 1.5;
arg = 2*pi*f*n - phase;
x = A*cos(arg);
clf; % Clear old graph
stem(n,x); % Plot the generated sequence
axis([0 40 -2 2]);
grid;
title('Sinusoidal Sequence');
xlabel('Time index n');
ylabel('Amplitude');
axis;

Câu hỏi:
1. Trong chương trình tham số nào ứng với tần số, pha và biên độ của tín hiệu.
Tính chu kỳ của tín hiệu.
2. Chiều dài của chuỗi bằng bao nhiêu và thay đổi nó bằng cách nào?
3. Nêu công dụng của lệnh axis và grid
4. Tính công suất trung bình của tín hiệu
5. Chạy lại chương trình P1-4 với f = 0.9. So sánh với tín hiệu ban đầu.
6. Chạy lại chương trình P1-4 với chiều dài của chuỗi bằng 50, tần số 0.08,
biên độ 2.5, dịch pha 90
0
. Tính chu kỳ của tín hiệu.
7. Thay thế lệnh stem trong chương trình P1-4 bằng lệnh plot. Chạy lại
chương trình.
8. Tương tự, thay thế lệnh stem bằng lệnh stairs. Chạy lại chương trình và nêu
sự khác nhau giữa 3 lệnh stem, plot, stairs.




Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Bài 4:Loại nhiễu ra khỏi tín hiệu
Xử lý tín hiệu số còn được ứng dụng để loại bỏ các thành phần nhiễu không
mong muốn ra khỏi tín hiệu.
Gọi s[n] là tín hiệu ban đầu (không bị ảnh hưởng bởi nhiễu)
Nếu tín hiệu này bị tác động bởi nhiễu ngẫu nhiên d[n] thì: x[n] = s[n] + d[n] là
tín hiệu bị nhiễu.
Tiến hành dịch chuyển x[n] đi một số mẫu xung quanh mẫu tại thời điểm n và
lấy trung bình cộng các mẫu này ta sẽ thu được tín hiệu y[n] gần giống với tín
hiệu s[n] ban đầu.
Chương trình P1-5 sau sẽ minh hoạ cho thuật toán:

])1[][]1[(
3
1
][ +++−= nxnxnxny


% Program P1_5
% Signal Smoothing by Averaging
clf;
R = 51;
d = 0.8*(rand(R,1) - 0.5); % Generate random noise
m = 0:R-1;
s = 2*m.*(0.9.^m); % Generate uncorrupted signal
x = s + d'; % Generate noise corrupted signal
subplot(2,1,1);

plot(m,d','r-',m,s,'g--',m,x,'b-.');
xlabel('Time index n');ylabel('Amplitude');
legend('d[n] ','s[n] ','x[n] ');
x1 = [0 0 x];x2 = [0 x 0];x3 = [x 0 0];
y = (x1 + x2 + x3)/3;
subplot(2,1,2);
plot(m,y(2:R+1),'r-',m,s,'g--');
legend( 'y[n] ','s[n] ');
xlabel('Time index n');ylabel('Amplitude');
Câu hỏi:
1. Chạy chương trình trên
2. Có thể dùng công thức x = s + d để tạo ra tín hiệu nhiễu không? Nếu không
hãy giải thích?
3. Nêu mối quan hệ giữa các tín hiệu x
1
, x
2
,x
3
với tín hiệu x
4. Nêu công dụng của lệnh legend.

Bài 5: Các thao tác cơ bản trên tín hiệu rời rạc
Hãy gõ các đoạn lệnh sau trong chương trình Matlab, mỗi đoạn lệnh được
lưu bằng một tên file khác nhau tương ứng là: sigshift.m sigfold.m sigadd.m
conv_m.m
Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology



function [y,n]=sigshift(x,m,n0)
%implement y(n)=x(n-n0)
n = m+n0; y = x;
%----------------------------------
function [y,n] = sigfold(x,n)
%implement y(n)=x(-n)
y = fliplr(x);
n = -fliplr(n);
%----------------------------------
function [y,n] = sigadd(x1,n1,x2,n2)
%implement y(n)=x1(n)+x2(n)
%[y,n] = sigadd(x1,n1,x2,n2)
%y = sum sequence over n, which includes n1 and n2
%x1 = first sequence over n1
%x2 = second sequence over n1 (n2 can be different from n1)
n = min(min(n1), min(n2)):max(max(n1),max(n2)); %duration of y(n)
y1 = zeros(1,length(n)); y2=y1; %initialization
y1(find((n>=min(n1))&(n<=max(n1))= =1))=x1; %x1 with duration of y1
y2(find((n>=min(n2))&(n<=max(n2))= =1))=x2; %x2 with duration of y2
y = y1+y2
%---------------------------------------------------------------------------------------
function [y,ny] = conv_m(x,nx,h,nh)
% [y,ny] = conv_m(x,nx,h,nh)
% [y,ny] = convolution result
% [x,nx] = first signal
% [h,nh] = second signal
nyb = nx(1)+nh(1);
nye = nx(length(x))+nh(length(h));
ny = [nyb:nye];
y = conv(x,h)


Cho
{ }
1234567654321)(

=nx

Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Xác định và vẽ các tín hiệu sau:
a. x
1
(n) = 2x(n-5) - 3x(n+4)
b. x
2
(n) = x(3-n) + x(n-2)
% Chương trình tính toán câu a
n = -2:10
x = [1:7,6:-1:1]
[x11,n11] = sigshift(x,n,5)
[x12,n12] = sigshift(x,n,-4)
[x1,n1] = sigadd(2*x11,n11,-3*x12,n12)
subplot(2,1,1)
stem(n1,x1)
title('Sequence in example a')
xlabel('n'); ylabel('x1(n)')
Câu hỏi
a. Chạy chương trình trên, xác định kết quả của chuỗi x
1

(n). Giải thích các bước
thực hiện của chương trình.
b. Tương tự, viết chương trình tính toán cho câu b
Bài 6:
Hệ thống tuyến tính bất biến được đặc trưng bởi phương trình sai phân tuyến tính
hệ số hằng có dạng:

][][
00
knxpknyd
M
k
k
N
k
k
−=−
∑∑
==
(2)
Trong đó x[n] và y[n] tương ứng là đầu vào và đầu ra của hệ thống. {d
k
} và {p
k
}
là các hằng số.
Nếu d
0
≠ 0 thì:
][][][

0
0
1
0
knx
d
p
kny
d
d
ny
M
k
k
N
k
k
−+−−=
∑∑
==

Nếu biết x[n] và các điều kiện đầu y[n
0
- 1], y[n
0
-2], .., y[n
0
- N] ta sẽ tìm được
đáp ứng ra của hệ thống.
Trong matlab sử dụng lệnh filter để mô phỏng hệ tuyến tính bất biến và nhân quả

được biểu diễn theo công thức (2). Nếu ký hiệu:
num = [p
0
p
1
.... p
M
].
Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

den = [d
0
d
1
.... d
N
]
Thì lệnh y = filter (num, den, x) sẽ tạo một vector đầu ra y có chiều dài bằng với
chiều dài của tín hiệu vào x khi các điều kiện đầu bằng 0. Nghĩa là:
y[-1] = y[-2] = ... = y[-N] = 0
Còn nếu dùng lệnh y = filter (num, den, x, ic) để tính đầu ra của hệ thống thì ic =
[y[-1], y[-2],....., y[-N]] là vector điều kiện ban đầu của hệ thống.
Chương trình P2-1 dưới đây vẽ đáp ứng ra của hệ thống được cho bởi biểu thức:
y[n] =x[n]
2
- x[n-1]x[n+1]

% Program P2_1
% Generate a sinusoidal input signal

clf;
n = 0:200;
x = cos(2*pi*0.05*n);
% Compute the output signal
x1 = [x 0 0]; % x1[n] = x[n+1]
x2 = [0 x 0]; % x2[n] = x[n]
x3 = [0 0 x]; % x3[n] = x[n-1]
y = x2.*x2-x1.*x3;
y = y(2:202);
% Plot the input and output signals
subplot(2,1,1)
plot(n, x)
xlabel('Time index n');ylabel('Amplitude');
title('Input Signal')
subplot(2,1,2)
plot(n,y)
xlabel('Time index n');ylabel('Amplitude');
title('Output signal');

Câu hỏi:
1. Chạy chương trình trên
2. Sử dụng các tín hiệu sin với tần số khác nhau làm tín hiệu đầu vào và tính
đáp ứng ra của hệ thống. Đáp ứng ra phụ thuộc như thế nào vào tần số của
tín hiệu vào ?
3. Nếu x[n] = sin(ω
0
n ) + K, tính đáp ứng ra y[n] của hệ thống
Bài 7: Hệ thống tuyến tính và không tuyến tính
Cho: y[n]- 0.4y[n-1] + 0.75y[n-2] = 2.2403x[n] + 2.4908x[n-1] + 2.2403x[n-2]
(3)

Digital Signal Processing Lab Book , Bui Thanh Hieu (Msc)
Computer Engineering Department – University of Information Tẹchnology

Chương trình P2-2 dưới đây sử dụng 3 chuỗi tín hiệu vào khác nhau x
1
[n], x
2
[n],
và x[n] = a.x
1
[n] + b.x
2
[n] để tính và vẽ các đáp ứng ra tương ứng y
1
[n], y
2
[n] và
y[n]

% Program P2_2
% Generate the input sequences
clf;
n = 0:40;
a = 2;b = -3;
x1 = cos(2*pi*0.1*n);
x2 = cos(2*pi*0.4*n);
x = a*x1 + b*x2;
num = [2.2403 2.4908 2.2403];
den = [1 -0.4 0.75];
ic = [0 0]; % Set zero initial conditions

y1 = filter(num,den,x1,ic); % Compute the output y1[n]
y2 = filter(num,den,x2,ic); % Compute the output y2[n]
y = filter(num,den,x,ic); % Compute the output y[n]
yt = a*y1 + b*y2;
d = y - yt; % Compute the difference output d[n]
% Plot the outputs and the difference signal
subplot(3,1,1)
stem(n,y);
ylabel('Amplitude');
title('Output Due to Weighted Input: a \cdot x_{1}[n] + b
\cdot x_{2}[n]');
subplot(3,1,2)
stem(n,yt);
ylabel('Amplitude');
title('Weighted Output: a \cdot y_{1}[n] + b \cdot
y_{2}[n]');
subplot(3,1,3)
stem(n,d);
xlabel('Time index n');ylabel('Amplitude');
title('Difference Signal');

Câu hỏi:
1. Chạy chương trình trên và so sánh y[n] với yt[n]. Hệ thống này có tuyến
tính không ?
2. Chạy lại chương trình với giá trị khác nhau của các hệ số a, b và tần số của
tín hiệu vào.
3. Chạy lại chương trình với điều kiện đầu khác 0 và kiểm tra xem hệ thống
có tuyến tính hay không?
4. Sửa lại chương trình P2-2 để tính đầu ra y1[n], y2[n] và y[n] của hệ thống
được cho bởi: y[n] = x[n]x[n-1]

So sánh y[n] với yt[n]. Hệ thống này có tuyến tính không?

×