Professional Documents
Culture Documents
XLTHNC
XLTHNC
5
1.1. Giới thiệu.....................................................................................................5
1.2. Sử dụng biến trong matlab...........................................................................6
1.2.1. Quy cách đặt tên...................................................................................6
1.2.2. Véc tơ và matrận...................................................................................6
1.3. Một số lệnh thông dụng trong Matlab..........................................................9
1.4. Các toán tử và hàm....................................................................................10
1.4.1. Các toán tử và các hàm cơ bản............................................................10
1.4.2. Các toán tử và các hàm thao tác với ma trận.......................................10
1.5. Sử dụng đồ thị trong Matlab......................................................................12
1.5.1. Đồ thị trong hệ tọa độ phẳng...............................................................12
1.5.2. Đồ thị trong không gian ba chiều........................................................14
1.6. Lập trình trong Matlab...............................................................................16
1.7. Matlab GUI................................................................................................17
1.7.1. Môi trường làm việc...........................................................................17
1.7.2. Thuộc tính của các điều khiển.............................................................18
1.7.3. Viết sự kiện cho các điều khiển..........................................................19
1.7.4. Debug trong Matlab............................................................................20
1.7.5. Vẽ đồ thị - sử dụng component AXES................................................20
1.7.6. Điều khiển Toggle – nút bấm 2 trạng thái...........................................21
1.7.7. Điều khiển Slider – thanh trượt...........................................................21
1.8. Bài tập chương 1........................................................................................21
Chương 2. TÍN HIỆU RỜI RẠC........................................................................23
2.1. Khái niệm về tín hiệu rời rạc và lấy mẫu tín hiệu......................................23
2.2. Các tín hiệu cơ sở......................................................................................23
2.2.1. Dãy xung đơn vị..................................................................................23
2.2.2. Dãy nhảy bậc đơn vị...........................................................................24
2.2.3. Dãy tín hiệu hình sin...........................................................................26
2.2.4. Dãy e-mũ phức....................................................................................27
2.3. Các phép toán trên tín hiệu........................................................................28
2.3.1. Phép dịch chuyển................................................................................28
2.3.2. Phép nhân, cộng tín hiệu.....................................................................29
2.3.3. Phép nhân chập 2 tín hiệu...................................................................30
2.4. Phương trình sai phân hệ số hằng..............................................................30
2.5. Tín hiệu hai chiều (ảnh số).........................................................................31
2.5.1. Biểu diễn ảnh......................................................................................31
2.5.2. Đọc ảnh, hiển thị và lưu ảnh...............................................................32
2.5.3. Cải thiện sự tương phản của ảnh.........................................................34
2.5.4. Tạo ảnh nhị phân từ ảnh đã cho..........................................................35
2.6. Bài tập chương 2........................................................................................35
Chương 3. PHÉP BIẾN ĐỔI FOURIER...........................................................38
3.1. Biến đổi Fourier của tín hiệu rời rạc..........................................................38
3.1.1. Định nghĩa..........................................................................................38
3.1.2. Các phương pháp thể hiện của X(ejω)..................................................39
3.1.3. Tính chất quan trọng của X(ejω):.........................................................40
3.2. Các tính chất của biến đổi Fourier.............................................................42
3.2.1. Tuyến tính...........................................................................................42
3.2.2. Tính chất trễ........................................................................................43
3.2.3. Trễ tần số............................................................................................43
3.2.4. Liên hợp phức.....................................................................................45
3.2.5. Nhân chập...........................................................................................45
3.2.6. Tích đại số..........................................................................................45
3.3. Phép biến đổi Fourier nhanh......................................................................45
3.4. Biểu diễn hệ thống rời rạc trong miền tần số liên tục.................................47
3.4.1. Đáp ứng tần số....................................................................................47
3.4.2. Các bộ lọc số lý tưởng........................................................................49
3.5. Phép biến đổi Fourier của tín hiệu hai chiều..............................................52
3.5.1. Phép biến đổi Fourier..........................................................................52
3.5.2. Phép lọc trên miền tần số....................................................................55
3.6. Bài tập chương 3........................................................................................57
Chương 4. BIỂU DIỄN HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC TRONG
MIỀN Z 60
4.1. Phép biến rổi Z hai phía.............................................................................60
4.2. Một số tính chất của biến đổi Z..................................................................61
4.2.1. Tính tuyến tính....................................................................................61
4.2.2. Dịch mẫu – tính chất trễ......................................................................61
4.2.3. Dịch tần số..........................................................................................62
4.2.4. Biến số đảo.........................................................................................62
4.2.5. Liên hợp phức.....................................................................................62
4.2.6. Tích của hai dãy..................................................................................62
4.2.7. Tích chập của hai dãy.........................................................................62
4.3. Biến đổi Z của một số dãy cơ bản..............................................................63
4.4. Biến đổi Z ngược.......................................................................................63
4.5. Hàm truyền đạt của hệ thống rời rạc..........................................................66
4.6. Bài tập chương 4........................................................................................68
4.6.1. Bài tập sinh viên tự giải......................................................................69
Chương 5. BỘ LỌC SỐ......................................................................................71
5.1. Phân tích các mạnh lọc FIR đơn giản.........................................................71
5.1.1. Mạch lọc FIR thông thấp....................................................................71
5.1.2. Mạch lọc FIR thông cao......................................................................73
5.2. Mạch lọc số IIR.........................................................................................74
5.2.1. Mạch lọc IIR thông thấp.....................................................................74
5.2.2. Mạch lọc IIR thông cao.......................................................................75
5.2.3. Mạch lọc IIR thông dải.......................................................................76
5.2.4. Mạch lọc IIR chặn dải.........................................................................77
Chương 6. XỬ LÝ ẢNH TRONG MATLAB....................................................78
6.1. Nâng cao chất lượng ảnh bằng xử lý histogram.........................................78
6.1.1. Phép dãn Histogram sử dụng imtool của Matlab................................78
6.1.2. San phẳng (cân bằng) histogram.........................................................79
6.2. Phép lọc ảnh trên miền không gian............................................................80
6.2.1. Phép lọc tuyến tính.............................................................................80
6.2.2. Lọc phi tuyến......................................................................................83
6.2.3. Khôi phục ảnh.....................................................................................86
6.3. Tách biên ảnh.............................................................................................87
Chương 1. TỔNG QUAN VỀ CÔNG CỤ MATLAB
Cửa sổ chính làm việc trong Matlab bao gồm 3 cửa sổ chính là: Cửa sổ lệnh
(Command Window), cửa sổ thư mục – vùng làm việc (Current Directory –
Workspace) và cửa sổ chứa tập lệnh đã được sử dụng (Command History)
Matlab cho phép tính toán số, tính toán ma trận, vẽ đồ thị hàm số để biểu diễn thông
tin dưới dạng 2D hay 3D. Matlab chứa các toolbox, các gói chương trình (thư viện)
sử dụng cho các lĩnh vực rất đa dạng như: xử lý tín hiệu, nhận dạng hệ thống, xử lý
ảnh, mạng nơron, tối ưu hóa v.v… Matlab có thể giao tiếp với các chương trình và
các và các ngôn ngữ khác. Matlab có thể gọi các hàm được viết bằng C hay Java.
Cũng giống như trong các ngôn ngữ lập trình khác, Matlab có những quy định riêng
về cách đặt tên biến:
Tên biến phải là một từ, không chưa dấu cách, tên biến tối đa là 31 ký tự
Ký tự dấu chấm “.” không được sử dụng để trong đặt tên biến.
Các bài toán trong Matlab thông thường được quy về việc tính toán và xử lý trên ma
trận. Các biến, dữ liệu trong Matlab được coi như một ma trận thực hoặc phức. Ví
dụ, một giá trị vô hướng được coi là một mà trận có kích thước 1x1, một vector cột
là một chỉ có 1 cột, một véc tơ hàng, hay một chuỗi số là một ma trận chỉ có một
hàng. Một ma trận có kích thước (m x n) trong Matlab là một ma trận có m hàng và
n cột.
Ví dụ, tạo một ma trận trong Matlab:
>> M=[3 4 5 ; 2 1 4]
M =
3 4 5
2 1 4
Như vậy giá trị nhập đã được gán cho các thành phần của ma trận, các phần tử trong
mỗi cột được cách nhau bằng một dấu cách (space) hoặc một dấu phảy, Các hàng
được cách nhau bằng dấu “;”. Về cách đánh chỉ số, trong Matlab, các phần tử được
đánh chỉ số từ 1.
ans =
>> M(2,3)
ans =
4
Xâu ký tự cúng có thể được gán vào phần tử của ma trận, tuy nhiên số ký tự trên
mỗi hàng phải bằng nhau
Ví dụ:
>> M=['John','Peter';'David','Joe']
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.
Ví dụ:
>> M=['John','pete21';'adam3','ever4']
M =
Johnpete21
adam3ever4
M sẽ là một ma trận chứa ký tự của 2 xâu, và các phần tử ma trận sẽ là các ký tự của
2 xâu đó.
Ví dụ:
>> M(1,1)
ans =
>> M(2,2)
ans =
e
Trong trường hợp chúng ta muốn tạo một vector, trong đó các giá trị cách đều nhau
ví dụ (1,2,3,4,5,6…20) chúng ta có thể sử dụng công thức: M=(start:step:end)
Ví dụ:
>> M=(1:2:10)
M =
1 3 5 7 9
Trong trường hợp step=1, ta có thể sử dụng công thức thu gọn: M=(start:end)
Ví dụ:
>> M=[1:3;4:6]
M =
1 2 3
4 5 6
Kích thước của ma trận cũng có thể thay đổi, xét trong ví dụ trên nếu ta gán
M(3,3)=1, ta sẽ có:
>> M(3,3)=1
M =
1 2 3
4 5 6
0 0 1
Tương tự ma trận có thể mở rộng kích thước bằng cách gộp các ma trận lại.
Ví dụ:
>> N=ones(3)
N =
1 1 1
1 1 1
1 1 1
>> M=[M,N]
M =
1 2 3 1 1 1
4 5 6 1 1 1
0 0 1 1 1 1
Hoặc:
>> M=[M;N]
M =
1 2 3
4 5 6
0 0 2
1 1 1
1 1 1
1 1 1
who: xem tên biến trong không gian làm việc của Matlab
Ví dụ:
>> who
A M N
Ví dụ:
>> whos
Name Size Bytes Class
Tương tự như máy tính đơn gản thông thường, Matlab có thể thực hiện các phép
toán đơn giản, cụ thể như trong bảng dưới đây:
Toán tử Ký hiệu
Phép cộng +
Phép trừ -
Phép nhân *
Phép chia / hoặc \
Phép lũy thừa ^
Chuyển vị ma trận '
Các toán tử quan hệ =, >, <, >=, <=, ==
Các toán tử logic &, |, ~
Matlab cũng cung cấp hàm toán học, các hàm đặc biệt và các thuật toán hữu ich,
dưới đây là một số hàm thông dụng nhất:
Có thể dùng các hàm sau để tạo các ma trận đặc biệt
zeros(N): Tạo ma trận các phần tử đều bằng 0 có kích thước N
rand(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử phân bố
đều.
randn(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử tuân theo
phân bố chuẩn
magic(N): Tạo ma trận magic (tổng giá trị trong 1 hàng bằng tổng giá trị
trong 1 cột bằng tổng giá trị đường chéo) có kích thước N
Cộng: X=A+B
Trừ: X=A-B
Nhân: X=A*B (nhân 2 ma trận, số hàng của A phải bằng số hàng của B)
X=A.*B (nhân các phần tử tương ứng với nhau, 2 ma trận có kích thước
bằng nhau)
Lũy thừa: X=A^2 (X=A*A), X=A.^2 (lũy thừa các số hạng của A)
Phần lớn các câu lệnh vẽ đồ thị trong hệ tọa độ phẳng được thực hiện bằng lệnh
plot.
Ví dụ:
>> x=linspace(0,2*pi,30);
>> y=sin(x);
>> plot(,y)
Kết quả:
Trong ví dụ trên hàm línpace(0,2*pi,30) tạo ra 30 điểm dữ liệu trong đoạn [0:2*pi].
Và tính các thành phần của vector y = sin(x). Lệnh plot sẽ nối các điểm này lại.
Trong trường hợp lệnh plot không có các tham số cấu hình, Matlab sẽ vẽ đồ thị với
nét liền như trên, để cấu hình thêm ta bổ sung thêm các tham số theo định dạng như
sau plot(x,y,'tham số). trong đó tham số có thể là:
Tham số Màu sắc Tham số Các điểm Tham số Nối các điểm
b xanh da trời . điểm - nét liền
g xanh lá cây 0 tròn : đường chấm
r đỏ x dấu x -. đường gạch chấm
c xanh xám + dấu + -- đường gạch gạch
m đỏ tím * hoa thị
y vàng s vuông
k đen d kim cương
w trắng v, ^,<,> tam giác
p,h ngôi sao
Ví dụ:
>> plot(x,y,'--*b')
Kết quả:
Ngoài ra có thể chỉnh sửa cách trình bày đồ thị bằng cách lệnh sau:
Để vẽ nhiều đồ thị trên một hình ta có thể sử dụng lệnh plot(x,y,m,n) khi đó đồ thị
với tọa độ x,y và đồ thị với tọa độ m,n sẽ được vẽ trên một hình. Ngoài ra có thể sử
dụng lệnh hold on:
Ví dụ:
>> x=linspace(0,2*pi,30);
>> y=sin(x);
>> m=linspace(0,2*pi,30);
>> n=cos(x);
>> plot(x,y)
>> hold on
>> plot(m,n)
Đồ thị trong không gian ba chiều gồm 2 loại chính là đồ thị đường và đồ thị mặt
(lưới)
Để vẽ đồ thị đường trong không gian ba chiều ta sử dụng lệnh plot3, khuôn dạng
lệnh plot3 như sau: plot3(x,y,z) trong đó x,y,z là các vector hoặc ma trận.
Ví dụ:
>> t=linspace(0,6*pi,100);
>> plot3(sin(t),cos(t),t)
Kết quả:
Đối với đồ thị bề mặt và lưới, Matlab định nghĩa bề mặt lưới bằng các điểm theo
hướng trục z ở trên đường kẻ ô hình vuông trên mặt phẳng x-y.
Bước đầu tiên đưa ra đồ thị lưới của hàm hai biến z=f(x,y), tương ứng với mà trận X
và Y chứa các hàng và các cột lặp đi lặp lại. Trong Matlab có hàm meshgrid, với cú
pháp [X,Y]=meshgrid(x,y) tạo ra một ma trận X và Y, trong đó ma trân X mà các
hàng nó là bản sao của vector x, và ma trận Y có các cột là bản sao của vector y.
Ví dụ
>> [X,Y]=meshgrid(-1:0.5:1, -1:0.5:1)
X =
Y =
Ví dụ:
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> mesh(X,Y,Z)
Kết quả:
Ví dụ trong bài toán vẽ độ thị trên, ta tạo một file dothi3D.m với nội dung:
function dothi3D
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
Khi đó, để thực hiện nhóm câu lệnh trong file trên, tại dấu nhắc của cửa sổ lệnh, chỉ
việc gõ dothi3D
Khi lập trình trong Matlab chúng ta sử dụng các cấu trúc điều khiển và vòng lặp
giống như trong C:
Blank GUI (Default): Hộp thoại GUI trống không có một điều khiển nào cả.
GUI with Uicontrols: Hộp thoại GUI với một vài control, Chương trình có thể
chạy ngay.
GUI with Axes and Menu: Hộp thoại GUI với một uicontrol axes và button,
các menu để hiển thị đồ thị.
Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No.
Khi đó Matlab sẽ tạo ra 2 file mới:
File có phần mở rộng .fig chứa nội dung của giao diện
File có phần mở rộng .m chứa những đoạn mã liên quan đến giao diện
Click đúp vào Edit Text bên trái để xuất hiện cửa sổ các thuộc tính của điều khiển.
Có thể sắp xếp theo chức năng hoặc theo thứ tự A-Z của tên thuộc tính bằng nút
hiện ở gõ bên trái.
Tag: đây là thuộc tính giống như Caption trong Visual Basic để đặt tên điều
khiển. Dùng tên này có thể thao tác đến các thuộc tính của đối tượng.
String : là xâu kí tự hiện lên Edit Box.
Khi nhấn vào nút Push Button sẽ gọi hàm Callback. Mọi điều khiển trong Matlab
đều có hàm Callback, hàm callback của mỗi điều khiển được gọi phụ thuộc vào từng
điều khiển khác nhau. Để việt lệnh cho hàm callback, bấm chuột phải, trong hàm
này có 2 tham số quan trọng:
Để lấy dữ liệu và thiết lập thuộc tính cho điều khiển ta sử dùng 2 hàm là set và
get, cú pháp như sau:
get(handles.tag_dieu_khien, ‘ten thuoc tinh’);
set(handles.tag_dieu_khien, ‘ten_thuoc_tinh’, gia_tri);
Ví dụ viết chương trình để cộng 2 số:
x=get(handles.edit1,'string');
y=get(handles.edit2,'string');
x=str2num(char(x));
y=str2num(char(y));
z=x+y;
set(handles.text1,'string',num2str(z));
Khi đã viết xong chương trình hoàn chỉnh, để chạy chương trình có thể bấm nút Play
trên thanh công cụ hoặc F5 trong cửa sổ lập trình.
Trong trường hợp muốn debug chương trình, ta đặt breakpoint bằng phím F12, rồi
chạy chương trình, khi đó tại cửa sổ lệnh của Matlab con trước con trỏ để gõ lệnh sẽ
trở thành K>>
Muốn chuyển sang lệnh tiếp theo sử dụng phím tắt F10.
Trong quá trình viết chương trình, có thể in biến đang sử dụng ra bằng lệnh msgbox
Ví dụ:
msgbox(x,'Thong bao');
Lệnh trên được sử dụng để hiển thị giá trị của biến x, thuận tiện cho quá trình debug
chương trình, ngoài ra có thể được sử dụng để thông báo cho người sử dụng biết.
Trong Matlab có component AXES được sử dụng để vẽ các đồ thị, khi trên form có
sẵn một component AXES, các lệnh vẽ đồ thị sẽ được vẽ trên componient đó. Trong
trường hợp có nhều AXES, cần sử dụng lệnh axes(handle) để xác định sẽ vẽ trên
AXES nào.
Ví dụ:
axes(handles.axes2);
Lệnh trên thông báo cho Matlab biết rằng sẽ vẽ trên exes2.
x=0:0.01:2*pi
plot(x,sin(x),x,cos(x));
grid on;
title('Do thi ham sin va cos')
Trong hàm callback, để lấy trạng thai của nút bấm, sử dụng hàm get
Các thuộc tính cần quan tâm là thuộc tính min, max và sliderstep, trong thuộc tính
sliderstep, ta thay đổi giá trị x để thay đổi bước nhảy trên thay thanh trượt, giá trị x
nằm trong khoảng [0,1]
Bài 4. Viết một chương trình thực hiện công việc giống công cụ calculator
của Windows
Bài 5. Viết một phần mềm giải phương trình bậc 3:
ax3+bx2+cx+d=0
2.1. Khái niệm về tín hiệu rời rạc và lấy mẫu tín hiệu
Tín hiệu là biểu diễn vật lý của thông tin, tín hiệu nhìn thấy là các sóng ánh sáng
mang thông tin tới mắt, các tín hiệu nghe thấy là sự biến đổi áp suất không khí
truyền thới tai chúng ta.
Về mặt toán học tín hiệu biểu diễn bởi một hàm của một hay nhiều biến số độc lập.
Trong lĩnh vực xử lý tín hiệu số, chỉ làm việc với các tín hiệu rời rạc.
Trong DPS, tín hiệu thời gian rời rạc, được biểu thị bằng một dãy rời rạc và được
viết như sau:
Tín hiệu tương tự ở đầu vào được chuyển sang dạng số nhờ một hệ biến đổi tương tự
- số. Quá trình rời rạc hóa còn gọi là quá trình lấy mẫu tín hiệu.
Dãy xung đơn vị hay còn gọi là hàm Delta, có giá trị bằng đơn vị khi đối số = 0 và
có giá trị bằng 0 trong các trường hợp còn lại:
Dãy xung đơn vị rất quan trọng, nó được sử dụng để xác định đáp ứng xung, với một
hệ thống tuyến tính nếu xác định được đáp ứng xung đơn vị thì có thể xác định
đượng đáp ứng của hệ thống. Bởi vì, một tín hiệu thời gian – rời rạc x[n] bất kỳ có
thể được triển khai thành một dãy xung đơn vị thích hợp theo công thức sau:
Ở đây dãy δ[n-k] bằng đơn vị khi n=k và bằng 0 khi n khác k
Dãy nhảy bậc đơn vị có giá trị bằng đơn vị khi đối số lớn hơn hoặc bằng 0, và bằng
0 khi đối số nhỏ hơn 0. Nó được ký hiệu là u[n] và được biểu diễn toán học như sau:
Một dãy tín hiệu rời rạc theo thời gian bất kỳ x[n] để có thể khai triển thành một
tổng các dãy xung nhảy bậc đơn vị theo công thức:
Trong Matlab để tạo ra dãy xung nhảy bậc đơn vị ta xây dựng hàm stepseq:
function [x,n]=stepseq(n0,n1,n2)
n=[n1:n2];
x=[(n-n0)>=0];
Thực hành:
Dãy tín hiệu hình sin được biểu thị bằng hàm số sin (hoặc cos). Trong Matlab, hàm
sin (hoặc cos) được sử dụng để tạo ra dãy tín hiệu này.
Ví dụ tạo dãy tín hiệu: trên đoạn [0:50]
n=[0:50];
x=2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2);
stem(n,x);
Kết quả:
Dãy e-mũ phức là cơ sở để phát triển biễu diễn Fourier, biến đổi Fourier của một
dãy sẽ là tổ hợp tuyến tính của các dãy e-mũ phức.
Trong Matlab ta sử dụng hàm exp để tạo ra các dãy e-mũ phức.
là tần số của tín hiệu, được gọi là pha. Với công thức trên ta nhận thấy đối với
đối với tín hiệu e-mũ phức tuần hoàn, chỉ cần xét các tần số trong khoảng dài 2.
Trong miền tín hiệu rời rạc, tín hiệu e-mũ phức sẽ lặp lại với chu kỳ 2/. Xét trong
ví dụ trên: trong khoảng N=2/0.1=20 tín hiệu sẽ được lặp lại, tức là x[n]=x[n+20]
y[n]=F(x[n])
Trong DSP, các phép toán cơ sở sau đây được sử dụng khá phổ biến:
Phép toán này làm tín hiệu bị dịch đi một lượng bằng k đơn vị trên trục thời gian, tín
hiệu có thể bị làm trễ hoặc làm sớm. Tức là
y[n]=x[n-m]
Trong Matlab để dịch tín hiệu ta chỉ việc cộng thêm giá trị cho biến thời gian rời
rạc: n=n+giá trị dịch, ví dụ cần dịch trễ đi 5 mẫu, ta thực hiện n=n+5.
Bài tập: Tạo hàm dịch chuyển sigshift, thực hiện dịch tín hiệu xung đơn vị trễ pha 5
mẫu
m=[-10:10];
x=impseq(0,-10,10);
[y,n]=sigshift(x,m,5);
subplot(211);stem(m,x)
subplot(212);stem(n,y)
Phép nhân tín hiệu gồm có: nhân tín hiệu với hằng số và nhân hai tín hiệu. Nhân tín
hiệu với hằng số ta sử dụng phép nhân thông thường *, đối với nhân hai tín hiệu,
trong Matlab thực hiện toán tử mảng .*, tuy nhiên để nhân 2 tín hiệu sử dụng toán tử
trên, thì 2 ma trận phải có cùng kích thước, vì vậy trong trường hợp 2 ma trận không
có cùng kích thước, ta thêm các phần tử có giá trị 0 vào để 2 ma trận có chung kích
thước. Tương tự với phép cộng.
2.3.3. Phép nhân chập 2 tín hiệu
Hai tín hiệu x[n] và h[n] nhân chập với nhau thành một tín hiệu mới y[n] và được
cho bởi công thức:
Trong Matlab không thể nhân chập hai tín hiệu có chiều dài vô hạn. Matlab sử dụng
hàm conv để nhân chập 2 dãy có chiều dài hữu hạn.
Trong đó N, M là những số nguyên dương. N được gọi là bậc của phương trình sai
phân.
Biểu diễn trong Matlab, người ta sử dụng một hàm filter, hàm này có định dạng:
Ví dụ:
Một ảnh được biểu diễn dưới dạng một hàm f(x,y) với (x,y) là tọa độ, và giá trị của f
tại (x,y) là cường độ sáng của ảnh tại điểm đó. Đối với ảnh số đơn sắc, giá trị f tại
(x,y) được gọi là mức xám (gray level). Ảnh màu là tổ hợp của ánh sáng đơn sắc,
trong máy tính thường sử dụng hệ màu RGB, khi đó mỗi điểm ảnh được thể hiện
trong bộ nhớ máy tính như các giá trị độc lập của các màu đỏ, xanh lá cây và xanh
lam.
Kết quả của quá trình lấy mẫu và lượng tử hóa là một ma trận số liệu. Một ảnh có
kích thước M x N là một ma trận có M hàng và N cột, mỗi một giá trị (x,y) trên ma
trận gọi là một điểm ảnh (pixel). Chú ý trong một số sách về xử lý ảnh x có giá trị 0-
>M-1 và y có giá trị 0->N-1. Nhưng trong Image processing toolbox giá trị của x là
từ 1->M và y là 1->N
Một ma trận tọa độ ảnh trong Matlab được biểu diễn:
a. Đọc ảnh
c. Lưu ảnh
Bài 6. Cho tín hiệu x1(n) = {5,6,3,6,8,3}, hãy xác định các tín hiệu sau:
a. x(-n)
b. x(-n+1)
c. 2x(-n+1)
d. x(-n)+x(-n+1)
e. x(n/2)
f. x(2n – 1)
g. x(n)x(n)
Bài 7. Biểu diễn tín hiệu sau đây trong Matlab và vẽ đồ thị
a. x1(n) = {5,6,3,6,8,3} Sử dụng hàm xung đơn vị
b. x2(n) = {0,1,2,3}
Tính x1(n) + x2(n) và x1(n)x2(n) bằng tay và dùng Matlab để tính lại
x = x1i + x2i
x = x1i.*x2i
a. x(–n)
b. x(n + 2)
c. x(n) + x(–n)
d. x(n – 2) + x(n+2)
e. x(–n – 1) . x(n)
f. x(–n) . x(n) + x(–n – 1)
g. x(-n)+cos(2πn+π)
Bài 11. Các tín hiệu sau có tuần hoàn hay không? Nếu có thì chu kì là bao
nhiêu?
a.
b.
c.
Hướng dẫn giải:
Tìm k là số nguyên nhỏ nhất để x(n+k)=x
Bài 12. Tìm năng lượng của các tín hiệu sau ( ):
a.
b.
Hướng dẫn giải:
- Vẽ đồ thị biểu diễn tín hiệu, trong đó giá trị a và b có thể thay đổi bằng các
slider bar
- Bổ xung thêm nhiễu phân bố gauss (+c*randn[n] ) thay đổi giá trị c (ở 3 mức
0.1 0.2 và 0.5 bằng menu popup hoặc listbox) vẽ lại đồ thị x[n] để quan sát sự
ảnh hưởng của nhiễu
Chương 3. PHÉP BIẾN ĐỔI FOURIER
Phép biến đổi thực chất là phép thay đổi không gian biểu diễn tín hiệu từ không gian
ban đầu sang một không gian khác nhằm mục đích trích lọc các đặc tính của tín hiệu
và thuận tiện trong việc xử lý.
Y
X
Không gian
Miền không
đặc trưng
gian ban đầu
T-1
Trong chương này chúng ta sẽ nghiên cứu một công cụ toán học khác, đó là phép
biến đổi Fourier, để chuyển việc biểu diễn tín hiệu từ miền biến số độc lập n sang
miền tần số liên tục ω.
Biến đổi Fourier của tín hiệu rời rạc được định nghĩa như sau:
Như vậy việc biểu diễn tín hiệu x(n) trên miền thời gian thành biểu diễn X(e jω) trên
miền tần số ω. Tức là trên trục ảo jω. X(ejω) sẽ là một hàm phức của biến số ω.
Trên quan điểm toán từ: ta có một toán từ FT tác động lên làm biến đổi tín hiệu:
FT
x(n) X(ejω)
Từ miền tần số tín hiệu cũng có thể biến đổi ngược lại thành việc biểu diễn trên
miền thời gian bằng phép biến đổi Fourier ngược:
Vì X(ejω) là một hàm biến số phức nên ta có thể biểu diễn X(e jω) trong miền tần số
dưới dạng phần thực và phần ảo:
X(ejω) là một hàm biến số phức nên ta có thể biểu diễn dưới dạng modul và
argument:
Ta cũng có quan hệ giữa phổ pha và phổ biên độ với thành phần thực và ảo của
X(ejω).
Tuần hoàn: Biến đổi Fourier của tín hiệu X(ejω) tuần hoàn với chu kỳ 2π.
Tính đối xứng:
Biểu diễn trong Matlab, ta chỉ vẽ trong khoảng [-π, π], thực hiện chia đoạn trên
thành 500 điểm:
w=linspace(-pi,pi,500);
X=ones(1,500)./(ones(1,500)-0.5*exp(-j*w));
subplot(2,2,1);plot(w/pi,abs(X));title('Bien do');grid;
subplot(2,2,2);plot(w/pi,real(X)); title('Phan thuc');
grid;
subplot(2,2,3);plot(w/pi,imag(X)); title('Phan ao'); grid;
subplot(2,2,4);plot(w/pi,angle(X)); title('Pha'); grid;
Kết quả:
Ví dụ thực hiện biến đổi Fourier của tín hiệu x(n)={1,2,3,4,5} với n=[-1:3]
Trong trường hợp x(n) hữu hạn, có thể sử dụng trực tiếp công thức định nghĩa để
tính. Xét tín hiệu x có N mẫu trong khoảng n 1≤ n ≤ nN. Và cần tính giá trị X(e jω) tại
Như vậy công thức ban đầu sẽ được viết lại thành:
Vậy theo công thức trên, ta có: X=x*W, thì W phải là một ma trận có kích thước
Nx(M+1); là ma trận được xây dựng từ nT*k
Giả sử ta có hai tín hiệu x1(n) và x2(n) và biến đổi Fourier tương ứng là:
FT[x1(n)]=X1(ejω)
FT[x2(n)]=X2(ejω)
Khi đó 1 tín hiệu là tổ hợp tuyến tính của tín hiệu x 1 và x2: x(n)=a*x1(n)+b*x2(n) và
biến đổi Fourier của x(n) là X(ejω) thì:
6.2353e-015
Kết quả:
error =
6.6893e-015
Ta có:
Khi đó:
Như vậy việc nhân x(n) với trong miền biến số n sẽ tương đương với việc dịch
chuyển tần số của phổ đi một lượng ω0.
Giả sử ta có hai tín hiệu x1(n) và x2(n) và biến đổi Fourier tương ứng là:
FT[x1(n)]=X1(ejω)
FT[x2(n)]=X2(ejω)
Với n chạy từ [0:N], tính toán FT phải thực hiện N 2 phép tính và N(N+1) phép cộng
=> số lượng phép tính rất lớn
Cứ tiếp tục chia, cuối cùng người ta chứng minh được, chỉ cần thực hiện Nlog 2(N)
phép cộng và Nlog2(N) phép nhân.
Ví dụ trong Matlab:
n=-1:3;
x=1:5;
k=0:500;
X=x*exp(-j*2*pi*(n'*k)/500);
X1=fft(x,501);
subplot(221);plot(2*k/500,abs(X));
subplot(221);plot(2*k/500,abs(X1));
subplot(222);plot(2*k/500,abs(X1));
subplot(223);plot(2*k/500,angle(X));
subplot(224);plot(2*k/500,angle(X1));
Kết quả:
3.4. Biểu diễn hệ thống rời rạc trong miền tần số liên tục
Chúng ta biết rằng đáp ứng xung h(n) của hệ thống tuyến tính bất biến chính là đáp
ứng của hệ thống với kích thích là xung đơn vị.
Bây giờ ta đặt ở đầu vào một kích thích x(n)=e jwn. Khi đó đáp ứng ra y(n) của hệ
thống sẽ được tính như sau:
Ngược lại ta cũng có đáp ứng xung của hệ thống chính là biến đổi Fourier ngược của
đáp ứng tần số của hệ thống:
Ví dụ xác định đáp ứng tần số H(e jω) của hệ thống biết rằng đáp ứng xung của hệ
thống
Biểu diễn trong Matlab, ta chỉ vẽ trong khoảng [-π, π], thực hiện chia đoạn trên
thành 500 điểm:
w=linspace(0,pi,500);
H=ones(1,500)./(ones(1,500)-0.9*exp(-j*w));
subplot(2,1,1);plot(w/pi,abs(H));title('Do lon');grid;
subplot(2,1,2);plot(w/pi,angle(H)); title('Pha'); grid;
Kết quả:
3.4.2. Các bộ lọc số lý tưởng
Ứng dụng quan trọng nhất của xử lý tín hiệu số là lọc số, việc thiết kế các bộ lọc số
sẽ nói ở phần sau, trước tiên chúng ta sẽ đi tìm hiểu, nghiên cứu bốn bộ lọc số lý
tưởng, bao gồm:
Với –π ≤ ω ≤ π
|H(ejω)|
1
ω
-π -ωc 0 ωc π
Trong đó:
Đặc tính xung của bộ lọc thông thấp pha không lý tưởng. áp dụng công thức ta có:
Từ đây ta vẽ đồ thị đặc tính xung h(n) của bộ lọc thông thấp lý tưởng với ωc=π/3:
h(n)
0,33
0,28 0,28
0,14 0,14
0,04
0,04 0,03
...-9 0,03
-6 -3 ... n
-9 -8 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8
Nhận xét:
Đặc tính xung h(n) của bộ lọc thông thấp lý tưởng là dãy chẵn, đối xứng qua trục
tung, có độ dài vô hạn và không nhân quả, nên không thể thực hiện được trên thực
tế.
Với –π ≤ ω ≤ π
|H(ejω)|
1
ω
-π -ωc 0 ωc π
Trong đó:
Với –π ≤ ω ≤ π
|H(ejω)|
1
ω
-π -ωc2 -ωc1 0 ωc1 ωc2 π
Trong đó:
3.5. Phép biến đổi Fourier của tín hiệu hai chiều
Biến đổi Fourier của một tín hiệu 2 chiều (ảnh số) là một cặp biến đổi
FT
f(x,y) F(u,v)
IFT
FT: chuyển sự biểu diễn tín hiệu từ không gian thực sang không gian tần số.
IFT: chuyển đổi tín hiệu từ không gian tần số về không gian thực
Trước hết ta xét phép biến đổi Fourier của một hàm liên tục f(x,y). Phép biến đổi
được định nghĩa bởi công thức:
Như vậy biến đổi Fourier đã chuyển việc biểu diễn tín hiệu f(x,y) trong miền không
gian thực thành việc biểu diễn tín hiệu F(u,v) trong miền tần số.
Phép biến đổi Fourier của tín hiệu rời rạc 2 chiều (ảnh số) được tính bằng công thức:
Các thành phần tần số của phép biến đổi fourier mang giá trị phức nên ta có thể biểu
diễn như sau:
Khi đó |X(u,v)| được gọi là độ lớn hay phổ biên độ của phép biến đổi Fourier, nó
biểu diễn sự phụ thuộc biên độ tín hiệu vào tần số, |X(u,v)| được xác định bằng công
thức:
Và arg(u,v) được gọi là phổ pha, nó biểu diễn sự phụ thuộc pha tín hiệu vào tần số,
được tính bằng công thức:
Giá trị |X(u,v)|2 được gọi là phổ năng lượng của tín hiệu, thể hiện sự phụ thuộc năng
lượng vào tần số.
Chuyển đổi:
Việc nhân tín hiệu vào với e2j(am/M+bn/N) trong miền không gian thực sẽ tương đương
với trường hợp dịch chuyển phổ đi một khoảng (a,b). Xét trường hợp đặc biệt khi
a=M/2, b=N/2
Tức là:
FT( x (m, n )) X(u , v)
M N
FT( x (m, n )(1) ( m n ) ) X(u ,v )
2 2
Nói cách khác, bằng cách nhân vào ảnh ban đầu giá trị (-1) (m+n) trước khi biến đổi, ta
sẽ thu được phổ tần số mà điểm tần số F(0,0) của nó sẽ nằm giữa mảng 2 chiều.
Điều này rất quan trọng trong việc hiện phổ tín hiệu và lọc trên miền tần số.
F-1(u,v)=F*(u,v)
Tuần hoàn
Từ công thức định nghĩa về phép biến đổi Fourier ta có:
DFT(x(m,n))=X(u,v)
DFT(h(k,l))=H(u,v)
Khi đó:
DFT(x(m,n)*h(k,l))=X(u,v)H(u,v)
Như vậy phép nhân chập trong miền không gian tương đương với phép nhân thông
thường trong miền tần số. Đây chính là cơ sở cho phép lọc trên miền tần số. Việc
làm trơn, lọc nhiễu thực hiện trên miền không gian hoàn toàn có thể thực hiện trên
miền tần số.
3.5.2. Phép lọc trên miền tần số
Trong một ảnh, giá trị tần số cao tương ứng với sự thay đổi lớn về giá trị mức xám
như các đường biên ảnh, nhiễu v.v.. Trong khi đó thông tin của đối tượng tập trung
ở vùng tần số thấp.
Các kỹ thuật lọc trong miền tần số của tín hiệu ảnh cũng giống như lọc tín hiệu số
thông thường. Có thể làm trơn, nổi biên ảnh, lọc nhiễu, khôi phục ảnh v.v… Về cơ
bản thì lọc ảnh trên miền tần số tương đương với phép nhân chập hay phép lọc trên
miền không gian biểu diễn.
Bộ lọc này làm giảm các thành phần tần số cao, ảnh sau khi lọc sẽ ít góc cạnh hơn vì
các thành phần tần số cao đã được giảm bớt. Xét một ví dụ về bộ lọc thông thấp như
sau:
Trong đó D(u,v) được gọi là khoảng cách tới nguồn, được tính bằng công thức:
2 2
M N
D( u , v ) u v
2 2
Ý nghĩa: tất cả các tần số bên trong hình tròn bên trong đường tròn đều được lọt qua
mà không hề suy giảm, các tần số bên ngoài thì ngược lại. Điều này có nghĩa là bộ
lọc này làm suy giảm tất cả các thành phần tần số cao, từ đó làm trơn nhiễu trên ảnh.
Trên Matlab ta sử dụng lệnh fft2 để tính biến đổi Fourier của một ảnh số.
Ví dụ:
I=imread('cameraman.tif');
F=fft2(I);
imshow(abs(F),[]);
Quan sát chúng ta sẽ thấy ở trên phổ tin hiệu, quan sát kỹ sẽ thấy 4 góc có 4 điểm
sáng. Sử dụng lệnh fftshift để dịch phổ về tâm:
FC=fftshift(abs(F)) dich ve tam
imshow(FC,[])
Để hiện thị phổ được rõ, chúng ta sử dụng thêm hàm log.
FC2=log(1+FC); tang cuong do giai
imshow(FC2,[]);
Kết quả:
Bài 14. Viết hàm [x] = idft(X,N) thực hiện biến đổi Fourier ngược, Trong đó
- x(n)=2(0.8)n[u(n)-u(n-20)]
- x(n)=n(0.9)n[u(n)-u(50)]
- x(n)={4,3,2,2,1,4,6,2}
- x(n)=(n+2)(-0.7)n-1u(n-2)
- x(n)=5(-0.9)ncos(0.1πn)u(n)
Thực hiện biến đổi Fourier bằng hàm dft đã xây dựng, biểu diễn phổ pha và phổ
biên độ trên đồ thị 2
Thực hiện biến đổi Fourier bằng hàm fft của Matlab, biểu diễn phổ pha và phổ biên
độ trên đồ thị 3
Chương 4. BIỂU DIỄN HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC
TRONG MIỀN Z
Chúng ta cũng biết rằng quan hệ giữa tín hiệu vào và tín hiệu ra được biểu diễn dưới
dạng một phương trình sai phân hệ số không đổi. Trong phần dưới đây chúng ta sẽ
tìm hiểu cách biểu diễn hệ thống thông qua phép biến đổi Z. Biến đổi Z cung cấp
phương pháp để phân tích hệ thống rời rạc trên lĩnh vực tần số.
Z là một biến phức, và tập hợp các giá trị của Z để cho X(z) hội tụ được gọi là miền
hội tụ (ROC) của biến đổi Z.
Im[z]
Mặt phẳng Z
r=a
Re[z]
Miền hội tụ là miền nằm bên trong vòng tròn có bán kính a.
Một số khái niệm cần nhớ:
Như vậy nếu ta biểu diễn Z(z) dưới dạng phân số N(z)/D(z) thì các điểm cực là
nghiệm của đa thức mẫu số, các điểm không là nghiệm của đa thức tử số.
Trong matlab ta sử dụng hàm tp2zp để tìm các điểm cực, điểm không, và sử dụng
hàm zplane để biễn kết quả trên mặt phẳng z. : Ví dụ
a= [1,2,3];
b=[4,5,6];
[z,p,k]=tf2zp(a,b)
zplane(a,b)
Trong đó b và a 2 vector, là hệ số của phần tử số và mẫu số khi X(z) được biểu diễn
dưới dạng phân thức như sau:
Khi đó, z chứa tập các điểm không, p là tập các điểm cực và k là hệ số truyền đạt
Như vậy biến đổi Z của tổ hợp tuyến tính của hai dãy x 1 và x2 sẽ bằng tổ hợp tuyến
tính của X1 và X2 là biến đổi Z tương ứng của hai tín hiệu này.
Ví dụ:
X1(z)=2+3z-1+4z-2
X2=3+4z-1+5z-2+6z-3
Ta có x1(n)={2,3,4}
x2(n)={3,4,5,6}
x3 =
6 17 34 43 38 24
Như vậy X3=6+17z-1+34z-2+43z-3+38z-4+24z-5
4.3. Biến đổi Z của một số dãy cơ bản
Re s[ X ( Z ) Z n 1 |Z Z pk
đọc là thặng dư của X(Z)Zn-1 tại cực Z=Zpk. Tính tất cả các thặng
dư X(Z)Zn-1 sau đó lấy tổng lại ta sẽ có x(n).
Và tổng các giá trị thặng dư trên được tính bằng công thức:
Khi đó Rk là các giá trị thặng dư, Pk chứa các điểm cực.
Ví dụ:
Xét
Như vậy
Sử dụng Matlab:
b=[0,1];
a=[3,-4,1];
[R,p,C]=residuez(b,a)
Ta có giá trị trả về:
R =
0.5000
-0.5000
p =
1.0000
0.3333
C =
[]
Như vậy chúng ta sẽ có:
Chúng ta cũng có thể quay lại cách biểu diễn trước bằng cách sử dụng hàm residuez
[b,a]=residuez(R,p,C)
b =
-0.0000 0.3333
a =
1.0000 -1.3333 0.3333
Từ biểu thức:
H(z)=Z[h(n)]
Nếu một hệ thống được biểu diễn bằng một phương trình sai phân tuyến tính hệ số
hằng:
Thì khi đó
Trong trường hợp hệ không đệ quy, tức là bậc N=0 vậy ta có:
Hàm truyền đạt cũng có thể biểu diễn bằng các điểm cực và điểm không.
Trong đó zl là các điểm không và pk là các điểm cực, bo được gọi là hệ số chuẩn hóa.
Ví dụ:
Xác định H(z) và biểu diễn các điểm không và điểm cực
Vẽ |H(ejω)| và Ð H(ejω)
Xác định đáp ứng xung h(n)
Giải:
- Các hệ số được nhập vào từ bàn phím (dùng hàm input), đưa danh sách các
điểm cực và điểm không ra màn hình (dùng hàm disp)
De lay diem cuc vaf diem 0 thi tinh thong thuong hoac dung ham (trong slide)
- Vẽ và biểu diễn các điểm cực và điểm không trên mặt phẳng Z
- x(n)= {3,2,1,-1,-2} bien doi Z tin hieu nay de co 2 vector b va a (tren giay)
- nhap vao may thi tinh
- x(n)= d(n-5)
- x(n)=(1/3)4u(n)
Chương 5. BỘ LỌC SỐ
Một hệ thống dùng để làm biến dạng sự phân bố tấn số của các thành phần của một
tín hiệu theo các chỉ tiêu đã cho được gọi là lọc số và bộ lọc số.
Một tín hiệu có đầu vào là x(n) đi qua hệ thống có đáp ứng xung h(n) thì đầu vào và
đầu ra có quan hệ hư sau:
Quan hệ này nói rằng chiều dài của h(n) rất quan trọng, các hệ số h(n) là đặc trưng
cho cả hệ thống. Chính vì thế người ta phân loại các hệ thống thành hai loại tùy theo
chiều dài của đáp ứng xung h(n)
FIR: hệ thống đặc trưng bởi đáp ứng xung có chiều dài hữu hạn, tức là h(n)
khác 0 trong một khoảng có chiều dài hữu hạn N (từ 0 đến N-1)
IIR: Hệ thống đặc trưng bởi đáp ứng xung có chiều dài vô hạn, tức là h(n)
khác 0 trong một khoảng thời gian vô hạn từ 0 đến ∞
Mạch lọc số là những hệ thống số có khả năng chọn lọc tần số, vì vậy có hai loại
mạch lọc tương ứng với hai loại hệ thống số là mạch lọc FIR và mạch lọc IIR. Mạch
lọc số FIR có hàm truyền tổng quát dạng:
Mạch lọc FIR đơn giản nhất là mạch lọc thông thấp bậc nhất mà ta thường gọi là hệ
thống trung bình động. Hệ thống này có hàm truyền:
Hàm truyền này có một điểm không tại z=1 và một điểm cực tại z=0. Đáp ứng tần số
của mạch lọc này là:
Trong Matlab biểu diễn đáp ứng biên độ và đáp ứng pha của mạch lọc FIR thông
thấp bậc nhất:
b=[0.5 0.5];
a=[1];
[H,w]=freqz(b,a,100);
subplot(1,2,1);plot(w/pi,abs(H));
subplot(1,2,2);plot(w/pi,angle(H));
Kết quả:
Nếu mắc nối tiếp các mạch lọc thông thấp này với nhau thì đáp ứng tần số của mạch
lọc thông thấp mới được cải thiện, mạch lọc thông thấp nối tiếp sẽ có đáp ứng biên
độ đốc hơn tuy nhiên độ rộng dải thông bị giảm xuống.
Mạch lọc thông cao đơn giản nhất thu được bằng cách thay thế z=-z vào trong biểu
thức hàm truyền của của mạch lọc FIR thông thấp, như vậy hàm truyền của mạch
lọc FIR thông cao có dạng:
Đáp ứng tần số của mạch lọc thông cao được cải thiện nếu mắc nối tiếp nhiều tầng
mạch lọc thông cao đơn giản khi đó thu được mạch lọc thông cao bậc cao hơn.
Mạch lọc IIR đơn giản nhất là mạch lọc số IIR bậc nhất
Trong đó hệ số |α|<1 để mạch lọc ổn định, hàm truyền trên có một điểm không tại
z=-1 và một điểm cực tại z=α
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);plot(w/pi,abs(H1),'b--',w/
pi,abs(H2),'r-',w/pi,abs(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);plot(w/pi,angle(H1),'b--',w/
pi,angle(H2),'r-',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Kết quả:
Hàm truyền đạt của mạch lọc IIR thông cao bậc nhất cho bởi:
Trong đó hệ số |α|<1 để mạch lọc ổn định, hàm truyền trên có một điểm không tại
z=1 và một điểm cực tại z=α
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);plot(w/pi,abs(H1),'b--',w/
pi,abs(H2),'r-',w/pi,abs(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);plot(w/pi,angle(H1),'b--',w/
pi,angle(H2),'r-',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Kết quả:
Sử dụng Matlab để biểu diễn đáp ứng biên độ và đáp ứng tần số:
beta=0.3;
alpha1=0.9; b1=[1-alpha1,0, -1+alpha1]; a1=[2,-
2*beta*(alpha1+1),2*alpha1];
alpha2=0.7; b2=[1-alpha2,0, -1+alpha2]; a2=[2,-
2*beta*(alpha2+1),2*alpha2];
alpha3=0.4; b3=[1-alpha3,0, -1+alpha3]; a3=[2,-
2*beta*(alpha3+1),2*alpha3];
[H1,w]=freqz(b1,a1,100);
[H2,w]=freqz(b2,a2,100);
[H3,w]=freqz(b3,a3,100);
subplot(2,1,1);plot(w/pi,abs(H1),'b--',w/
pi,abs(H2),'r-',w/pi,abs(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
subplot(2,1,2);plot(w/pi,angle(H1),'b--',w/
pi,angle(H2),'r-',w/pi,angle(H3),'g-');
legend('alpha=0.9','alpha=0.7','alpha=0.4');
Kết quả:
Bài tập: Nếu giữ nguyên giá trị alpha=0.5 và thay đổi giá trị beta= 0.9, 0,7 và 0.4
Bài tập: biểu diễn đáp ứng biên độ và đáp ứng tần số
Cho tin hieu rui xac dinh la thong thap hay cao?
Chương 6. XỬ LÝ ẢNH TRONG MATLAB
Trong xử lý ảnh nhiễu đóng vai trò chủ yếu gây ra khó trong việc phân tích. Giữa
ảnh thực và ảnh số hóa có sự khác nhau do có nhiều quá trình can thiệp vào. Khi
xem xét các ảnh người ta thấy điểm nhiễu là những điểm có giá trị mức xám trội hơn
hẳn. Xem xét một cách tương đương trong không gian tần số, nhiễu ứng với các
thành phần tần số cao của ảnh. Do vậy người ta nghĩ đến việc biến đổi có tính đến
ảnh hưởng của các phần tử lân cận bằng cách lấy “tổ hợp” các điểm lân cận này
(trong không gian thực), hoặc lọc các thành phần tần số cao (trong không gian tần
số).
Cơ sở lý thuyết của kỹ thuật lọc số dựa trên tính dư thừa thông tin không gian, các
pixel lân cận có thể có cùng hoặc gần cùng một số đặc tính. Trong kỹ thuật này,
người ta sử dụng một mặt nạ di chuyển khắp ảnh gốc. Tùy theo cách tổ hợp điểm
đang xét với c ác điểm lân cận mà ta có kỹ thuật lọc tuyến tính hay lọc phi tuyến
Phép dãn là phép thay đổi tuyến tính biểu đồ Histogram, không làm thay đổi hình
dạng của ảnh. Công thức của phép dãn histogram là:
Trong Matlab sử dụng lệnh imtool, đễ dãn histogram, khi sử dụng lệnh này, Matlab
sẽ hiện lên cửa sổ imtool, sử dụng công cụ này dể dãn histogram của ảnh.
6.1.2. San phẳng (cân bằng) histogram
Cân bằng Histogram là phép biến đổi phi tuyến nhằm thu được sự phân bố đều các
giá trị mức xám. Công thức của phép san phẳng histogram
Matlab cung cấp cho ta hàm histeq để thực hiện cân bằng histogram.
I2 = imadjust(I);
Ví dụ với ảnh trên:
6.2. Phép lọc ảnh trên miền không gian
Cơ sở tính toán của phép lọc tuyến tính là giựa trên phép nhân chập. Ảnh thu được
sẽ là tổng hợp trọng số hay là trung bình trọng số các điểm lân cận với mặt nạ, điểm
chịu tác động của biến đổi là điểm ở tâm mặt nạ.
Type Mô tả
fspecial(‘average’)
fspecial(‘unsharp’)
Để lọc ảnh sử dụng các mặt nạ trên, trong Matlab người ta sử dụng hàm imfilter, cú
pháp như sau:
>> imfilter(A,h)
Trong đó:
H: mặt nạ lọc
Khi đó ảnh sau khi sử dụng phép lọc thường có viền đen. Để không xuất hiện viền
đen người ta thường thêm tham số trong cậu lệnh:
>> I3 = imfilter(I,h,'replicate'); loai bo vien den
Khi đó: vùng ảnh tại biên sẽ được sao chép, sau đó mới tiến hành phép nhân chập
6.2.2. Lọc phi tuyến
Mục đích của lọc phi tuyến là giảm nhiễu xung. Khác với lọc tuyến tính, đối với lọc
phi tuyến thì coi kết quả của một điểm ảnh là tổ hợp tuyến tính của các điểm lân cận.
Đặt một cửa sổ lọc có xếp chồng lên ảnh sao cho điểm trung tâm của cửa sổ trùng
với điểm đang xét. Ta thu được a(K) giá trị của mức xám. Sắp xếp giá lại các giá trị
của a(K) thu được ở trên theo thứ tự độ lớn tăng dần. Sau đó tính giá trị của điểm
ảnh theo quan hệ:
Trong đó w(k) là giá trị hệ số lọc của cửa sổ w tương ứng với a(k)
Bộ lọc giãn:
a. Đặt cửa sổ lọc tại vị trí quan tâm, phần tử đang xét sẽ có láng
giềng.
b. Tính giá trị trung bình của k phần tử láng giềng đó ta được M k,
sử dụng phép nhân chập
Trong đó là một ngưỡng tùy ý, thường bằng 10% đến 15% của Mk
Trong Matlab có thể sử dụng hàm ordfilt2 để thực hiện phép lọc phi tuyến. Với cú pháp I2=
ordfilt2(I1, order, domain)
Trong đó I1 và I2 lần lượt là ảnh trước và sau phép lọc, order là vị trí lấy giá trị trên
miền domain.
Giả sử muốn lấy phần tử nhỏ nhất trong lân cận mn, ta dùng lệnh:
g=ordfilt2(f,1,ones(m,n));
Hoặc muốn lấy phần tử lớn nhất:
g=ordfilt2(f,m*n,ones(m,n));
Một trường hợp đặc biệt của lọc hạng là bộ lọc trung vị, trong đó phần tử được chọn
là phần tử xếp hạng chính giữa. Bộ lọc này thường được sử dụng trong thực tế.
g=ordfilt2(f,median(1:m*n),ones(m,n));
Matlab cũng cung cấp hàm medfilt2 để thực hiện lọc trung vị.
Ví dụ:
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
imshow(J), figure, imshow(K)
Kết quả:
Hình thứ nhất là ảnh chụp bị nhiễu salt and pepper. Sử dụng bộ lọc trung trung vị
cho ta kết quả hình b, ảnh đã loại bỏ hoàn toàn nhiễu.
6.2.3. Khôi phục ảnh
Khôi phục ảnh tập trung vào việc loại bỏ hay giảm thiểu sự biến dạng xảy ra trong
quá trình thu nhận ảnh. Sự biến dạng ảnh có thể bao gồm:
Nhiễu gaussian
Tìm các nơi đạo hàm bậc nhất của cường độ sáng có biên độ hơn một ngưỡng.
Tìm các nơi đạo hàm bậc hai của cường độ sáng có sự thay đổi qua mức 0
Trong Matlab ta sử dụng hàm edge, cú pháp
I2 = edge (I1,'method')
Xét ví dụ:
I= imread('rice.tif');
BW1 = edge(I,'prewitt'); prewitt va canny la cac matna
BW2 = edge(I,'canny');
imshow(BW1)
figure, imshow(BW2)
Kết quả: