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

Báo cáo thực tập xử lý số tín hiệu (DSP: Digital Signal Processing )

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 (942 KB, 92 trang )

Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
LỜ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.
Trình bày bởi: SV Nguyễn Hồng Văn Trang 1
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh


Giới thiệu chung
I. Tương tự - Số :
- Tín hiệu tương tự là tín hiệu có giá trị thay đổi liên tục theo thời
gian. Tín hiệu số là tín hiệu đã được lấy mẫu và lượng tử hóa.
- Lấy mẫu là quá trình biến một tín hiệu tương tự thành một tín hiệu
rời rạc theo thang thời gian. Định lý lấy mẫu (Shannon-Nyquist)
nói rằng muốn khôi phục một tín hiệu băng tần gốc liên tục theo
thời gian thì băng thông của tín hiệu ban đầu phải có giới hạn và
tần số lấy mẫu phải lớn hơn hai lần băng thông của tín hiệu ban
đầu.
- 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ành
tí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)

Trình bày bởi: SV Nguyễn Hồng Văn Trang 2
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
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ên
tụ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ện
vớ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 .
Trình bày bởi: SV Nguyễn Hồng Văn Trang 3
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh

- 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ạng
tí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ệm
giải thông .
Trình bày bởi: SV Nguyễn Hồng Văn Trang 4
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh

Bài Mở Đầu
I. Mục đích:
- Thực hành xử lý tín hiệu số chuyên ngành nhằm giúp cho sinh viên:
+ Làm quen với phần mềm toán học Matlab để giải các bài toán khó
và mô phỏng các hình vẽ một cách thiết thực nhất .
+ Rèn luyện kỹ năng thực hành cũng như khả năng tư duy và tổng
hợp kiến thức.
+ 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 trong
cô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ình
lệnh hoặc tạo ra một cửa sổ hình
Trình bày bởi: SV Nguyễn Hồng Văn Trang 5
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
B. Thực tập :
Trong phần thực tập này chúng ta sẽ đi làm 7 bài tập trên phần
mềm MATLAB cụ thể như sau:
BÀI 1: LÀM QUEN VỚI MATLAB
I.CƠ SỞ LÝ THUYẾT:
MATLAB là một công cụ tính toán toán học. MATLAB có thể
được sử dụng để tính toán,nó cũng cho phép ta vẽ các biểu đồ, đồ thị theo
nhiều cách khác nhau.Giống như một chương trình phần mềm, chúng ta
có 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ào
các lệnh và MATLAB sẽ cho ra kết quả. Dấu >> là dấu nhắc của chương
trình MATLAB. Khi MATLAB hoạt động con trỏ chuột sẽ xuất hiện sau
dấ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ực

hiệ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ác
hà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ận
chr có một hàng hay một cột được gọi là một vector.
Trình bày bởi: SV Nguyễn Hồng Văn Trang 6
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
Vector hàng và vector cột là những trường họp đặc biệt của ma trận. Ma trận
n×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 Matlap
tươ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ói
nhau 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ỏi
dấu “;”.
Các lệnh được sử dụng khi thao tac trên ma trận được cho trong bảng sau:
Lệnh Kết quả
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ổng hai ma trận
C=A-B Hiệu hai ma trận
C=A*B Tích hai ma trận
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 của ma trận
C=A.^k Lũy thùa từng thành phần của ma trận
C=A’ Ma trận chuyển vị AT
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=A\B Giải phương rình AX=B
X=B\A Giải phương trình XA=B
x=linspace(a,b,n) Vector x có n thành phần phân bố đều trong khoảng
[a,b]
x=logspace(a,b,n) Vector x có n thành phần bắt đầu 10a và kết thúc với
10b
A=eye(n) Ma trận đồng nhất
A=zeros(n,m) Ma trận all-0
A=ones(n,m) Ma trận all-1
A=diag(v) Ma trận zeros với đường chéo la các thành phần của
vector v
X=tril(A) Trích ma trận tam giác dưới
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)
Trình bày bởi: SV Nguyễn Hồng Văn Trang 7
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
v=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
v=sum(A) Như trên với tổng
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 ma
trậ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
Trình bày bởi: SV Nguyễn Hồng Văn Trang 8
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
5 7 9
Ma trận B:
B =
4 5 2
6 9 3

8 6 9
Ma trận C: tổng hai ma trận A và B
C =
5 8 7
8 13 9
13 13 18
Ma trận C: hiệu hai ma trận A và B
C =
-3 -2 3
-4 -5 3
-3 1 0
Ma trận C: tich hai ma trận A và B
C =
62 62 56
80 82 70
134 142 112
Ma trận C: hiệu hai ma trận A và B
C =

-6.9000 3.5667 0.9000
-7.0000 3.6667 1.0000
-7.3000 3.9667 1.3000
Ma 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

Trình bày bởi: SV Nguyễn Hồng Văn Trang 9
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
9
Ma trận F: ma trận tạo thành từ hai ma trận đường chéo D và E
F =
1 4
4 9
9 9
Ma trận D: trích ra từ hai dòng đầu của ma trận A và ma trận E: trích ra từ
hai dòng cuối của ma trận B
D =
1 3 5
2 4 6
E =
6 9 3
8 6 9
Ma trận F: ma trận tạo thành từ hai ma trận D và E ở trên
F =
1 3 5
2 4 6
6 9 3
8 6 9
Ma trận D và E lần lượt là ma trận trích ra từ cột cuối của ma trận A và cột
đầu của ma trận B
D =
5
6
9

E =

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 8
Nhận xét:
Trình bày bởi: SV Nguyễn Hồng Văn Trang 10
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
- 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ỗi
biế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ệnh
plot(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ẻ.
Ký hiệu Màu Ký hiệu Kiểu vẽ
r Red ., o Đánh dấu các điểm bằng dấu ‘.’, ‘o’
g Green * Đanh dấu các điểm bằng dấu ‘*’
b Blue x,+ Đánh dấu các điểm bằng dấu ‘x’, ‘+’
y Yellow - Vẽ bằng đường nét iền
m Magenta Vẽ bằng đường nét đứt dài
c Cyan : Vẽ bằng đường nét đứt ngắn
k black Vẽ bằng đường nét đứt chấm gạch
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.
Trình bày bởi: SV Nguyễn Hồng Văn Trang 11
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
+ Để 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ừng

cử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)
f
12
(x)=diff(f(x)/x(2)-x(1)) % đạo hàm xấp xỉ
f
22
=(f
12
-f’(1:999))/norm(f
12
) % sai số liên quan
Chương trình:
x=linspace(-10,10,1000);
fx=-x.*sin(x); %Ham 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
subplot(2,2,1);
plot(x,fx) %Ve ham f(x)
title('ham f(x)');
grid; %tao duong ke
subplot(2,2,2);
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');
Trình bày bởi: SV Nguyễn Hồng Văn Trang 12
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
grid;
Kết quả sau khi chạy chương trình ta được đồ thì của các hàm trên có dạng như
sau:
+ Đồ thị chương trình:

Chương trình nhằm mô phỏng cách sử dụng hàm vẽ đồ thị plot, hàm
tạo nhãn cho đồ thị title, hàm tạo đường kẻ grid, hàm tạo nhiều cửa sổ con
trong cùng một cử sổ: subplot. Qua chương trình mô phỏng ta biết được
cách thức thực hiện của chương trình cũng như chức năng của từng câu lệnh
trong chương trình. Để chỉ định màu và kiểu đường của nét vể ta dùng lệnh
plot(x,y,’r ‘) với thông số thứ 3 thực hiện chức năng này.
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) z
1
=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

Trình bày bởi: SV Nguyễn Hồng Văn Trang 13
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
grid;

Đồ thị của hàm có dạng như sau:
b) z
2
=f(x,y)=x-x
3
+y
2
+1, vois x,y=[-3,3].
Chương trình:
x=linspace(-3,3,100);
y=x;
[x,y]=meshgrid(x,y);
z=x-x.^3+y.^2+1;
plot3(x,y,z)
grid;
Đồ thị của hàm có dạng như sau:
Trình bày bởi: SV Nguyễn Hồng Văn Trang 14
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
c) z
3
=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 trong
hàm 3D giống với 2D, tuy nhiên với việc sử dụng hàm plot3 trong
hàm 3D nó sẽ mở rộng thêm cho một trục tọa độ thứ 3. Trong không
gian 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
Trình bày bởi: SV Nguyễn Hồng Văn Trang 15
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
BÀ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ên
chạ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ạn
hoặ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ông
trong một khoảng thời gian hữu hạn tù thời điểm N
1
đến N
2
.
N
1

≤ n ≤ N
2
. Với N
2
≥ N
1
. Dãy có chiều dài N= N
2
- N
1
+ 1 mẫ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àn
vớ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:
ε =
2
| [ ]|
n
x n

=−∞

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:
ε =
2
| [n]|
k
n
x

=∞

Công suất trung bình của một dãy không tuần hoàn x[n] được xác định
bằng công thức
2
1 1
lim lim | [ ]|
1 1
K
K
av
k K
n K
p x n
K K
ε
→∞ →∞
=−
= =
+ +

• Công suất trung bình của một dãy không tuần hoàn x[n] được cho
bởi công thức:
• Dãy xung đơn vị được ký hiệu bằng δ[n] và được xác định từ biểu
thứ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||α|
n
e
j n

o
e
ω φ
+
• Dãy sine thực có biên độ là hằng số được biểu thị bằng:
X[n]=Acos(
o
n
ω φ
+
)
Trình bày bởi: SV Nguyễn Hồng Văn Trang 16
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
Trong đó A,
à
o
v
ω φ
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
2
o
o
f
ω
π
=
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ỳ N
nếu:

2
o
N r
ω π
=
Trong đó N là số ngun 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ố ngun 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à
M
z

. Trong trường hợp M=1 thì được gọi là trễ đơn vị và ký
hiệu
1
z

.Nếu M lấy dáu âm thì được gọi là sớm, tương đương với việc
dich 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 sine
thực sine phức
III.THỰC HÀNH :
1 Dãy xung đơn vị
a)Tạo dãy xung đơn vị
[n]
δ
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,
Trình bày bởi: SV Nguyễn Hồng Văn Trang 17
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
các phần tử còn lại bằng 0. Lệnh stem(x[n]) cho phép vẽ đồ 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ác
giá 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ồn
phù hợp

kết quả thu được được nghiệm đúng. Hạn chế của đoạn chương
trì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ạn
n=[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 ta khởi tạo một ma trận x có 1 hàng
Trình bày bởi: SV Nguyễn Hồng Văn Trang 18
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
với các phần tử 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ệnh stem(x[n]) cho phép vẽ đồ thò với dạng đường lấy mẫu của dãy
xung đơn vò trên.
Kết quả chạy chương trình:
Nhận xét : Dựa vào đồ thò ta thấy khi n có giá trò từ 1


4 thì x[n]=0, đến
khi n=5 thì x[n] bằng 1, các phần tử còn lại có giá trò bằng 0. Ta thấy do
chương trình phiên dịch tuần tự trước sau nên hàm zeros(1,M-1) lấy giá 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 đường
lấ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:
Trình bày bởi: SV Nguyễn Hồng Văn Trang 19
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
Nhậ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ơn
cá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 đơn
vị
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ác
phần tử có giá trị bằng 0 . Lệnh stem(u) cho phép vẽ đồ thị với dạng đường
lấ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
% Tạo một vector từ -10 đến 20;
n=-10:20;
x=[zeros(1,10) 1 zeros(1,20)];
Trình bày bởi: SV Nguyễn Hồng Văn Trang 20
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
stem(x,n);
xlabel('chi so thoi gian')
ylabel('bien do')
title('day xung don vi')
axis([-10 20 0 1])
+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 đường
của dãy xung đơn vị trên. Các lệnh xlabel và ylabel dùng để đặt tên trục
hoành và trục tung của đồ thị. Lệnh title cho phép đặt trên đồ thị. Lệnh axis
dù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ủa
trụ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|
0 0 0 0
( )
0 0
| | cos( ) | | sin( )
n j n n n
e A e n j A e n
σ ω φ σ σ
ω φ ω φ
+ +
= + + +
Dãy sin thực :x=
0
| | cos( ),A
ω φ
+
với A,
0
,
ω φ
là những số thực được gọi là biên
độ, tần số góc và pha ban đầu ,
0
0
2
f
ω
π

=
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;
k=2;
n=0:40;
x=k.*exp(t*n);
Trình bày bởi: SV Nguyễn Hồng Văn Trang 21
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
subplot(2,1,1);
stem(n,real(x))
xlabel('time')
ylabel('Bien do')
title('Phan thuc')
subplot(2,1,2);
stem(n,imag(x))
xlabel('time')
ylabel('bien do')
title('phan ao')
+ 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ệm vụ 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ủa dã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ủa dã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:
Nhậ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ần
Trình bày bởi: SV Nguyễn Hồng Văn Trang 22
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
thự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
%Tín hiệu x=1,5sin(0,2
π
n)
n=0:40;
f=0.1;
phase=0;
A=1.5;
arg=2.*pi.*f.*n-phase;
x=A.*sin(arg);
stem(n,x);
axis([0 40 -2 2]);
grid;
title('Day tin hieu sin')
xlabel('Chi so time n ')
ylabel('Bien do')
 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ác lệnh còn lại đã giải thích ở các phần
trên.


Trình bày bởi: SV Nguyễn Hồng Văn Trang 23
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
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ó pha ban đầ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 đặn
trong 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
x=randn(1,N) ;% x=rand(1,n)
n=50
x=randn(1,n)
stem(x)
Mô tả hoạt động của chương trình trên: Hàm x=rand(1,n) là ma trận x với
các thành phần là phân bố đồng nhất trong khoảng (0,1). đây giá trò
của x được lấy ngẫu nhiên, do đó đồ thò ta quan sát ở những thời điểm
khác nhau thì khác nhau va mỗi lần chạy chương trình ta sẽ có một đồ thị
khác với ban đầu.
Đồ 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ình
bằng 0 vầ phương sai bằng đơn vị bang chương trình sau:
n=10;

x=randn(1,n);
stem(x)
Trình bày bởi: SV Nguyễn Hồng Văn Trang 24
Báo cáo thực tập Xử lý số tín hiệu GVHD: Nguyễn HữuKhánh
 Mô tả hoạt động của chương trình trên: Hàm x=randn(1,n) là ma
trận x với các thành phần là phân bố chuẩn trong khoảng (0,1).
đây giá trò của x được lấy ngẫu nhiên, do đó đồ thò ta quan sát ở
những thời điểm khác nhau thì khác nhau.
 Đồ 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ò.
Áp dụng
3.1 Biểu diễn tín hiệu sin thực có tần số 0,9 và 1,1.
%Chương trình
n=0:40;
f1=0.9;
f2=1.1
phase=0;
A=1.5;
arg=2.*pi.*f1.*n-phase;
x1=A.*sin(arg);
subplot(2,1,1)
stem(n,x1);
axis([0 40 -2 2]);
grid;
title('Day tin hieu sin tan so f1')
xlabel('Chi so thoi gian')
ylabel('Bien do')
arg=2.*pi.*f2.*n-phase;
x2=A.*sin(arg);

subplot(2,1,2)
stem(n,x2);
axis([0 40 -2 2]);
Trình bày bởi: SV Nguyễn Hồng Văn Trang 25

×