ĐẠ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ị NHÓM SV THỰC HIỆN: Nhóm 2 Ng
Trang 1
ĐẠ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ị
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
Trang 2I/ 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ố
3 Tín hiệu rời rạc
Trang 33.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) = an
Tín hiệu tuần hoàn
x(n)=x(n+N), N>0: chu kỳ
n
N n N BT n
x
0 )
1 n 0 (n)
0 n 0
1 n 0
u(n)
0 n<0
Trang 4x(n) = Sin[(2/n)(n+no)]
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ố
Trang 5Tí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 n0 mẫu, x(n) trở thành y(n)
y(n)=x(n-n0)
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)
k x(n) x(k) (n k)
k
x(n) x(k) (n k)
Trang 6+ Đặt
+ Ta có:
+ hk(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)
k
h (n) T[ (n k)]
k
y(n) x(n)*h(n)
k
Trang 7+ 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)*[h1(n)*h2(n)]=[x(n)*h1(n)]*h2(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)*(h1(n)+h2(n))=x(n)*h1(n)+ x(n)*h2(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);
Trang 8x=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];
}
Trang 9// Dua ra cac tin
System.out.println("\n\tDua ra cac tin hieu");
// -Tin hieu dau
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
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
System.out.println("Tin hieu dau ra y(n) la: ");
Trang 10for(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:
k
x(n) x(k) (n k)
Trang 112 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');
Trang 12VD2: 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]