1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

20 1,4K 10
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Digital Signal Processing Lab Book
Tác giả Bui Thanh Hieu
Người hướng dẫn Msc. Bui Thanh Hieu
Trường học University of Information Technology
Chuyên ngành Computer Engineering
Thể loại Sách hướng dẫn
Định dạng
Số trang 20
Dung lượng 364,37 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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 n

u

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 δ[nM]

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 {δ[n−11] } 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φ

e

e( 0 0) , A= A

= +

Khi đó ta có:

) sin(

) cos(

]

[ = σ 0 + (ω 0 + φ) = σ 0 ω0 +φ + σ 0 ω0 +φ

n e

A j n

e A e

A n

Trang 2

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

Trang 3

Bài 3: Tín hiệu rời rạc dạng sin thực

Tín hiệu sin có dạng: x[n]= Acos(ω0n+φ)

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 900 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

Trang 4

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 ] [n = x n− +x n +x n+

y

% 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 x1 , x2 ,x3 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

Trang 5

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)

=

n

x

Trang 6

Xác định và vẽ các tín hiệu sau:

a x1(n) = 2x(n-5) - 3x(n+4)

b x2(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 x1(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:

] [ ]

[

0 0

k n x p k

n y d

M

k k N

k

=

=

(2)

Trong đó x[n] và y[n] tương ứng là đầu vào và đầu ra của hệ thống {dk} và {pk}

là các hằng số

0 0

1 0

k n x d

p k

n y d

d n

y

M

k k N

k

=

=

Nếu biết x[n] và các điều kiện đầu y[n0 - 1], y[n0 -2], , y[n0 - 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 = [p0 p1 pM]

Trang 7

den = [d0 d1 dN] 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(ω0n ) + 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)

Trang 8

Chương trình P2-2 dưới đây sử dụng 3 chuỗi tín hiệu vào khác nhau x1[n], x2[n],

và x[n] = a.x1[n] + b.x2[n] để tính và vẽ các đáp ứng ra tương ứng y1[n], y2[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?

Trang 9

Bài 8: Xác định đáp ứng xung của hệ thống LTI

% Program P2_3

% Compute the impulse response y

clf;

N = 40;

num = [2.2403 2.4908 2.2403];

den = [1 -0.4 0.75];

y = impz(num,den,N);

% Plot the impulse response

stem(y);

xlabel('Time index n'); ylabel('Amplitude');

title('Impulse Response'); grid;

Câu hỏi:

1 Chạy chương trình trên để tạo đáp ứng xung của hệ thống được mô tả bởi phương trình (3)

2 Sửa lại chương trình để phát ra 45 mẫu đáp ứng xung đầu tiên của hệ thống LTI nhân quả sau:

y[n] + 0.7y[n-1] - 0.46y[n-2] - 0.62y[n-3] = 0.9x[n] - 0.45x[n-1] + 0.35x[n-2] + 0.002x[n-3]

Bài 9: Hệ bất biến và không bất biến

Chương trình P2_4 dưới đây mô phỏng cho hệ thống được biểu diễn bởi công thức (3) Đầu tiên tạo ra 2 tín hiệu vào khác nhau x[n] và x[n-D], sau đó tính

và vẽ các tín hiệu ra tương ứng y1[n], y2[n] và tín hiệu sai khác y1[n] - y2[n+D]

% Program P2_4

% Generate the input sequences

clf;

n = 0:40; D = 10;a = 3.0;b = -2;

x = a*cos(2*pi*0.1*n) + b*cos(2*pi*0.4*n);

xd = [zeros(1,D) x];

num = [2.2403 2.4908 2.2403];

den = [1 -0.4 0.75];

ic = [0 0]; % Set initial conditions

% Compute the output y[n]

y = filter(num,den,x,ic);

% Compute the output yd[n]

yd = filter(num,den,xd,ic);

% Compute the difference output d[n]

d = y - yd(1+D:41+D);

% Plot the outputs

subplot(3,1,1)

Trang 10

stem(n,y);

ylabel('Amplitude');

title('Output y[n]'); grid;

subplot(3,1,2)

stem(n,yd(1:41));

ylabel('Amplitude');

title(['Output due to Delayed Input x[n Ð', num2str(D),']']); grid;

subplot(3,1,3)

stem(n,d);

xlabel('Time index n'); ylabel('Amplitude');

title('Difference Signal'); grid;

Câu hỏi:

1 Chạy chương trình trên và so sánh y[n] và yd[n-10] Hệ thống trên có bất biến không?

2 Lặp lại câu hỏi 1 khi điều kiện ban đầu ic khác 0

3 Tương tự hãy viết chương trình để mô phỏng cho hệ thống

y[n] = nx[n] + x[n-1]

Hệ thống trên có phải là hệ bất biến?

Bài 10: Tổng chập

−∞

=

−∞

=

=

=

k x k n h k

n x k h n

Để tính tổng chập trong matlab sử dụng lệnh conv

% Program P2_5

clf;

h = [3 2 1 -2 1 0 -4 0 3]; % impulse response

x = [1 -2 3 -4 3 2 1]; % input sequence

y = conv(h,x);

n = 0:14;

subplot(2,1,1);

stem(n,y);

xlabel('Time index n'); ylabel('Amplitude');

title('Output Obtained by Convolution'); grid;

x1 = [x zeros(1,8)];

y1 = filter(h,1,x1);

subplot(2,1,2);

stem(n,y1);

xlabel('Time index n'); ylabel('Amplitude');

title('Output Generated by Filtering'); grid;

Câu hỏi:

1 Chạy chương trình trên So sánh y[n] và y1[n]

Trang 11

2 Hãy giải thích lý do vì sao phải tạo tín hiệu x1[n] bằng cách thêm các mẫu

0 sau x[n] làm tín hiệu vào để tính y1[n] bằng lệnh filter?

3 Tương tự, viết chương trình tính tổng chập của đáp ứng xung h[n] có chiều dài bằng 15 và tín hiệu vào x[n] có chiều dài bằng 10

Bài 11: Hệ ổn định

Một hệ thống LTI được gọi là ổn định khi và chỉ khi đáp ứng xung của hệ thổng thoã mãn điều kiện:

<

∑∞

−∞

=

n

n

h ][

% Program P2_6

% Stability test based on the sum of the absolute

% values of the impulse response samples

clf;

num = [1 -0.8]; den = [1 1.5 0.9];

N = 200;

h = impz(num,den,N+1);

parsum = 0;

for k = 1:N+1;

parsum = parsum + abs(h(k));

if abs(h(k)) < 10^(-6), break, end

end

% Plot the impulse response

n = 0:N;

stem(n,h)

xlabel('Time index n'); ylabel('Amplitude');

% Print the value of abs(h(k))

disp('Value =');disp(abs(h(k)));

Câu hỏi:

1 Chạy chương trình để tính đáp ứng xung của hệ thống

2 Nêu công dụng của lệnh for và end

3 Nêu công dụng của lệnh break

4 Hệ thống có ổn định không?

5 Viết chương trình để tìm đáp ứng xung của hệ thống

y[n] = x[n] -4x[n-1] +3x[n-2] +1.7y[n-1]- y[n-2]

Hệ thống này có ổn định không?

Bài 12: Ghép nối tiếp các hệ LTI

Trang 12

Trong thực tế các hệ thống LTI nhân quả bậc cao có thể được thực hiện bằng cách ghép nối tiếp các hệ thống LTI nhân quả bậc thấp hơn (thường là bậc 2) Ví dụ hệ thống rời rạc bậc 4 sau

y[n] + 1.6y[n-1] + 2.28y[n-2] + 1.325y[n-3] + 0.68y[n-4]

= 0.06x[n] - 0.19x[n-1] + 0.27x[n-2] - 0.26x[n-3] + 0.12x[n-4]

có thể được thực hiện bằng cách ghép nối tiếp 2 hệ thống rời rạc bậc 2

sys 1 : y1[n] + 0.9y1[n-1] + 0.8y1[n-2] = 0.3x[n] - 0.3x[n-1] + 0.4x[n-2]

sys 2 : y2[n] + 0.7y2[n-1] + 0.85y2[n-2] = 0.2y1[n] - 0.5y1[n-1] + 0.3y1[n-2]

Chương trình P2_7 mô phỏng hệ thống bậc 4 và hệ thống nối tiếp hai hệ thống bậc 2 Trong chương trình này x[n], y[n] tương ứng là tín hiệu vào và ra của

hệ thống bậc 4 Sau đó sử dụng x[n] này làm tín hiệu vào cho hệ thống bậc 2 thứ nhất và tìm đáp ứng ra y1[n] Tiếp đến sử dụng y1[n] làm tín hiệu vào cho hệ thống bậc 2 thứ hai và tìm đáp ứng ra y2[n]

% Program P2_7

% Cascade Realization

clf;

x = [1 zeros(1,40)]; % Generate the input

n = 0:40;

% Coefficients of 4th order system

den = [1 1.6 2.28 1.325 0.68];

num = [0.06 -0.19 0.27 -0.26 0.12];

% Compute the output of 4th order system

y = filter(num,den,x);

% Coefficients of the two 2nd order systems

num1 = [0.3 -0.2 0.4];den1 = [1 0.9 0.8];

num2 = [0.2 -0.5 0.3];den2 = [1 0.7 0.85];

% Output y1[n] of the first stage in the cascade

y1 = filter(num1,den1,x);

% Output y2[n] of the second stage in the cascade

y2 = filter(num2,den2,y1);

% Difference between y[n] and y2[n]

d = y - y2;

% Plot output and difference signals

subplot(3,1,1);

stem(n,y);

ylabel('Amplitude');

title('Output of 4th order Realization'); grid;

subplot(3,1,2);

stem(n,y2)

ylabel('Amplitude');

Ngày đăng: 13/09/2012, 10:52

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w