Tải bản đầy đủ (.doc) (13 trang)

BÀI TẬP XỬ LÝ TÍN HIỆU SỐ Viết chương trình tính tổng chập theo công thức và theo đồ thị

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 (399.37 KB, 13 trang )


ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
============
XỬ LÝ TÍN HIỆU SỐ
Đề Tài
Viết chương trình tính tổng chập theo công thức và theo đồ thị

GV HƯỚNG DẪN: Lê Thị Minh Thùy
NHÓM SV THỰC HIỆN:
(Nhóm 2)
Nguyễn Thị Mai Hoa
Nguyễn Thị Ngọc Huyên
Nguyễn Thị Nga
Nguyễn Thị Phương Thảo
Nguyễn Thị Vân

HÀ NỘI- 2010
1
I/ Cơ sở lý thuyết.
1. Khái niệm tín hiệu.
− Về mặt vật lý: Tín hiệu là dạng biểu diễn vật lý của thông tin.
− Về mặt toán học: Tín hiệu được biểu diễn bởi hàm của một hoặc nhiều biến số
độc lập. Các biến độc lập có thể là: thời gian, áp suất, độ cao, nhiệt độ…
− Biến độc lập thường gặp là thời gian.
− Một ví dụ về tín hiệu có biến độc lập là thời gian: tín hiệu điện tim.
− Có những tín hiệu là hàm theo nhiều biến độc lập. Ví dụ: tín hiệu ảnh.
− Tất cả các tín hiệu đều do một nguồn nào đó tạo ra, theo một cách thức nào đó.
− Quá trình tạo ra tín hiệu thường liên quan tới một hệ thống, hệ thống này đáp
ứng lại một kích thích.
− Hệ thống là một thiết bị vật lý thực hiện một tác động nào đó lên tín hiệu.


− Nguồn tín hiệu là kích thích liên quan đến hệ thống.
− Xử lý tín hiệu là một loạt các công việc hay phép toán thực hiện trên tín hiệu
nhằm đạt một mục đích nào đó.
2. Phân loại tín hiệu.
Tín hiệu được phân loại dựa vào nhiều cơ sở khác nhau và tương ứng có các
cách phân loại khác nhau. Ở đây, ta dựa vào sự liên tục hay rời rạc của thời gian và
biên độ để phân loại.
− Tín hiệu liên tục: Tín hiệu tương tự và tín hiệu lượng tử hóa.
− Tín hiệu rời rạc: Tín hiệu lấy mẫu và tín hiệu số.
2
3. Tín hiệu rời rạc.
3.1/ Biểu diễn tín hiệu rời rạc.
− Biểu diễn theo toán học
− Biểu diễn bằng đồ thị: Cách biểu diễn này cho ta cách nhìn trực quan về một tín
hiệu rời rạc.
− Biểu diễn bằng dãy số
3.2/ Một số tín hiệu rời rạc cơ bản
− Tín hiệu xung đơn vị
− Tín hiệu bậc đơn vị
− Tín hiệu hàm mũ
x(n) = a
n
− Tín hiệu tuần hoàn
3




≤≤
=

n
NnNBT
nx
0
)(
21
=

δ =



1 n 0
(n)
0 n 0





=

1 n 0
u(n)
0 n<0
x(n)=x(n+N), N>0: chu kỳ
x(n) = Sin[(2π/n)(n+n
o
)]
− Tín hiệu chữ nhật

− Tín hiệu dốc đơn vị
3.3/ Các phép toán với tín hiệu rời rạc
− Phép nhân 2 tín hiệu rời rạc
Tích của 2 tín hiệu rời rạc nhận được bằng cách nhân từng đôi một các giá
trị mẫu đối với cùng một trị số của biến độc lập.
− Phép nhân tín hiệu rời rạc với hằng số
4
Tích của một tín hiệu rời rạc với hằng số nhận được bằng cách nhân tất cả
các giá trị mẫu của dãy với hằng số đó.
− Phép cộng 2 tín hiệu rời rạc
Tổng của 2 tín hiệu rời rạc nhận được bằng cách cộng từng đôi một các giá
trị mẫu đối với cùng một trị số của biến độc lập.
− Phép dịch
Nếu dịch phải n
0
mẫu, x(n) trở thành y(n)
y(n)=x(n-n
0
)
− Phép trễ 1 mẫu
Một tín hiệu rời rạc bất kỳ x(n) luôn có thể được biểu diễn như sau:
4. Hệ thống rời rạc.
− Tín hiệu vào của hệ thống gọi là tác động
− Tín hiệu ra được gọi là đáp ứng
− Toán tử T: Một hệ thống tuyến tính đặc trưng bởi toán tử T làm nhiệm vụ biến
đổi tín hiệu vào thành tín hiệu ra.
5. Hệ thống tuyến tính
− Đối với các hệ thống tuyến tính toán tử T phải tuân theo nguyên lý xếp chồng,
tức là:
− Đáp ứng xung của HTTT

+ Ta có tín hiệu đầu vào là:
+ Thực hiện biến đổi theo toán tử T ta xác định y(n)
5

=−∞
= δ −

k
x(n) x(k) (n k)

=−∞
= δ −

k
x(n) x(k) (n k)
+ Đặt
+ Ta có:
+ h
k
(n) được gọi là đáp ứng xung. Đáp ứng xung đặc trưng hoàn toàn cho hệ
thống.
* Hệ thống tuyến tính bất biến
Nếu ta có y(n) là đáp ứng với tác động x(n) thì hệ thống được gọi là bất biến
nếu y(n-k) là đáp ứng ứng với tác động x(n-k).
6. Phép tổng chập.
6.1/ Khái quát
− Nếu hệ bất biến theo thời gian
• Tác động d(n) cho đáp ứng h(n)
• Tác động d(n-k) cho đáp ứng h(n-k)
− Với hệ tuyến tính bất biến (TTBB):

h(n) là đáp ứng xung của hệ
*: Phép tổng chập
6.2/ Phương pháp tính tổng chập
a) Tính trực tiếp: Tìm từng giá trị y(n) ứng với từng giá trị cụ thể của n.
Với n = 2 cũng tính tương tự. Tương tự với n <0
Tập hợp các giá trị tìm được ta có kết quả của phép chập y(n) cần tìm.
b) Tính phép tổng chập bằng đồ thị
+ B1: Đổi biến n thành biến k, cố định x(k).
+ B2: Quay h(k) đối xứng qua trục tung để thu được h(-k).
+ B3: Dịch chuyển h(-k) theo từng giá trị n, nếu n > 0 dịch chuyển về bên phải,
nếu n<0 dịch về bên trái ta thu được h(n-k).
6
= δ −
k
h (n) T[ (n k)]

=−∞
= −

k
y(n) x(k) h(n k)
=y(n) x(n)*h(n)

=−∞
= −

k
y(n) x(k) h(n k)
+ B4: Thực hiện phép nhân x(k).h(n-k) theo từng mẫu với tất cả các giá trị của k.
+ B5: Cộng các giá trị thu được ta có một giá trị của y(n). Tổng hợp các kết quả ta

có tín hiệu y(n).
6.3/ Các tính chất của phép chập
− Tính chất giao hoán:
y(n)=x(n)*h(n)=h(n)*x(n)
Trong một hệ thống, ta có thể hoán vị đầu vào x(n) và đáp ứng xung h(n)
cho nhau thì đáp ứng đầu ra y(n) không thay đổi.
− Tính chất kết hợp:
y(n) = x(n)*[h
1
(n)*h
2
(n)]=[x(n)*h
1
(n)]*h
2
(n)
Nếu ta có hai hệ thống ghép nối tiếp với nhau thì đáp ứng xung của hệ thống
tổng quát sẽ là tích chập của đáp ứng xung của các hệ thống thành phần.
− Tính phân phối:
x(n)*(h
1
(n)+h
2
(n))=x(n)*h
1
(n)+ x(n)*h
2
(n)
Nếu ta có hai hệ thống ghép song song với nhau thì đáp ứng xung của hệ
thống tổng quát sẽ là tổng đáp ứng xung của các hệ thống thành phần.

II. Chương trình.
Dựa vào một số lý thuyết đã trình bày ở trên chúng em đã xây dựng chương
trình tính tổng chập dựa trên ngôn ngữ java như sau:
1. Chương trình tính tổng chập theo công thức.
* Phần code tính tổng chập theo công thức (sử dụng ngôn ngữ java)
//Tính tong chap theo cong thuc
import fita.ncthang.console.cin;
public class xlthso
{
public static void main(String[]args)
{
int m,n,i,j,k;
float a,b,c,d;
char kt1,kt2;
float[] x,h,y,x1,h1;
System.out.println("\tNhap tin hieu dau vao x(n)");
System.out.print("Nhap vao khoang gioi han k:(a<=k<=b): ");
a=cin.getFloat();
kt1=cin.getChar();
b=cin.getFloat();
m=(int)(b-a+1);
7
x=new float[m];
System.out.println("Nhap he so tin hieu dau vao:");
for(i=0;i<m;i++)
{
System.out.printf("\tx(%2.0f)= ",i+a);
x[i]=cin.getFloat();
}
System.out.println("\tNhap dap ung xung h(n)");

System.out.print("Nhap vao khoang gioi han k:(a<=k<=b): ");
c=cin.getFloat();
kt2=cin.getChar();
d=cin.getFloat();
n=(int)(d-c+1);
h=new float[n];
System.out.println("Nhap he so dap ung xung:");
for(i=0;i<n;i++)
{
System.out.printf("\th(%2.0f)= ",i+c);
h[i]=cin.getFloat();
}
//Ham trung gian
x1=new float[m+n-1];
for(i=0;i<m+n-1;i++)
if(i<m) x1[i]=x[i];
else x1[i]=0;
h1=new float[m+n-1];
for(i=0;i<m+n-1;i++)
if(i<n) h1[i]=h[i];
else h1[i]=0;
// Tinh he so tin hieu ra y(n)
y=new float[m+n-1];
for(k=0;k<m+n-1;k++)
for(i=0,j=k;i<=k&&j>=0;i++,j )
{
y[k]=y[k]+x1[i]*h1[j];
}
8
// Dua ra cac tin hieu

System.out.println("\n\tDua ra cac tin hieu");
// Tin hieu dau vao
System.out.println("Tin hieu dau vao x(n) la: ");
for(k=0;k<m;k++)
{
if(x[k]!=0)
if(k+a<0) System.out.printf("%6.2f$(n+%2.0f)",x[k],-(k+a));
else
if(k+a==0) System.out.printf("%6.2f$(n)",Math.abs(x[k]));
else System.out.printf("%6.2f$(n%3.0f)",Math.abs(x[k]),-(k+a));
if(k==m-1) System.out.println(".");
else
{
if(x[k+1]>0) System.out.print(" + ");
if(x[k+1]<0) System.out.print(" - ");
}
}
// Dap ung xung
System.out.println("Dap ung xung h(n) la: ");
for(k=0;k<n;k++)
{
if(h[k]!=0)
if(k+c<0) System.out.printf("%6.2f$(n+%2.0f)",h[k],-(k+c));
else
if(k+c==0) System.out.printf("%6.2f$(n)",Math.abs(h[k]));
else System.out.printf("%6.2f$(n%3.0f)",Math.abs(h[k]),-(k+c));
if(k==n-1) System.out.println(".");
else
{
if(h[k+1]>0) System.out.print(" + ");

if(h[k+1]<0) System.out.print(" - ");
}
}
// Dua ra tin hieu ra
System.out.println("Tin hieu dau ra y(n) la: ");
9
for(k=0;k<m+n-1;k++)
{
if(y[k]!=0)
if(k+a+c<0) System.out.printf("%6.2f$(n+%2.0f)",y[k],-(k+a+c));
else
if(k+a+c==0) System.out.printf("%6.2f$(n)",Math.abs(y[k]));
else System.out.printf("%6.2f$(n%3.0f)",Math.abs(y[k]),-(k+a+c));
if(k==m+n-2) System.out.println(".");
else
{
if(y[k+1]>0) System.out.print(" + ");
if(y[k+1]<0) System.out.print(" - ");
}
}
}
}
VD 1:
x(n) = δ(n) + δ(n-1)
h(n) = -δ(n+1) + δ(n) + 2δ(n-1)
y(n) =
= x(-1)h(n+1) + x(0)h(n) + x(1)h(n-1)
= - h(n+1) + h(n) + 2h(n-1)
= - [δ(n+1) + δ(n)] + [δ(n) + δ(n-1)] + 2[δ(n-1) + δ(n-2)]
=- δ(n+1) + 3δ(n-1) + 2δ(n-2)

* Chương trình chạy:
Do mọi tín hiệu đều có thể biểu diễn dưới dạng:
Nên khi chạy chương trình cần nhập vào giá trị cho từng x(k) và h(k) cụ thể.
Chương trình sẽ thực hiện tính toán và đưa ra kết quả cụ thể như sau:
10

=−∞
= δ −

k
x(n) x(k) (n k)
2. Chương trình minh họa tính tổng chập bằng đồ thị.
Demo Chương trình tính tổng chập của hai dãy hữu hạn.
% Tinh toan va ve tich chap cua 2 day co chieu dai huu han
% Nhap cac day tu ban phim
x=input('Nhap day kich thich x=');
h=input('Nhap dap ung xung cua he thong h=');
y=conv(x,h);
nx=length(x); %chieu dai cua day x
nh=length(h); %Chieu dai cua day h
ny=nx+nh-1; %Chieu dai cua day y
disp(y);
n=0:ny-1;
subplot(2,1,1);
stem(n,y);
xlabel('Thoi gian roi rac n');
ylabel('Bien do');
title('tich chap cua 2 day co chieu dai huu han');
11
VD2: Cho dãy số x(n)= δ(n) + δ(n-1) + δ(n-2)

h(n)=δ(n) - δ(n-1)
tổng chập y(n)=x(n) * h(n) = δ(n) - δ(n-3)
Chú ý: Khi nhập ta phải nhập các phần tử x(n) dưới dạng [ 1 1 1] và h(n) là [1 -1]
12
13

×