Báo cáo thực tập xử lý số tín hiệu (DSP: Digital Signal Processing )
Trang 1LỜI NÓI ĐẦU
Xử lý tín hiệu số (DSP: Digital Signal Processing ) là môn học đề cập đến phép xử lý các dãy số để có được các thông tin cần thiết như phân tích, tổng hợp mã hóa, biến đổi tín hiệu sang dạng mới phù hợp với hệ thống So với xử lý tín hiệu tương tự, xử lý số tín hiệu có nhiều ưu điểm như :
- Độ chính xác cao, sao chép trung thực, tin cậy
- Tính bền vững : Không chịu nhiều ảnh hưởng của nhiệt độ hay thời gian
- Linh hoạt và mềm dẻo : Thay đổi phần mềm có thể thay đổi tính năng của phần cứng
- Thời gian thiết kế nhanh, ngày càng hoàn thiện và có độ tích hợp cao
Trong môn học Xử lý số tín hiệu do chúng em được thực tập và học
lý thuyết về môn này nên chúng em nắm được những kiến thức cơ bản về xử
lý số tín hiệu, các phép toán về xử lý tín hiệu, trên cơ sở đó sinh viên có thể
tự mình sử dụng được các chương trình MATLAB và tự tham khảo được các tài liệu liên quan Mặc dù đã cố gắng rất nhiều song do hiểu biết và kiến thức còn hạn chế, kinh nghiệm thực tế còn ít và trong quá trình làm thực tập
và sử dụng chương trình em không thể tránh khỏi những sai xót Mong nhận được sự chỉ dẫn của thầy cô giáo và đóng góp ý kiến của các bạn để em rút kinh nghiệm trong những đợt thực tập sau
Khóa thực tập này hoàn thành không những giúp em có thêm kiến thức hơn về môn học này mà còn giúp em có một phương pháp làm việc mới, chủđộng hơn, linh hoạt hơn và đặc biệt hơn là phương pháp làm việc mới Quá trình làm bài báo cáo này là một khoảng thời gian thực sự có ích cho bản thân em về nhiều mặt
Em xin chân thành cảm ơn thầy Nguyễn Hữu Khánh đã hướng dẫn cho em thực tập bộ môn thực tập xử lý số tín hiệu
Trang 2Giới thiệu chung
- Lượng tử hóa là quá trình biến một tín hiệu có giá trị liên tục thànhtín hiệu có giá trị rời rạc
II Biến đổi tín hiệu Analog & Digital :
- Nếu để tín hiệu đó ở dạng liên tục, khi muốn truyền tín hiệu đi thì
sẽ phải làm với 1 số lượng lớn các mẫu Trong khi đó nếu chuyển sang dạng rời rạc rồi truyền đi thì ta chỉ cần truyền đi với 1 số lượng nhỏ các mẫu mà vẫn đảm bảo đầy đủ thông tin về tín
hiệu.Như vậy tín hiệu số dễ truyền phát và các thiết bị số thường gọn nhẹ dễ chế tạo.Trong thực tế ta gặp rất nhiều trường hợp chuyển qua lại giữa tín hiệu tượng tự (Analog) và tín hiệu số (Digital)
Trang 3
Hình 1
- Phần trên là tín hiệu Analog (có dạng sóng hình sin), là 1 miền liêntục, có rất rất nhiều giá trị (trục thẳng đứng là biên độ tín hiệu, vì làliên tục nên có vô số giá trị)
- Phần dưới là tín hiệu Digital (có dạng các xung vuông) chỉ có 2 giátrị : 0 và 1
- Quá trình biến một tín hiệu sang số và ngược lại bao gồm các quá trình : Lấy mẫu(SAMPLING),Lượng tử hóa (Quantize), Mã hoá, Giải mã
- Với mục đích chuyển đổi tín hiệu tương tự của thế giới thực sang tín hiệu số người ta dùng mạch điện gọi là ADC (Analog-to-
Digital Converter) Ðể chuyển đổi ngược lại ta dùng mạch DAC (Digital -to- Analog Converter)
III Ý nghĩa thực tiễn :
Một số ứng dụng :
- Quá trình ghi và đọc đĩa CD.Trong quá trình ghi đĩa CD, luồng tín hiệu dạng số được đưa vào đầu vào của tia lazer (chuỗi các bít 1 và 0,, ví dụ như là 100110111010 ….),gặp bít 0 thì tia lazer bắn 1 lỗ vào
bề mặt của đĩa, còn bít 1 thì không bắn
Khi đọc đĩa CD thì quá trình ngược lại, mắt thần (len) của đầu đọc đĩa sẽ phát ra tia lazer chiều vào mặt đĩa CD Khi gặp lỗ trên mặt CD,tia lazer không bị phản xạ lại, đầu đọc hiểu đó là bít 0 Chỗ nào còn nguyên (không bị lỗ), tia lazer bị phản xạ ngược lại, mắt thần nhận được tia phản xạ đó, đầu đọc đĩa hiểu đó là bít 1
Rõ ràng, với hệ thống tương tự, các máy móc phải được thiết kế để phân biệt rất nhiều mức tín hiệu Trong khi đó, với hệ thống số, máy móc chỉ cần phân biệt 2 mức Với 2 mức là rất dễ chế tạo
- Khi chúng ta quét một bức ảnh bằng máy quét thì máy quét thực hiệnvới ADC để chuyển những thông tin tương tự được cung cấp bởi bức ảnh thành những thông tin ở dạng số và truyền những thông tin đó vào PC
- Khi ghi giọng nói hoặc sử dụng giải pháp VoIP , chúng ta đang sử dụng ADC để chuyển giọng nói thực ở dạng tương tự sang những thông tin ở dạng số để truyền đi
Trang 4- Những thông tin dạng số không chỉ giới hạn bên trong máy vi tính
mà còn thâm nhập vào tận mọi ngõ nghách trong cuộc sống hàng ngày của chúng ta Khi ghi âm thanh vào đĩa CD trong các Studio thì ADC chuyển đổi âm thanh thành dạng số và ghi vào đĩa CD
- Bất kì lúc nào chúng ta cũng cần phải chuyển đổi lại thành dạngtín hiệu tương tự , mạch điện này gọi là DAC (Digital-to-
Analog Converter ) Khi chúng ta nghe nhạc bằng Audio CD thì CD Player sẽ đọc những thông tin số trên đĩa CD thông qua mạch DAC để chuyển sang tín hiệu ở dạng tương tự để tai chúng ta có thể nghe được
- Như vậy tại sao chúng ta lại cần tín hiệu ở dạng số Một
nguyên nhân được ưu tiên hàng đầu để sử dụng tín hiệu số thay
thế tín hiệu tương tự chính là nhiễu
- Trong tín hiệu tương tự thì nhiễu chính là một phần trong nó
Ví dụ khi dùng thiết bị ghi âm băng từ , chúng ta có thể nghe thấy bất cứ những thứ gì âm thanh ở dạng tương tự mà không phân biệt được đâu là âm thanh thực sự cần ghi hay là nhiễu do bụi bẩn , do hỏng hóc
- Trong hệ thống số chỉ có thể hiểu hai số : 0 hoặc 1 , ngoài ra mọi thứ khác đều bị loại bỏ Đó là tại sao chúng ta không nghe thấy những nhiễu không mong muốn khi nghe Audio CD thậm trí chúng ta đã nghe trước đó hàng ngàn lần
- Một điều thuận lợi của hệ thống số ở chỗ khả năng nén dữ liệu Những tín hiệu ở dạng số có thể dược nén như chúng ta có thể hiểu dùng WinZip để nén file mục đích làm cho khích thước của nó giảm đi để tiết kiệm khoảng không lưu trữ hoặc tiết kiệmgiải thông
Trang 5+ Tìm hiểu rõ hơn tính năng cần thiết phải có công cụ này
+ Rèn luyện tinh thần tự chủ, tự giác và tinh thần trách nhiệm trongcông việc
II Nhiệm vụ của sinh viên:
- Tiếp cận và sử dụng thành thạo phần mềm phục vụ cho quá trình thực tập
- Cần nắm bắt rõ các vấn đề có liên quan đã biết để vận dụng chúng vào thực tập một cách tốt nhất
- Sinh viên cần xem lại bài và chuẩn bị bài trước khi đi thực tập
- Nghiêm chỉnh chấp hành các nội quy cũng như những quy định của phòng thực tập và các quy định mà thầy cô hướng dẫn thực tập
đề ra
III Thực hành:
A Giới thiệu về phần mềm MALAB:
- Là một công cụ tính toán toán học
- Dùng để vẽ đồ thị theo nhiều cách khác nhau
- Là một ngôn ngữ lập trình
- Làm việc với tập dữ liệu đặc biệt: ma trận, vector, hình ảnh
- Cách khởi động và thoát :
+ Double click vào biểu tượng của Matlab
+ Thoát khỏi Matlab sử dụng lệnh exit hoặc quit
- Đặc điểm:
+ Cửa sổ lệnh (Command Window) xuất hiện
+ >>: Dấu nhắc của chương trình Matlab
+ Kết quả trong Matlab được đưa ra trực tiếp trên màn hìnhlệnh hoặc tạo ra một cửa sổ hình
Trang 6có thể tạo thực thi và lưu một dãy các lệnh để máy tính có thể chạy tựđộng Cuối cùng, MATLAB cũng có thể được coi như là một ngôn ngữlập trình, là một môi trường dung để lập trình hay tính toán MATLABđược thiết kế để làm việc với những tập dữ liệu đặc biệt chẳng hạn như
ma trận, vector, hình ảnh
Trong khi chạy chương trình MATLAB, tùy theo yêu cầu của người
sử dụng,MATLAB sẽ tạo ra một hoặc nhiều cửa sổ trên màn hình Cửa
sổ quan trọng nhất là cửa sổ lệnh(Command Window), đây là nơi chúng
ta giao tiếp (tương tác) với MATLAB và cũng là nơi chúng ta nhập vàocác lệnh và MATLAB sẽ cho ra kết quả Dấu >> là dấu nhắc của chươngtrình MATLAB Khi MATLAB hoạt động con trỏ chuột sẽ xuất hiện saudấu nhắc, lúc này MATLAB đang chờ người sử dụng nhập lệnh vào Sau
khi nhập lệnh và nhấn Enter, MATLAB đáp ứng lại bằng cách in ra các
dòng kết quả trong cửa sổ hình (Figure Window) Để thoát khỏi chương
trình MATLAB chúng ta sử dụng lệnh exit hoặc quit.
II MỤC ĐÍCH.
Giúp sinh viên làm quen với Matlap thông qua các chương trình thựchiện các phép tính cơ bản như cộng, trừ, nhân, chia.Biết cách sử dụng cáchàm vẽ đồ thị trong không gian 2D và 3D
III THỰC HÀNH:
1 Mở một hàm m-file và thực hiện các yêu cầu.
a.Các lệnh thực hiện các phép toán với ma trận.
Trong Matlap, tất cả các đối tượng đều được xem là một ma trận hay cònđược gọi là một mảng Một chữ số được xem như là một ma trận 1×1 và ma trậnchr có một hàng hay một cột được gọi là một vector
Trang 7Vector hàng và vector cột là những trường họp đặc biệt của ma trận Ma trậnn×m là một mảng gồm có n hàng và m cột Định nghĩa một ma trận trong Matlaptương tự như định nghĩa một vector Các thành phần của hàng được phân biệt vóinhau bởi dấu “,” hoặc khoảng trống, còn các hàng được phân biệt với nhau bỏidấu “;”.
Các lệnh được sử dụng khi thao tac trên ma trận được cho trong bảng sau:
n=rank(A) Sô chiều của ma trận A
x=det(A) Định thức của ma trận A
x=size(A) Kích thước của ma tận A
x=trace(A) Tổng các thành phần trên đường chéo của A
x=norm(v) Chiều dài Euclide của vector v
C=A.*B Tích từng phần tương ứng của hai ma trận
C=A.^k Lũy thùa từng thành phần của ma trận
C=A./B Chia từng thành phần tương ứng của hai ma trận
C=inv(A) Nghịch đảo của ma trận A
x=linspace(a,b,n) Vector x có n thành phần phân bố đều trong khoảng
X=triu(A) Trích ma trận tam giác trên
A=rand(n,m) Ma trận A với các thành phần là phân bố đồng nhất
giũa (0,1)
Trang 8v=max(A) Nếu A là một vector thì v là giá trị lón nhất của A
Nếu A là ma trận thì v là một vector với các thành phần làgiá trị lớn nhất trên mỗi cột của A
v=min(A) Như trên với giá trị nhỏ nhất
b Viết chương trình thực hiện các lệnh sau:
Tạo hai ma trận có chiều dài n×m
Cộng, trừ, nhân, chia hai ma trận vừa tạo ( đưa ra kết quả)
Trích ra đường chéo của hai ma trận ban đầu Sau đó ghép lại thành một matrận mới
Trích hai dòng đầu của ma trận 1 và hai dòng cuối của ma trận thứ hai Sau
đó ghép chúng lại thành một ma trận mới
Trích cột cuối của ma trận thứ nhất và cột đầu của ma trận thứ hai Sau đóghép với ma trận 1 để tạo ra một ma trận mới
Chương trình:
A=[1 3 5;2 4 6;5 7 9] %tao ma tran A co chieu dai 3x3
B=[4 5 2;6 9 3;8 6 9] %tao ma tran B co chieu dai 3x3
C=A+B %tong hai ma tran A va B
C=A-B %hieu hai ma tran A va B
C=A*B %tich hai ma tran A va B
C=A/B %hieu hai ma tran A va B
D=diag(A) %trich ra duong cheo cua ma tran A
E=diag(B) %trich ra duong cheo cua ma tran B
F=[D E] %ghep hai duong cheo vua trich thanh ma tran moi
D=A(1:2,:) %trich ra hai dong dau cua ma tran A
E=B(2:3,:) %trich ra hai dong cuoi cua ma tran B
F=[D;E] %ghep hai ma tran con vua trich thanh ma tran moi
D=A(:,3) %trich ra cot cuoi cua ma tran A
E=B(:,1) %trich ra cot dau cua ma tran B
F=[A D E] %ghep hai cot vua trich voi ma tran A
Kết quả chương trình khi thực hiện các dòng lệnh trên:
Ma trận A:
A =
1 3 5
2 4 6
Trang 9Ma trận D và E lần lượt là ma trận đường chéo của ma trận A và B
D =
1 4 9
E =
4 9
Trang 10E =
4 6 8
Ma trận F: ghép hai cột vừa trích (D và E) với ma trận A
F =
1 3 5 5 4
2 4 6 6 6
5 7 9 9 8Nhận xét:
Trang 11- Các toán tử sử dụng trong chương tình đều là những toán tử thông dụng(+, -, *, /)
- Thao tác thực hiện dể dàng
2 Đồ họa.
Matlap có thể được sủ dụng để thể hiện các kết quả dưới dạng đồ thị, mỗibiến sẽ chứa tất cả các giá trị của một đối số trong lệnh vẽ đồ thị
Những đồ thị đơn giản: Với lệnh plot chung ta dễ dàng vẽ được những đồ thị
đơn giản cho vector y, lệnh plot(y) sẽ xác định những điểm [ 1,y(1)], [2,y(2)],[3,y(3)],…,[n,y(n)] và nôi các điểm nàylaij bằng nhũng đường thẳng Lệnhplot(x,y) thực hiện một công việc tương tự như vậy với những điểm [x(1),y(1)],[x(2),y(2)],…,[x(n),y(n)]
Những lệnh loglog, semilogx, và semilogy có chức năng tương tự như lệnh plot, ngoại trừ một hoặc hai trục đồ thị của chunga được xác định theo logarithm.
Để vẽ hai đồ thị trên hai cửa sổ khác nhau, ta sử dụng lệnh figure để tạo ra
một cửa sổ mới trước khi thực hiện lệnh vẽ dồ thị thứ hai Chúng ta cũng có thể
chuyển đến các cửa sổ khác nhau bằng lệnh figure(n), lệnh này sẽ đưa cửa sổ No.n lên trên màn hình.
Lệnh plot mặc định sẽ vẽ đồ thị bằng những đường nét liền màu đen Ta cóthể thay đổi kiểu cũng như màu sắc của nét vẻ
Tiêu đề của đồ thị, đường kể và nhãn cho các trục được xác định bởi các lệnh:
title, grid (loại bỏ đường kẻ bằng lệnh gridd off), xlabel, ylabel.
Một số hàm đươc sử dụng trong vẽ đồ thị:
+ Hàm hold on dùng để vẽ nhiều đồ thị trong cùng một cửa sổ hình, sau lệnh này tất cả các đồ thị sẽ được vẽ lên cùng một cửa sổ cho đến khi có lệnh hold off
+ Để xác định cụ thể chiều dài của mỗi trục ta sử dụng lệnh
axis([a,b,c,d]): a và b là giá trị nhỏ nhất và lớn nhất của trục hoành, c và d là
giá trị lớn nhất của trục tung
Trang 12+ Để tạo ra nhiều cửa sổ con trong cùng một cửa sổ ta sử dụng lệnh
subplot(x,y,z): cửa sổ được chia ra làm x hàng, y cột, đồ thị của hàm nằm ở ô
thứ z
Các thuộc tính khác của đồ thị 2D: Matlap có một số hàm được thiết kế đặc biệt
để sử dụng vói những hình 2D ví dụ như các hàm: fill, polar, bar, barh, pie, hist, errorbar hay stem.
Đồ thị 3D: lệnh plot3 được sử dụng để vẽ đồ thị 3D, lệnh này tương đương với lệnh plot trong 2D.
Bề mặt đồ thị được tạo nên nhờ hàm meshgrid.
Lệnh close all được sử dụng để đonga tất cả các cửa sổ hình, để đóng từngcửa sổ ta dùng lệnh close
Trong không gian 2D.
Mở một hàm m-file và vé đồ thị của các hàm sau ( vẽ trên cùng một cửa sổ).f(x)=-x.sin(x) % hàm f(x)
f’(x)=-xcosx-sinx % đạo hàm của f(x)
fy=-x.*cos(x)-sin(x); %Dao ham cua f(x)
f12=diff(fx/x(2)-x(1)); %Dao ham xap xi
f22=(f12-fy(1:999))/norm(f12); %Sai so lien quan
plot(x,fy) %Ve ham f(y) la dao ham cua f(x)
title('dao ham cua f(x)');
grid;
subplot(2,2,3);
plot(x(1:999),f12) %Ve hàm f12 là hàm dao ham xap xi
title('dao ham xap xi');
grid;
subplot(2,2,4);
plot(x(1:999),f22) %Ve ham sai so lien quan f22
title('sai so len quan');
Trang 13
Trong không gian 3D.
Mở một hàm m-file và vẽ đồ thị của các hàm sau (vẽ trên từng cửa sổ)
a) z1=f(x,y)=sinx.siny, với x,y=[0,]
Chương trình:
x=linspace(0,pi,100);%x xac dinh trong khoang [0,pi],so diem can lay la 100
y=linspace(0,pi,100);%y xac dinh trong khoang [0,pi],so diem can lay la 100
[x,y]=meshgrid(x,y); %tao be mat cho do thi
z=sin(x).*sin(y); %ham z=f(x,y)
plot3(x,y,z) %ve ham z trong khong gian 3D
Trang 14
Đồ thị của hàm có dạng như sau:
b) z2=f(x,y)=x-x3+y2+1, vois x,y=[-3,3]
Đồ thị của hàm có dạng như sau:
Trang 15c) z3=f(x,y)= , với x,y=[-8,8].
Chương trình:
x=-8:0.5:8; %x lay tu 0 den 10, buoc nhay la 0.5
y=-8:0.5:8; %x lay tu 0 den 10, buoc nhay la 0.5
[x,y]=meshgrid(x,y);
z=sin(sqrt(x.^2+y.^2))./sqrt((x.^2+y.^2).*x);
mesh(x,y,z)
grid;
Đồ thị của hàm có dạng như sau:
- Từ các chương trình trên ta thấy về hình thức các lệnh sử dụng tronghàm 3D giống với 2D, tuy nhiên với việc sử dụng hàm plot3 tronghàm 3D nó sẽ mở rộng thêm cho một trục tọa độ thứ 3 Trong khônggian 2D ta có thể chỉ định màu và kiểu đường của nét vẻ thì trong
không gian 3D màu sắc của đồ thị được thực hiện bởi lệnh mesh thay cho lệnh plot3.
Nhận xét chung: Qua bài thực hành trên giúp ta làm quen với MATLAB.
Qua đó cho ta thấy chương trình MATLAB là một chương trình rất có ích vàtiện dụng khi giải quyết những bài toán trong xử lý số tín hiệu
Trang 16BÀI 2:MÔ PHỎNG VÀ TẠO TÍN HIỆU
I.Tóm tắt lý thuyết:
Một tín hiệu thời gian rời rạc được biểu diễn như một dãy số hay còn gọi
là một dãy mẫu, được ký hiệu là {x[n]}; trong đó đối số là những số nguyênchạy từ - đến +, đặc trưng cho thời gian Giá trị của dãy mẫu tại thờiđiểm n là x[n] Vì thế, để tiện lợi, tín hiệu thời gian rời rạc bất kỳ thườngđược ký hiệu là x[n]
Tín hiệu thời gian rời rạc có thể là một dãy mẫu có chiều dài vô hạnhoặc hữu hạn Dãy có chiều dài hữu hạn là dãy có giá trị khác khôngtrong một khoảng thời gian hữu hạn tù thời điểm N1 đến N2
N1 n N2 Với N2 N1 Dãy có chiều dài N= N2 - N1 + 1mẫu
Dãy thỏa mãn điều kiện: x[n]=x[n+kN] được gọi là dãy tuần hoànvới chu kì cơ bản N là một số nguyên dương và k là một số bất kỳ
Năng lượng của dãy x[n] được xác định bằng công thức:
Năng lượng của dãy trong một khoảng xác định từ -K≤n≤K được xácđịnh bằng biểu thức:
ε =Công suất trung bình của một dãy không tuần hoàn x[n] được xác địnhbằng công thức
Công suất trung bình của một dãy không tuần hoàn x[n] được chobởi công thức:
Dãy xung đơn vị được ký hiệu bằng δ[n] và được xác định từ biểuthức:
Dãy nhảy bậc đơn vị ký hiệu u[n] được xác định từ biểu thức:
Dãy sine phức được biểu thị bằng hệ thức: x[n]=|A||α| e
Dãy sine thực có biên độ là hằng số được biểu thị bằng:
Trang 17Trong đĩ A, là những số thực được gọi là biên độ và tần số gĩc
và pha ban đầu của dãy hàm số sine x[n],cịn là tần số
Dãy sin phức và dãy sine thực là những dãy tuần hồn với chu kỳ Nnếu:
Trong đĩ N là số nguyên dương cịn r là một số bất kỳ Giá trị N nhởnhất thỏa mãn điều kiện như trên là chu kỳ cơ bản của dãy x[n] đĩ
Tích hai dãy dữ liệu x[n] và h[n] cĩ cùng chiều dài n sẽ thu được dãy
dữ liệu y[n] cĩ cùng chiều dài N và được thực hiện bằng hệ thức:
y[n]=x[n].h[n]
Cộng hai dãy dữ liệu x[n]với h[n] cĩ cùng chiều dài N sẽ thu được dữliệu y[n] cĩ cùng chiều dài N và được thực hiện bởi hệ thức : y[n]=x[n]+h[n]
Nhân dãy x[n] với hằng số a được thực hiện bởi hệ thức: y[n]=ax[n]
Ngược thời gian hay cịn gọi là đổi chiều tín hiệu của một dãy cĩchiều dài vơ hạn và được thực hiện nhờ biểu thức: y[n]=x[-n]
Làm trễ dãy x[n] cĩ chiều dài vơ hạn và được thực hiện nhờ biểu thức:y[n]=x[n-M] Trong đĩ m là số nguyên dương Dây cũng chính làphép dịch chuyển dãy x[n] về phía phải trục thời gian M mẫu và được
ký hiệu là Trong trường hợp M=1 thì được gọi là trễ đơn vị và kýhiệu Nếu M lấy dáu âm thì được gọi là sớm, tương đương với việcdich dãy về phía trái M mẫu trên trục thời gian
II.MỤC ĐÍCH :
Qua bài thực hành giúp sinh viên mơ phỏng và tạo được các tín hiệu,hiểu được các tín hiệu như dãy xung nhảy bậc đơn vị,xung đơn vị,dãy sinethực sine phức
III.THỰC HÀNH :
1 Dãy xung đơn vị
a)Tạo dãy xung đơn vị cĩ chiều dài N mẫu
N=10;
x=[1 zeros(1,N-1)];
stem(x)
+Hoạt động của chương trình:
Đầu tiên khai báo một dãy xung có N=10 mẫu Dòng tiếp theo sẽ khởi tạo một ma trận 1x10 Phần tử thứ nhất của ma trận có biên độ bằng 1, các
phần tử còn lại bằng 0 Lệnh stem(x[n]) cho phép
Trang 18vẽ đồ thị với dạng đường lấy mẫu của dãy xung đơn vị trên.
Kết quả chạy trong chương trình:
Nhận xét: Theo lý thuyết [n]=1 khi n=0 và [n]=0 với các giá trị cịn
lại Dựa vào đồ thị ta thấy rằng khi n=1 thì [n]=1 và bằng khơng với cácgiá trị khác Điều này trái với lí thuyết, lí do là khi N=10 mẫu sẽ đếm từ 0
9 nhưng chương trình Matlab đếm từ 1 10 nên tại thời điểm x(0)=1 kết quả
ta thu được cĩ sự sai khác so với lý thuyết Do đĩ thì kết quả này hồn tồnphù hợp kết quả thu được được nghiệm đúng Hạn chế của đoạn chươngtrình này là chỉ biểu diễn một hàm dãy xung đơn vị cĩ chiều dài giới hạnn=[0:9] Vậy kết quả chỉ đúng trong phạm vi nhất định
b Tạo dãy xung đơn vị [n] cĩ chiều dài N bị trễ mẫu (M<N)
N=10;
M=4;
x=[zeros(1,M) 1 zeros(1,N-M-1)];
stem(x)
+ Mô tả hoạt động của chương trình trên:
Đầu tiên ta khai báo số lượng mẫu của dãy xungđơn vị N=10 và số lượng mấu lấy trễ M=4 Tiếp theo
Trang 19ta khởi tạo một ma trận x có 1 hàng với các phầntử từ 1 M có giá trị bằng 0 Phần tử tiếp theo sauđó có giá trị bằng 1 Các phần tử tiếp theo chođến phần tử N-M-1 có giá trị bằng 0 Lệnhstem(x[n]) cho phép vẽ đồ thị với dạng đường lấymẫu của dãy xung đơn vị trên.
Kết quả chạy chương trình:
từ 1 4 thì x[n]=0, đến khi n=5 thì x[n] bằng 1, cácphần tử còn lại có giá trị bằng 0 Ta thấy do chươngtrình phiên dịch tuần tự trước sau nên hàm zeros(1,M-1) lấygiá trị đầu tiên khi n=6 ( kế tiếp n=5 cĩ x[n]=1) Kết quả thuđược là dãy xung đơn vị bị trễ 4 mẫu so với d xung đơn vị banđầu.Vậy kết quả thu được hợp với lí thuyết
c) Tạo dãy nhảy bậc đơn vị u[n] dài N mẫu
N=10;
u=[ones(1,N)];
stem(u)
+ Mơ tả hoạt động của chương trình trên:
Đầu tiên ta khai báo số lượng mẫu của dãy xung N=10 Sau đĩ ta khởi tạo
ma trận u cĩ một hang với các phần tử từ 1 N cĩ giá trị bằng 1, các phần tử
cĩ N<0 cĩ giá trị bằng 0 Lệnh stem(u) cho phép vẽ đồ thị với dạng đườnglấy mẫu của dãy xung đơn vị trên
Kết quả chạy đoạn chương trình trên:
Trang 20Nhận xét: Kết quả thu được từ đồ thị ta thấy rằng khi N nằm trong khoảng
từ 1 đên 10 thì u[n]=1 Khi ta dùng hàm axis([0 1 -20 20]) ta sẽ thấy rõ hơncác giá trị ngoài [1;10] sẽ bằng 0 Vậy kết quả thu được là dãy nhảy bậc đơnvị
d.Tạo dãy nhảy bậc đơn vị u[n] dài N mẫu bị trễ M mẫu (M<N)
N=10;
M=4;
u=[zeros(1,M) ones(1,N-M)];
stem(u)
+ Mô tả hoạt động của chương trình trên:
Đầu tiên ta khai báo số lượng mẫu của dãy nhảy bậc đơn vị N=10 và sốmẫu lấy trễ M=4 Sau đó ta khởi tạo một ma trận u chỉ có một hang với cácphần tử có giá trị bằng 0 Lệnh stem(u) cho phép vẽ đồ thị với dạng đườnglấy mẫu của dãy xung đơn vị trên
+ Đồ thị của chương trình trên:
Nhận xét: Dựa vào đồ thị ta thấy so với dãy ban đầu thì sau 4 mẫu dãy u
mới lên 1 Vậy dãy này đã bị trễ 4 mẫu so với dãy ban đầu
e.Chương trình trình phát dãy xung
Trang 21+Mô tả hoạt động của chương trình trên:
Đầu tiên ta khai báo khoảng lấy mẫu của dãy xung Tiếp đến ta khai báo một
ma trận chỉ có một hang với các phần tử từ 1 đến 10 có giá trị bằng 0, phần
tử này có giá trị bằng 0 Lệnh stem(x) cho phép vẽ đồ thị với dạng đườngcủa dãy xung đơn vị trên Các lệnh xlabel và ylabel dùng để đặt tên trụchoành và trục tung của đồ thị Lệnh title cho phép đặt trên đồ thị Lệnh axisdùng để đặt khoảng giá trị của trục hoành và trục tung của đồ thị, hai đối sốđầu là khoảng giá trị của trục hoành, hai giá trị cuối là khoảng giá trị củatrục tung
+ Đồ thị của chương trình trên:
Nhận xét : Đây là dãy xung đơn vị nhưng khoảng xét lớn hơn bài trên (axis),
kết quả thu được giống như dãy bị trễ đi 10 mẫu
2 Biểu diễn tín hiệu sin phức và sin thực :
Dãy sin phức mô tả bằng phườg trình:
x=|A|
Dãy sin thực :x= với A, là những số thực được gọi là biên
độ, tần số góc và pha ban đầu , là tần số
%chuong trinh bieu dien tin hieu sin phuc(phan thuc a phan ao)
%tin hieu sin phuc :x=2expn[-1/12+j(pi/6)]
t=-(1/12)+(pi/6).*j;
Trang 22+ Mô tả hoạt động của chương trình trên:
Đầu tiên ta khai báo và gán các giá trị của x[n]với các hệ số t, k, n Lệnh subplot có 3 đối sốdùng để chia đồ thị Ví dụ subplot(2,1,1) có nhiệmvụ chia đồ thị làm 2 hàng, 1 cột và vẽ ở đồ thịthứ nhất Lệnh stem(n,real(x)) cho phép vẽ đồ thịvới dạng đường lấy mẫu và chỉ vẽ phần thực củadãy x[n] Lệnh stem(n,imag(x)) cho phép vẽ đồ thịvới dạng đường lấy mẫu và chỉ vẽ phần ảo củadãy x[n] Các lệnh khác có nhiệm vụ riêng như đãgiải thích ở phần trên
Đồ thị của chương trình trên:
Trang 23Nhận Xét :
Nếu phân tích x[n] ta được [n]=2e^(n*(-1/12))(cosn(pi/6) +sinn(pi/6)),phần thực là phần cĩ hệ số nhân với cos[n(pi/6)], phần ảo là phần cĩ hệ sốnhân với sin[n(pi/6)] Vậy khi n tăng dần thì cả phần thực và phần ảo đều cĩbiên độ giảm dần ( do cĩ phần hệ số với mũ âm) và pha ban đầu của cả phầnthực và phần ảo cũng khác nhau Từ đĩ thì ta thấy kết quả phù hợp với lýthuyết
3 Các tín hiệu thời gian rời rạc sin thực :
Để tạo tín hiệu sin thực ,trong MATLAB sử dụng các hàm sin và cos
% chương trình biểu diễn tín hiệu thời gian rời rạc sin thực
Mô tả hoạt động của chương trình trên:
Đầu tiên ta khai báo các giá trị của dãy xung x[n]như tần số, pha, biên độ Sau đó dùng lệnh stem(x)để vẽ đồ thị với dạng đường lấy mẫu rời rạc.Lệnh grid có tác dụng chia ô vuông trong đồ thị,không có lệnh này cũng không có vấn đề gì Cáclệnh còn lại đã giải thích ở các phần trên
Trang 24
Nhận xét: Đây là tín hiệu hình sin tuần hoàn với chu kì
T=10, biên độ cực đại A=1,5 Đây là tín hiệu có phaban đầu nên khi n thay đổi thì pha ban đầu thay đổi,
do đó mà tín hiệu không bị tắt dần theo thời gian
4 Các tín hiệu ngẫu nhiên thời gian rời rạc :
Tín hiệu ngẫu nhiên thời gian rời rạc cĩ chiều dài n mẫu, phân bố đều đặntrong khoảng [0,1] được tạo bởi lệnh trong MATLAB là:
x=rand(1,N)
Tạo một tín hiệu ngẫu nhiên dạng Gauss cĩ giá trị trung bình bằng khơng
và phương sai bằng đơn vị ,dùng lệnh
Đồ thị của chương trình trên:
Nhận xét: Dựa vào đồ thị ta thấy tín hiệu lấy
mẫu được phân bố đều đặn trong khoảng (0,1)
Tạo một tín hiệu ngẫu nhiên dạng Gauss co gia trị trung bìnhbằng 0 vầ phương sai bằng đơn vị bang chương trình sau:
Trang 25 Đồ thị của chương trình trên
Nhận xét: Dựa vào đồ thị ta thấy rằng các giá
trị của tín hiệu ngẫu nhiên dạng Gauss có giá trịtrung bình bằng 0 và phương sai bằng đơn vị
Trang 26title('Day tin hieu sin tan so f1')
xlabel('Chi so thoi gian')
title('Day tin hieu sin tan so f2')
xlabel('Chi so thoi gian')
ylabel('Bien do')
Nhận xét: Ta thấy pha tức thời của x1 là w1=2pi0.9n, cịn pha tức
thời của x2 là w2=2pi1.1n Vậy w1+w2=4pi Vậy x1 và x2 ngược pha nhau.Khi tín hiệu ở đồ thị 1 ở miền âm của hàm sin thì tín hiệu ở đồ thị 2 lại ởmiền dương của tín hiệu hình sin và ngược lại Vậy kết quả phù hợp với lýthuyết Dựa vào 2 đồ thị ở trên ta thấy rằng đây làhai tín hiệu hình sin tuần hoàn với 2 chu kì khác nhau
do có tần số khác nhau Do đó đồ thị cũng khácnhau Xét về mặt giá trị của các trị số ở tín hiệusin thực thì hai dãy này và dãy trong chương trình 2.3có sự khác biệt, nhưng xét về nguyên tắc hoạtđộng thì các dãy này hoạt động tương đối giốngnhau
3.2.a Biếu diễn tín hiệu sin thực cĩ chiều dài 50 mẫu ,tần số 0.08,biên độ2,5 và cĩ độ dịch pha 90°
Trang 27title('Day tin hieu sin tan so f')
xlabel('Chi so thoi gian')
ylabel('Bien do')
Kết quả:
Nhận xét : Đây là tín hiệu sin thực tuần hoàn với chu
kì T=12.5, biên độ cực đại là 2.5 với độ dịch pha là
90 độ
b Thay lệnh stem thành lệnh plot và lệnh stairs
% Dùng lệnh plot
Trang 28+Biểu diễn bằng lệnh stem
Biểu diễn bằng lệnh plot
Trang 29 Biểu diễn bằng lệnh stairs
- Nhận xét: Ba lệnh stem, plot, stairs đều đựơc dùng
để vẽ đồ thị nhưng lệnh stem là lệnh vẽ đồthị với dạng đường lấy mẫu (rời rạc), lệnhplot là lệnh vẽ đồ thị với dạng đường trơnliên tục, lệnh stairs là lệnh vẽ đồ thị vớidạng đường bậc thang
- Nhận xét chung: Qua bài thực tập này ta nắm được cách biểu diễn
các dãy xung, các hàm số mũ, sin, cos và biểu diễn được chúng trên
Trang 30đồ thị Chương trình mô phỏng chính xác và qua đó ta rút ra đượccác đặc tính của chúng
BÀI 3: HỆ THỐNG LTI.
I.Tóm tắt lý thuyết.
Hệ thống thời gian rời rạc thực hiện phép ánh xạ tín hiệu lối vào vớicác giá trị x[n] thành tín hiệu rời rạc lối ra với những tính chất mongmuốn bằng cách áp dụng những thuật toán cho trước Bài thực hành nàytiến hành mô phỏng một số hệ thống rời rạc tuyến tính và bất biến vớithời gian đơn giản và nghiên cứu các tính chất của chúng trên lĩnh vựcthời gian Các hệ thống này được đặc trưng bởi đáp ứng xung h[n] vàđược mô hình hóa trên hình 3.1
y[n] = h[i]x[n-i] = x[i]h[n-i] (3.1)
Và được ký hiệu bằng: y[n] = x[n]*h[n]
Hai hệ thống LTI có đáp ứng xung lần lượt là h1[n] và h2[n] ghép nốitiếp với nhau như hình 3.2, thì hệ thống tổng thể có đáp ứng xung: h[n] = h1[n]*h2[n] (3.3)Nếu hai hệ thống ghép nối tiếp nhau sao cho:
h1[n]*h2[n] = [n] (3.4)
Trang 31thì hệ thống LTI cĩ đáp ứng xung h2[n] được gọi là nghịch đảo của hệ thốngLTI cĩ đáp ứng xung h1[n] và ngược lại.
Một hệ thống LTI được gọi là nhân quả khi và chỉ khi đáp ứng xungcủa nĩ thỏa mãn điều kiện: h[n] = 0 khi n 0
Quan hệ vào/ra của một hệ thống LTI còn đượcbiểu thị bằng phương trình sai phân hệ số hằng số dạng:
(3.7)Trong đó x[n] là tín hiệu lối vào, y[n] là tín hiệu lối ra Các hệ số và là những hằng số Bậc của hệ thốnglà max(N,M), đây cũng chính là bậc của phương trình sai phân đặc trưng cho hệ thống thời gian rời rạc đó
Giả sử hệ thống là nhân quả, thì phương trình sai phân hệ số hằng số được viết lại như sau:
với (3.8)
Như vậy lối ra y[n] tại thời điểm n có thể được tính từ phương trình sai phân ở trên đối với tất cả các n khi biết x[n] và các điều kiện ban
Hệ thống thời gian rời rạc được mô tả bằng phương trình sai phân (3.8) có đáp ứng xung vô hạnnên nó được gọi là hệ thống IIR
Trang 32Hệ thống có đáp ứng xung hữu hạn được gọi là
hệ thống FIR nếu phương trình sai phân (3.8) có
=0 và k>0 Vậy hệ thống FIR nhân quả có phương
Hệ thống thời gian rời rạc được gọi là tuyến tính
nếu đáp ứng lên một tổng bằng tổng các đáp
ứng, cách khác nếu và là các đáp
ứng lên các tín hiệu lối vào và thì đối
với lối vào tổng:
x[n]=a +b
(3.10)
sẽ có đáp ứng là: y[n]=a +b
(3.11)
Phương trình (3.11) đúng đối với các hằng số a
và b bất kì và đối với tất cả các giá trị khả dĩ
của các tín hiệu lối vào và Nếu phương
trình (3.11) không nghiệm đúng đối với ít nhất một
giá trị khác không của a hoặc b, hoặc của
hoặc của thì hệ thống là phi tuyến
Hệ thống được gọi là bất biến đối với thời gian
nếu là đáp ứng đối với tín hiệu lối vào
, thì đáp ứng đối với phiên bản trễ của tín
hiệu lối vào : x[n]=
(3.12)
sẽ là y[n]=
(3.13)
ở đây là số nguyên dương hoặc âm
Nếu hệ thức trên không thỏa mãn thì hệ thống
được gọi là thay đổi đối với thời gian
Hệ thống 1 vừa thỏa mãn tính chất tuyến tính vừa
bất biến đối với thời gian thì được gọi là hệ thống
LTI
Trang 33Trong MATLAP, để mô phỏng các hệ thống thời gian rời rạc LTI nhân quả có phương trình sai phân (3.7), có thể dùng lệnh filter.
Y=filter(num,den,x) (3.14)
Trong đó: x là vectơ lối vào, num=[ ]; den=[ ] là các vectơ hệ số của hệ thống; y là vectơ tín hiệu lối ra, cũng là nghiệm của phương trình sai phân đối với lối vào x với các điều kiện ban đầu bằng o, có nghĩa là:
y[-1]=y[-2]= =y[-N]=0
Tín hiệu lối ra y[n] của hệ thống LTI có đáp ứng xung đơn vị h[n] với lối vào x[n] cũng được xác định bằng lệnh conv(h,x)
Đáp ứng xung đơn vị h[n] của một hệ thống được xác định bằng lệnh h=impz(num,den,N+1)
II Thực hành :
2.1 Các hệ thống tuyến tính và phi tuyến
Nghiên cứu tính chất tuyến tính của hệ thống
y [n] – 0.4y[n-1] + 0.75y[n-2]= 2.2403x[n] +2.4908x[n-1] +2.2403x[n-2]Chương trình dưới đây dùng để mơ phỏng hệ thống này với 3 tín hiệu vào là [n], [n],
Với =cos(0,2 n), =cos(0,8 n),
%He thong tuyen timh va phi tuyen
Trang 34title('Tin hieu')
Để tìm đáp ứng xung lối ravà sử dụng các hàm vẽ Ta có đồ thị của tín hiệulối ra , , như sau:
Ta thấy đồ thị của y[n] và y1[n] gần như giống nhau sai số d là rất nhỏHệthống trên là tuyến tính vì ta có là các đáp ứng xung lên các tín hiệu lối vào thì đối với lối vào tổng ta có đápứng xung tương ứng là :
2.2 Xác định đáp ứng xung đơn vị của hệ thống LTI
Trong MATAB chúng ta sử dụng lệnh h=impz(num,den,N) để tính đáp ứng
xung của hệ thống thời gian rời rạc LTI Chương trình sau cho phép tính và vẽđáp ứng xung của hệ thống có phưong trình sai phân sau:
%Chuong trinh tinh va ve dap ung xung
n=40;
num=[2.2403 2.4908 2.2403];
den=[1 -0.4 0.75];
h=impz(num,den,n);
Trang 35title('Dap ung xung cua he thong');
Mô tả quá trình hoạt động của chương trình:
Đầu tiên ta khai báo các giá trị của hệ thống nhưsố mẫu lấy N, vectơ của tử số num và vectơ củamẫu số den Hàm impz cho phép tính đáp ứng xungđơn vị h[n] của hệ thống Lệnh stem(h) cho phép vẽđồ thị với dạng đường lấy mẫu rời rạc của hệthống trên Dòng lệnh h=impz(num,den,N) là dònglệnh quan trọng nhất đối với bài xác định đáp ứngxung đơn vị của hệ thống
Ðồ thị đáp ứng xung hệ thống:
Nhận xét : Dựa vào đồ thị ta thấy khi số lượng lấy
mẫu càng lớn thì đáp ứng xung đơn vị càng dần về
0 nên hệ thống này có tính ổn định Khi xung đơn vịdịch chuyển đi một khoảng thời gian xác định thìđáp ứng xung đơn vị sẽ dịch một khoảng tương tự.Hay nói cách khác đáp ứng xung đơn vị là rời rạcthời gian của hàm tương tự Dirac và được xácđịnh như sau:
2.3.Các hệ thống bất biến với thời gian
Nếu là đáp ứng xung lên hệ thống lối vào thì đáp ứng của hệ
dương hoặc âm)
Trang 36Hệ thức trên đúng với tín hiệu vào bất kỳ Nếu hệ thức đĩ khơng đượcthoả mãn đối với ít nhất một dãy lối vào thì hệ thống đĩ được gọi là thay đổivới thời gian.
Xem xét tính chất bất biến với thời gian của hệ thống thời gian rời rạc cĩphương trình sai phân dạng:
Chương trình sau mơ phỏng hệ thống cĩ phương trình sai phân:
title('Tin hieu')
Mô tả quá trình hoạt động của chương trìnhtrên: Đầu tiên ta khai báo các thông số cơbản của hệ thống và của chương trình nhưkhoảng lấy mẫu n, các giá trị a, b, Dònglệnh =[zeros(1,n0) xn] là dòng lệnh quan trọngnhất trong chương trình này vì muốn biết mộthệ thống có bất biến đối với thời gian hay
Trang 37không ta phải lấy phiên bản trễ của tín hiệulối vào Ngoài các dòng lệnh có chức năngmô phỏng các hệ thống thời gian rời rạcchúng ta còn khai báo ẩn dn là tín hiệu hiệucủa hai lối ra trên để tiện cho việc quan sátvà nhận xét trên đồ thị Tín hiệu sai số đượcgán bằng cách lấy tín hiệu lối ra không trễban đầu lúc mới vừa lấy mẫu trừ đi tín hiệulối ra sau khi bị trễ mẫu.
- Hệ thống trên là bất biến với thời gian vì khi so sánh tín hiệu lối ra
và tín hiệu ra trễ mẫu ( ) ta thấy:
=
là đúng với lý thuyết
2.4 Ghép nối tiếp hệ thống LTI
Trang 38Trong thực tế thường ghép nối tiếp các hệ thống LTI nhân quả bậc nhất(thường là bậc 2) với nhau để tạo được các hệ thống bậc cao Chẳng hạn taghép nối tiếp hai hệ thống bậc hai có phương trình sai phân sau:
để thu được hệ thống bậc 4 có phương trình sai phân sau:
(3)Chương trình sau mô phỏng hệ thống bậc 4 với phương trình sai phânsau (3) và hệ thống nối tiếp hai hệ thống bậc hai (1) và (2) Trong chươngtrình này, tín hiệu x[n] là tín hiệu lối vào của hệ thống bậc 4 có tín hiệu ra lày[n] Sau đó áp dụng lối vào x[n] này cho hệ thống bậc 2 với phương trìnhsai phân(1) để làm tín hiệu ra Tiếp đến dùng làm tín hiệu lốivào cho hệ thống bậc hai có phương trình sai phân (2) để tìm lối ra Cuối cùng lấy hiệu số giữa tín hiệu lối ra y[n] với để xác định sai sốthực hiện
Trang 39title('tin hieu sai so');grid;
Ðồ thị các dãy lối ra y[n] và như sau:
Nhận xét: Dựa vào đồ thị ta nhận thấy rằng tín
hiệu ra của hệ thống bậc 4 y[n] và tín hiệu lối racủa hệ thống nối tiếp tương đối giống nhau.Tín hiệu sai số có giá trị rất nhỏ Lí do có sai số ởđây là các giá tri num và den ở các hệ thốngkhông phải là các giá trị đúng tuyệt đối mà cácgiá trị đó được lấy tương đương
Trang 402.5 Tính ổn định của hệ thống LTI
Một hệ thống LTI ổn định theo nghĩa BIBO khi và chỉ khi đáp ứng xungđơn vị của nĩ cĩ tổng tuyệt đối Ðối với hệ thống IIR thì điều kiện cần để hệthống này ổn định là đáp ứng xung của nĩ phải suy giảm tới khơng khí sốlượng mẫu đủ lớn
Chương trình sau sử dụng để tính tổng các giá trị tuyệt đối của đáp ứngxung đơn vị được đánh giá theo cơng thức : (3.15)
Khi k tăng và kiểm tra các giá trị của |h[k]| tại mỗi bước lặp Nếu giá trị |h[k]| nhỏ hơn thì cĩ thể coi tổng s(k) từ (3.15) hội tụ và rất gần với S()
Ở đây h[n] là đáp ứng xung đơn vị của hệ thống LTI nhân quả cĩ phươngtrình sai phân :
Quá trình hoạt động của chương trình trên:
Cũng giống như các bài trước việc khai báo cácthông số của chương trình và của hệ thống hiểnnhiên Bây giờ chúng ta sẽ đi sâu vào phân tíchvòng lặp for và các lệnh có chứa trong vòng lệnhnày