Mục đích: Bài thí nghiệm này nhằm giúp sinh viên củng cố và kiểm chứng kiến thức đã học qua cách nhìn trực quan sinh động trên phần mềm mô phỏng Matlab các nội dung sau: - Biểu diễn tín
Trang 1NGÀNH HỌC: ĐIỆN – ĐIỆN TỬ
HỌC PHẦN : XỬ LÝ TÍN HIỆU SỐ
BÀI THÍ NGHIỆM SỐ: 1
XỬ LÝ TÍN HIỆU SỐ MÔ PHỎNG TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC TRÊN MIỀN N
Thời lượng: 4 tiết
1 MỤC ĐÍCH, YÊU CẦU:
1.1 Mục đích:
Bài thí nghiệm này nhằm giúp sinh viên củng cố và kiểm chứng kiến thức đã học qua cách nhìn trực quan sinh động trên phần mềm mô phỏng Matlab các nội dung sau:
- Biểu diễn tín hiệu cơ sở trong miền thời gian
- Các phép toán trên tín hiệu
- Đáp ứng xung và đáp ứng ra của hệ thống
1.2 Yêu cầu:
Mỗi nhóm SV biết sử dụng phần mềm MATLAB để thực hiện các nội dung sau:
- Tạo và vẽ một số tín hiệu cơ sở: dãy xung đơn vị, dãy nhảy đơn vị, dãy chữ nhật, dãy hàm mũ…
- Thực hiện các phép toán trên tín hiệu: phép nhân hai tín hiệu, phép cộng, phép chập…
- Tìm và vẽ đáp ứng xung/ đáp ứng ra của hệ thống rời rạc theo thời gian có chiều dài hữu hạn
2 CHUẨN BỊ:
2.1 Lý thuyết:
- SV đọc Chương 1: Tín hiệu và hệ thống rời rạc trong sách bài giảng Xử lý tín hiệu số và nắm chắc tín hiệu số và nắm chắc các nội dung sau:
+ Định nghĩa tín hiệu rời rạc
+ Một số tín hiệu rời rạc cơ bản: dãy xung đơn vị, dãy nhảy đơn vị, dãy hàm mũ thực, dãy hàm
mũ phức, dãy ngẫu nhiên…
+ Định nghĩa tích chập và đáp ứng xung của hệ thống
+ Đá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
- SV đọc tài liệu hướng dẫn sử dụng phần mềm MATLAB (tài liệu do giáo viên cung cấp)
2.2 Trang thiết bị, dụng cụ:
Máy tính có cài phần mềm MATLAB
3 NỘI DUNG:
3.1 Hướng dẫn: 30 phút
3.2 Các bước thực hiện: 120 phút
Bước 1 Mô phỏng một số tín hiệu rời rạc cơ sở (30 phút).
Trong xử lý tín hiệu số và nắm chắc tín hiệu số, một tín hiệu số bất kỳ đều có thể được khai triển theo các tín hiệu cơ sở sau đây Ngoài ra, các tín hiệu cơ sở này được sử dụng rộng rãi trong rất nhiều các ứng dụng DSP
Trang 2Trước hết, xin giới thiệu một số hàm cơ bản trong Matlab được sử dụng trong phần này Để biết cụ thể
hơn về chức năng của hàm và cú pháp của lệnh gọi hàm, gõ lệnh help kèm theo tên của hàm tại cửa số
lệnh của MATLAB
zeros: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 0.
ones: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 1.
rand: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên được phân bố đều trong khoảng từ 0
đến 1
randn: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên theo phân bố Gauss có giá trị trung
bình bằng 0, phương sai bằng 1
min: trả về giá trị nhỏ nhất trong một ma trận.
max: trả về giá trị lớn nhất trong một ma trậ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
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
conv: trả về tích chập của 2 vector.
filter: trả về đáp ứng theo thời gian của hệ thống được mô tả bởi một phương trình sai phân tuyến tính
hệ số hằng
Dãy xung đơn vị:
( )
0
n n
n
Để 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
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]);
Ngoài ra, có thể dùng hàm Matlab để mô phỏng tín hiệu 0 0
1
0
n n
n n
n
trên khoảng [n1,n2] như sau:
function [x,n] = impseq(n0,n1,n2)
% Generates x(n) = delta(n-n0); n1 <= n,n0 <= n2
%
-% [x,n] = impseq(n0,n1,n2)
%
if ((n0 < n1) | (n0 > n2) | (n1 > n2))
error('arguments must satisfy n1 <= n0 <= n2')
end
n = [n1:n2];
Trang 3%x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))];
x = [(n-n0) == 0]
a x n( ) 2 ( n1) (n 3) với 6 n 6
Dãy nhảy đơn vị
( ) 1 0
0
n
u n
n
Để 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 Hàm này
được sử dụng để tạo ra dãy nhảy u(n) trên một khoảng hữu hạn
% 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]);
Tương tự, ta có thể sử dụng hàm Matlab để mô phỏng tín hiệu 0 0
1
0
n n
u n n
n
[n1,n2] như sau:
function [x,n] = stepseq(n0,n1,n2)
% Generates x(n) = u(n-n0); n1 <= n,n0 <= n2
%
-% [x,n] = stepseq(n0,n1,n2)
%
if ((n0 < n1) | (n0 > n2) | (n1 > n2))
error('arguments must satisfy n1 <= n0 <= n2')
end
n = [n1:n2];
%x = [zeros(1,(n0-n1)), ones(1,(n2-n0+1))];
x = [(n-n0) >= 0];
BT 1.1 Hãy viết chương trình thực hiện các công việc sau:
b Vẽ đồ thị của tín hiệu sau:
0,3( 10)
( ) [ ( ) ( 10)] 10 n [u(n-10)-u(n-20)]
x n n u n u n e
c Vẽ đồ thị tín hiệu: ( ) 2 (x n n1)(n 3) với 6 n 6
Trang 4d Tạo và vẽ dãy hàm mũ thực ( ) 0
0
n
e n
n
trong khoảng [n1, n2]
e Tạo và vẽ dãy xung chữ nhật có chiều dài L
Bước 2 Các phép toán trên tín hiệu (45 phút).
Xử lý tín hiệu số và nắm chắc tín hiệu số là một nhóm các phép toán tác động lên tín hiệu lối vào để tạo ra tín hiệu khác ở lối ra Về mặt công thức, các phép toán này chính là các phép biến đổi tín hiệu này thành tín hiệu khác theo các quy tắc T đã được định trước y(n) = T[x(n)] Dưới đây sẽ xem xét một số các phép toán cơ sở
Phép dịch chuyển (trễ)
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;
Phép chuyển vị
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);
Phép nhân tín hiệu
y(n) = x1(n).x2(n)
Ta có thể thực hiện phép toán này nhờ vào hàm sau:
function [y,n] = sigmult(x1,n1,x2,n2)
% implements y(n) = x1(n)*x2(n)
%
-% [y,n] = sigmult(x1,n1,x2,n2)
% y = product sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2 (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; %
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
Trang 5y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1 * y2; % sequence multiplication
Phép cộng tín hiệu
y(n) = x1(n)+ x2(n)
function [y,n] = sigadd(x1,n1,x2,n2)
% implements 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 n2 (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 y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1+y2; % sequence addition
Phép chập tín hiệu
y n h n x n x k h n k h k x n k
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)
Nhược điểm của hàm này là 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, người ta định nghĩa hàm Matlab conv_m như sau:
function [y,ny] = conv_m(x,nx,h,nh)
% Modified convolution routine for signal processing
%
-% [y,ny] = conv_m(x,nx,h,nh)
% y = convolution result
% ny = support of y
% x = first signal on support nx
% nx = support of x
% h = second signal on support nh
% nh = support of h
%
nyb = nx(1)+nh(1); nye = nx(length(x)) + nh(length(h));
ny = [nyb:nye];
y = conv(x,h);
Năng lượng của tín hiệu
Trang 6( )
x
n
function[Ex]=energy(x);
Ex=sum(x.*conj(x));
% sum(abs(x).^2)
Công suất trung bình của một dãy tuần hoàn
1 2 0
1
( )
N X
n
N
function[Px]=power(x);
Px=sum(abs(x).^2)/N
BT 1.2 Cho x(n)=2-n với 0 n 5
a Vẽ dãy x(n)u(n) theo n
b Vẽ dãy x(n)u(2-n) theo n
c Vẽ dãy x(-n)u(-n) theo n
BT 1.3 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:
a y1(n)=2x(n-5) + 3x(n+4)
b y2(n)=2x(3-n) – x(n).x(n+2)
BT 1.4 Cho các dãy có chiều dài 7 mẫu sau:
x
x
Tìm và vẽ các dãy sau đây:
a y(n)=x1(n)+x2(n)
b y(n)=x1(n).x2(n)
c y(n)=x1(n)-x3(n)
BT 1.5 Cho hai dãy x 3 11 7 0 1 4 2
và h 2 3 0 5 2 1
Tính tích chập của x(n) với h(n)
Bước 3 Hệ thống rời rạc (45 phút)
Đá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
BT 1.6 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:
a y n k b x n r
Trang 7a 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 (x 1)
y n y n y n x n n
( ) 0,4 ( 1) 0,03 ( 2) ( )
y n y n y n x n
Đá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
BT 1.7 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:
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ị
BT 1.8 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:
( )
x n c c
3.3 Ghi nhận, phân tích kết quả: 30 phút
4 ĐÁNH GIÁ KẾT QUẢ:
- Thực hiện/thao tác thực tế: 4 điểm
- Phân tích kết quả: 4 điểm
- Câu hỏi mở rộng: 2 điểm
- Điểm bài 1: 10 điểm
Trang 8BÀI THÍ NGHIỆM SỐ: 2
MÔ PHỎNG TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC TRÊN MIỀN Z, MIỀN TẦN SỐ LIÊN TỤC VÀ MIỀN TẦN SỐ RỜI RẠC K
Thời lượng: 4 tiết
1 MỤC ĐÍCH, YÊU CẦU:
1.1 Mục đích:
Bài thí nghiệm này nhằm giúp sinh viên củng cố và kiểm chứng kiến thức đã học qua cách nhìn trực quan sinh động trên phần mềm mô phỏng Matlab các nội dung sau:
- Biểu diễn tín hiệu và hệ thống rời rạc trong miền Z
- Biểu diễn tín hiệu và hệ thống rời rạc trong miền tần số liên tục
- Biểu diễn tín hiệu và hệ thống rời rạc trong miền tần số rời rạc k
1.2 Yêu cầu:
Sinh viên dùng phần mềm MATLAB mô phỏng các nội dung sau:
- Biểu diễn bằng đồ thị hàm phổ biên độ và phổ pha của một dãy tín hiệu
- Biểu diễn bằng đồ thị phân bố các điểm cực và điểm không của một hệ thống
- Biểu diễn bằng đồ thị hàm đáp ứng tần số của một hệ thống
- Biểu diễn bằng đồ thị ảnh của phép biến đổi Fourier rời rạc của một dãy có chiều dài hữu hạn
- Đánh giá hiệu quả của thuật toán biến đổi Fourier nhanh với chiều dài dãy thay đổi
2 CHUẨN BỊ:
2.1 Lý thuyết:
- SV đọc các nội dung sau:
Chương 2: Biến đổi Z
+ Định nghĩa biến đổi Z hai phía và biến đổi Z một phía
+ Điểm cực và điểm không
Chương 3: Biểu diễn tín hiệu và hệ thống rời rạc trong miền tần số liên tục.
+ Định nghĩa biến đổi Fourier
+ Lấy mẫu tín hiệu
+ Phổ biên độ và phổ pha của biến đôi Fourier của tín hiệu rời rạc
Chương 4: Biểu diễn tín hiệu và hệ thống rời rạc trong miền tần số rời rạc
+ Định nghĩa và tính chất của DFT
+ Biến đổi Fourier nhanh FFT
- SV đọc tài liệu hướng dẫn sử dụng phần mềm MATLAB (tài liệu do giáo viên cung cấp)
2.2 Trang thiết bị, dụng cụ:
Máy tính có cài phần mềm MATLAB
3 NỘI DUNG:
3.1 Hướng dẫn: 30 phút
3.2 Các bước thực hiện: 120 phút
Trang 9Bước 1 Tín hiệu và hệ thống trong miền Z (40 phút)
Trước hết xin giới thiệu một số các hàm của MATLAB có thể sử dụng trong phần thí nghiệm này Để
biết cụ thể hơn về chức năng của hàm và cú pháp của lệnh gọi hàm, gõ lệnh help kèm theo tên của
hàm tại cửa số lệnh của MATLAB
abs, angle: trả về các hàm thể hiện Mođun và Agumen của một số phức
real, imag: trả về các hàm thể hiện phần thực và phần ảo của một số phức
residuez: trả về các điểm cực và các hệ số tương ứng với các điểm cực đó trong phân tích một hàm
phân thức hữu tỷ ở miền Z thành các thành phần là các hàm phân thức đơn giản, ngược lại nếu đầu vào là danh sách các điểm cực và các hệ số, hàm residuez sẽ trả về hàm phân thức hữu tỷ ở miền Z
poly: xây dựng một đa thức từ danh sách các nghiệm của nó
ztrans: trả về biến đổi Z của một hàm số được định nghĩa theo công thức của một biểu tượng (symbol) iztrans: hàm ngược lại của hàm ztrans
zplane: thể hiển phân bố điểm cực và điểm không của một hàm phân thức hữu tỷ lên mặt phẳng Z freqz: trả về đáp ứng tần số của một hệ thống tại một số hữu hạn các điểm rời rạc trên vòng tròn đơn
vị khi biết hàm truyền đạt của nó
fft: thực hiện biến đổi Fourier rời rạc của một dãy số có độ dài hữu hạn theo thuật toán biến đổi
Fourier nhanh và trả về kết quả biến đổi Fourier rời rạc của dãy số đó
n thực hiện tại
etime: trả về thời gian tính bằng giây giữa 2 thời điểm.
Biến đổi Z
Biến đổi Z của một tín hiệu x(n) được định nghĩa như sau:
n
n
X z x n z
BT 2.1 Tìm biến đổi z của dãy ( ) 2 ( )n
x n u n bằng các cách sau:
a Tính dựa trên định nghĩa
b Kiểm tra lại bằng hàm ztrans trong Matlab.
Theo định nghĩa ta có ( ) ( )
2
n n
z
z
Ta có thể tính X(z) trong Matlab bằng hàm ztrans Nhưng trước hết hãy định nghĩa biến n bằng câu lệnh syms:
% Tim bien doi z
syms n positive
x=2.^n;
ztrans(x)
Biến đổi Z ngược
BT 2.2 Cho X z( ) z2
Trang 10Tìm biến đổi z ngược bằng hai cách:
a Khai triển thành phân thức tối giản
b Kiểm tra lại bằng hàm iztrans trong Matlab
% Tim bien doi z nguoc
syms z
f = (z+2)/(2*z^2-7*z+3);
iztrans(f)
Thặng dư và các điểm cực
BT 2.3 Sử dụng lệnh residuez của Matlab, tính các điểm cực, thặng dư tại các điểm cực của hàm X(z)
ở bài BT 2.2 Từ đó hãy viết dạng tổng các hàm phân thức đơn giản của X(z) và so sánh với kết quả ở bài BT 2.2
% Tinh thang du va diem cuc
b=[0 1 2];
a=[2 -7 3];
[r,p,k]=residuez(b,a)
% [b,a]=residuez(r,p,k;)
2 ( )
(1 2 )(1 )
X z
z z
Viết chương trình Matlab sử dụng lệnh residuez để tìm biến đổi z ngược của X(z).
Các điểm cực và điểm không
BT 2.5 Cho hai hệ thống sau:
( ) 0,6 ( 1) 0,08 ( 2) 2 ( )
y n y n y n x n
( ) 0,7 ( 1) 0,1 ( 2) ( ) 0,5 ( 2)
y n y n y n x n x n
a Tính hàm truyền đạt H(z) của mỗi hệ thống
b Sử dụng lệnh zplane để biểu diễn các điểm cực, điểm không của hàm truyền đạt và xét tính ổn định
của từng hệ thống
c Viết chương trình tìm đáp ứng xung của hệ thống (gợi ý tín hiệu số và nắm chắc: sử dụng lệnh iztrans)
Bước 2 Tín hiệu và hệ thống trong miền tần số liên tục (50 phút)
Phổ của tín hiệu
Biến đổi Fourier của tín hiệu x(n) được định nghĩa như sau:
n
X e x n e
Biểu diễn theo phần thực phần ảo Re, Im
X e X e j X e
Đây là dạng biểu diễn quen thuộc của số phức
Trang 11Biểu diễn theo Modul và Argument
j j jarg X e j
X e X e e
Ở đây:
j
X e
: Modul; argX e j
: Argument
Ta có một số khái niệm như sau:
- X e j
: Phổ của tín hiệu x(n)
- X e j
: Phổ biên độ của tín hiệu x(n)
- arg X e j
: Phổ pha của tín hiệu x(n)
- X e j X e j e j
Cho dãy ( ) 0,5 ( )n
x n u n Viết chương trình bằng MATLAB thể hiện trên đồ thị phổ ( j )
X e tại 501 điểm rời rạc trong khoảng [0,π]
a Tìm biến đổi Z của tín hiệu x(n) bằng hàm ztrans
syms n positive;
x=0.5.^n;
X=ztrans(x)
X = z/(z - 1/2)
Khi đó phổ của tín hiệu x(n) là: ( )
0,5
j j
j
e
X e
e
b Viết chương trình bằng MATLAB thể hiện trên đồ thị phổ (X e j) tại 501 điểm rời rạc trong khoảng [0,π]
% Ve do thi pho cua tin hieu x(n)
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('Pho bien do'); xlabel('Tan so chuan hoa (pi)');
ylabel('Bien do');
subplot(2,2,3); plot(w/pi,angX); grid;
title('Pho pha'); xlabel('Tan so chuan hoa (pi)');
ylabel('Pho theo radians');
subplot(2,2,2); plot(w/pi,realX); grid;
title('Phan thuc'); xlabel('Tan so chuan hoa (pi)');
ylabel('Bien do');
subplot(2,2,4); plot(w/pi,imagX); grid;