Giáo Trình Xử Lý Tín Hiệu Nâng Cao
Có thể bạn quan tâm
Trang chủ Tìm kiếm Trang chủ Tìm kiếm Giáo trình xử lý tín hiệu nâng cao doc 90 4 MB 3 61 4.8 ( 20 lượt) Xem tài liệu Nhấn vào bên dưới để tải tài liệu Tải về Đang chuẩn bị: 60 Bắt đầu tải xuống Để tải xuống xem đầy đủ hãy nhấn vào bên trên Chủ đề liên quan Giáo trình xử lý tín hiệu Xử lý tín hiệu nâng cao Xử lý tín hiệu số giáo trình matlab ngôn ngữ lập trình cấp cao hệ tọa phẳng
Nội dung
Chương 1. TỔNG QUAN VỀ CÔNG CỤ MATLAB.........................................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. 3.1. PHÉP BIẾN ĐỔI FOURIER...........................................................38 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. MIỀN Z BIỂU DIỄN HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC TRONG 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 1.1. Giới thiệu MatLab (Matrix Laboratory) là một ngôn ngữ lập trình cấp cao dạng thông dịch, được phát triển bởi MathWorks. Matlab được ứng dụng để giải quyết các bài toán khác nhau đặt biệt là các hệ phương trình tuyến tính, phi tuyến và đặc biệt là các bài toán ma trận với kết quả nhanh chóng và chính xác. Matlab là một công cụ mạnh và đáp ứng được cho nhiều lĩnh vựng đa dạng như các ngành về kỹ thuật như điện, điện tử, vật lý, hóa học v.v... cho đến các ngành về kinh tế như thống kê, kế toán v.v... 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. 1.2. Sử dụng biến trong matlab 1.2.1. Quy cách đặt tên 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ự Tên biến phân biệt chữ hoa và chữ thường Tên biến bắt đầu bằng chữ cái Ký tự dấu chấm “.” không được sử dụng để trong đặt tên biến. Trong Matlab có những biến đặc biệt trong bảng sau: Các biến đặc biệt ans pi esp inf NaN hoặc nan i và j realmin realmax Giá trị Biến mặc định trả về kết quả số pi Số nhỏ nhất lớn hơn 0 Để chỉ số vô cùng Để chỉ số ko xác định như kết quả của 0/0 Số phức, i=j=sqrt(-1) Số dấu chấm động nhỏ nhất (2-1022 = 2.2251e-308) Số dấu chấm động lớn nhất (21024 = 1.7977e+308) 1.2.2. Véc tơ và matrậ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 2 4 1 5 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. Xét trong ví dụ trên: >> M(1,1) ans = 3 >> 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 = J >> 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 4 2 5 3 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 4 0 2 5 0 3 6 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 2 5 0 3 6 1 2 5 0 1 1 1 3 6 2 1 1 1 >> M=[M,N] M = 1 4 0 1 1 1 1 1 1 1 1 1 Hoặc: >> M=[M;N] M = 1 4 0 1 1 1 1.3. Một số lệnh thông dụng trong Matlab clc: Xóa màn hình cửa sổ lệnh who: xem tên biến trong không gian làm việc của Matlab Ví dụ: >> who Your variables are: A M N whos: xem chi tiết hơn về các biến Ví dụ: >> whos Name A M Size Bytes 1x10 6x3 80 144 Class double array double array N 3x3 72 double array Grand total is 37 elements using 296 bytes clear: Xóa các biến trong bộ nhớ của Matlab help: yêu cầu sự giúp đỡ 1.4. Các toán tử và hàm 1.4.1. Các toán tử và các hàm cơ bản 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ử Phép cộng Phép trừ Phép nhân Phép chia 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 Ký hiệu + * / hoặc \ ^ ' =, >, =, > 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 g r c xanh da trời xanh lá cây đỏ xanh xám . 0 x + điểm tròn dấu x dấu + : -. -- nét liền đường chấm đường gạch chấm đường gạch gạch m y k w đỏ tím vàng đen trắng * s d v, ^, p,h hoa thị vuông kim cương tam giác 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: grid on/off: thêm/bỏ đường lưới vào đồ thị box on/off: thêm/bỏ hộp chứa đồ thị asix on/off: thêm/bỏ trục tọa độ xlabel('Trục x'): thêm nhãn cho trục x ylabel('Truc y'): thêm nhãn cho trục y title('Do thi ham sin'): thêm tiêu đề ở đỉnh cho đồ thị Để 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) Một số đồ loại khác trong Matlab pie: vẽ đồ thị tròn pareto: đồ thị pareto bar: đồ thị dạng cột 1.5.2. Đồ thị trong không gian ba chiều Đồ 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 = -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 0 0 0 0 0 0.5000 0.5000 0.5000 0.5000 0.5000 1.0000 1.0000 1.0000 1.0000 1.0000 -1.0000 -0.5000 0 0.5000 1.0000 -1.0000 -0.5000 0 0.5000 1.0000 -1.0000 -0.5000 0 0.5000 1.0000 -1.0000 -0.5000 0 0.5000 1.0000 Y = -1.0000 -0.5000 0 0.5000 1.0000 X,Y là một cặp ma trận tương ứng với một lưới chữ nhật trong mặt phẳng x-y. Z là một hàm số theo x,y cuối cùng, sử dụng hàm mesh(x,y,z) để vẽ đồ thị. 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ả: 1.6. Lập trình trong Matlab Trong Matlab, ta thực hiện các yêu cầu tại dấu nhắc trong cửa sổ lệnh nhanh và hiệu quả, tuy nhiên với những lệnh được sử dụng nhiều lần, hoặc trong những chương trình lớn, sử dụng nhiều câu lệnh, ta có thẻ lưu trong file và yêu cầu Matlab mở file để thực hiện các lệnh. 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: Biểu thức điều kiện: If, else , elseif. switch Vòng lặp: for, while. 1.7. Matlab GUI Matlab GUI là là giao diện hình ảnh của chương trình, chúng bao gồm các nút bấm, các thanh trượt, các cửa sổ, menu v.v... được sử dụng để cung cấp cho người dùng một môi trường làm việc đơn giản và thân thiện. 1.7.1. Môi trường làm việc Để bắt đầu, sử dụng lệnh guide 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 Còn menu thì quan trọng nhất là menu Tools có: Run (Ctr + T) : nhấn vào để chạy chương trình mà ta đã viết. Align Object: dùng để làm cho các điều khiển Grid and Rulers : Hiện thị lưới trợ giúp để vẽ giao diện Menu Editor : trình này để tạo menu cho điều khiển Tab Order Editor : sắp xếp Tab order là thứ tự khi ta nhấn phím Tab Gui Options : Tùy chỉnh khác 1.7.2. Thuộc tính của các điều khiể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. Ví dụ đối với thuộc tính của editbox Thuộc tính quan trọng của Edit Box bao gồm: 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. 1.7.3. Viết sự kiện cho các điều khiển 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: hObject : handle của điều khiển của control handles : là một cấu trúc chứa tất cả các điều khiển và dữ liệu người dùng. Dùng cái này để truy suất các điều khiển khác. Ví dụ disp('Hello') Chú ý, Matlab là ngôn ngữ lập trình thông dịch vì vậy sau khi sửa mã, không cần biên dịch lại. Để 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)); 1.7.4. Debug trong Matlab 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. 1.7.5. Vẽ đồ thị - sử dụng component AXES 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') 1.7.6. Điều khiển Toggle – nút bấm 2 trạng thái Trong hàm callback, để lấy trạng thai của nút bấm, sử dụng hàm get Ví dụ để tắt, bật lưới trên đồ thị. button_state = get(hObject,'Value'); if button_state == get(hObject,'Max') grid on; elseif button_state == get(hObject,'Min') grid off; end 1.7.7. Điều khiển Slider – thanh trượt 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] Một ví dụ đơn giản: axes(handles.axes2); k= get(hObject,'Value'); set(handles.edit1,'String',k) n=1:k; x=rand(1,k); stem(n,x); 1.8. Bài tập chương 1 Bài 1. Nhập vào ma trận: A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] a. Tìm kích thước ma trận A b. Lấy dòng đầu tiên của ma trận A. c. Tạo ma trận B bằng 2 cột của ma trận A. d. Tạo ma trận B bằng 3 dòng đầu của ma trận A. e. Tính tổng các phần tử trên các cột của A f. Tính tổng các giá trị ở cột 1, g. Tính tổng các phần tử trên các hàng của A Hướng dẫn giải: a. Sử dụng hàm size b. A(1,:) c. B = A(:,[2,3]) d. B = A(1:3,:) e. sum(A) f. sum(A(:,1)) g. sum(A') Bài 2. Giải hệ phương Ax=b, với: A= 1 2 3 0 5 1 1 3 0 và b = 1 1 2 Hướng dẫn giải: Ax=b vậy x=inv(A)*b Bài 3. Vẽ đồ thị hàm số y1=sinx.cos2x và hàm số y2=sin(x2) trong [0-2], khoảng chia 0.1. Và biểu diễn hai đồ thị trên cùng một cửa sổ. Hướng dẫn giải: x = 0: 0.1 : 2; y1= sin(x).*cos(2*x); y2 = sin(x.*x); subplot(1,2,1); plot(x,y1);title('ham y1 = sin(x) * cos(2*x)');xlabel('X');ylabel('Y'); subplot(1,2,2); plot(x,y2);title('ham y2 = sin(x*x)');xlabel('X');ylabel('Y'); Bài 4. Viết chương trình trong Matlab có nút bấm, để vẽ đồ thị Chương 2. TÍN HIỆU RỜI RẠC 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: x[n]={-3 , 2, 4, -4, 0, 1…} với n là số nguyên 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. 2.2. Các tín hiệu cơ sở 2.2.1. Dãy xung đơn vị 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: 1, 0, ( n) n 0 ,0,0, 1,0,0, n 0 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: x[ n] x[ k ] [ n k ] k Ở đây dãy δ[n-k] bằng đơn vị khi n=k và bằng 0 khi n khác k Trong Matlab ta có thể biểu diễn như sau: 1, n n0 ( n n 0 ) , n1 n n2 , n1 n0 n 2 0, n n0 Hàm delta có giá trị bằng 1 tại n0, như vậy ta có thể tạo trong Matlab, tạo hàm xung đơn vị trên khoảng [n1,n2] ta viết một hàm trong matlab như sau: function [x,n]=impseq(n0,n1,n2) n=[n1:n2]; x=[(n-n0)==0]; Ví dụ: Tạo dãy xung đơn vị trong khoảng [-5:5] n=[-5:5] x=impseq(0,-5,5) stem(n,x) Kết quả: 2.2.2. Dãy nhảy bậc đơn vị 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: 1 when n 0 u n 0 when n 0 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: x n x k (u n u n 1 ) k 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: Ví dụ: vẽ đồ thị tín hiệu: x[n]=2*δ[n-5]-4*δ[n+7] trên đoạn [0:10] n=[-10:10] x=2*impseq(5,-10,10)-4*impseq(-7,-10,10) stem(n,x); Kết quả: Ví dụ vẽ đồ thị tín hiệu rời rạc: x n e 0.3 n 10 u n 10 u n 20 trên đoạn [0:20] x=exp(-0.3*(n-10)).*(stepseq(10,0,20)-stepseq(20,0,20)); stem(n,x) Kết quả: 2.2.3. Dãy tín hiệu hình sin 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. n n sin trên đoạn [0:50] 10 2 20 2 Ví dụ tạo dãy tín hiệu: x n 2 cos n=[0:50]; x=2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2); stem(n,x); Kết quả: n n sin (trong ví dụ trên) bị ảnh hưởng bởi 10 2 20 2 Ví dụ tín hiệu x n 2 cos nhiễu Gauss: y[n]=x[n]+0.2*w[n] n=[0:50]; x=2*cos(pi*n/10-pi/2)-sin(pi*n/20+pi/2); y=x+0.2*randn(1,51); stem(n,y); Kết quả: 2.2.4. Dãy e-mũ phức Dãy e-mũ phức được định nghĩa bởi hệ thức: x n ae j (n ) a cosn j sin n 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. Ví dụ với dãy x n e 0.1jn trên đoạn [-10:30] n=[-10:20]; x=exp(0.1j*n*pi); subplot(221);stem(n,real(x));title('Phan thuc'); subplot(222);stem(n,imag(x));title('Phan ao'); subplot(223);stem(n,abs(x));title('Bien do'); subplot(224);stem(n,angle(x));title('Pha cua x'); Kết quả: Ta có x n ae j (( 2 ) n ) ae j (n ) .e 2jn ae j (n ) 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] 2.3. Các phép toán trên tín hiệu Xử lý tín hiệu số là sử dụng các phép toán tác động lên tín hiệu lối vào để tạo ra một tín hiệu ra. Về mặt công thức, ta sử dụng một hàm F, tác động lên tín hiệu đầu vào để được tín hiệu ở đầu ra. 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: 2.3.1. Phép dịch chuyể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. Để thuận tiện, ta tạo một hàm dịch chuyển có tên là sigshift: function [y,m]=sigshift(x,n,n0) m=n+n0; y=x; 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) 2.3.2. Phép nhân, cộng tín hiệu 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: y[ n] h[ n] x[ n] x[ k ]h[ n k ] h[ k ] x[ n k ] k k 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. 2.4. Phương trình sai phân hệ số hằng Ta có với kích thích đầu vào x(n) và đáp ứng ra y(n) của hầu hết các hệ thống tuyến tính thỏa mãn một phương trình sai phân tuyến tính sau đây: N M k 0 r 0 ak y (n k ) br x(n r ) 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: y=filter(b,a,x), trong đó a, b là các ma trận hệ số trong công thức trên: Ví dụ: y(n)-y(n-1)+0.9y(n-2)=x(n) hãy tính đáp ứng xung của hệ thống h(n). a=[1,-1,0.9]; b=[1]; x=impseq(0,-10, 100); h=filter(b,a,x); stem(h); Kết quả: 2.5. Tín hiệu hai chiều (ảnh số) 2.5.1. Biểu diễn ảnh 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: 2.5.2. Đọc ảnh, hiển thị và lưu ảnh a. Đọc ảnh Trong Matlab sử dụng hàm imread(‘filename’) để đọc một ảnh: >> I = imread('cameraman.tif'); Khi đó I sẽ là ma trận ảnh số. Trong matlab có thể sử dụng lệnh whos để xem chi tiết về các biến, ở đây sử dụng lệnh whos ta sẽ có thông tin về ma trận I: >> whos I Name Size Bytes Class Attributes I 291x240 69840 uint8 Hàm size(tên biến) cho kích thước của ảnh >> [M,N]= size(I) M = 291 N = 240 Hàm iminfo(‘filename’) trong Matlab được sử dụng để hiện toàn bộ thông tin của một ảnh >> imfinfo('pout.tif') ans = Filename: 'pout.tif' FileModDate: '04-Dec-2000 13:57:50' FileSize: 69004 Format: 'tif' FormatVersion: [] Width: 240 Height: 291 BitDepth: 8 ColorType: 'grayscale' FormatSignature: [73 73 42 0] ByteOrder: 'little-endian' NewSubFileType: 0 BitsPerSample: 8 Compression: 'PackBits' PhotometricInterpretation: 'BlackIsZero' StripOffsets: [9x1 double] SamplesPerPixel: 1 RowsPerStrip: 34 StripByteCounts: [9x1 double] XResolution: 72 YResolution: 72 ResolutionUnit: 'Inch' Colormap: [] PlanarConfiguration: 'Chunky' TileWidth: [] TileLength: [] TileOffsets: [] TileByteCounts: [] Orientation: 1 FillOrder: 1 GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1 b. Hiển thị ảnh Hàm imshow trong Matlab được sử dụng để hiện ảnh. % Hiển thị một ảnh từ file >> imshow('cameraman.tif') % Hiển thị một ảnh và phóng to 150% >> imshow('cameraman.tif','InitialMagnification',150); c. Lưu ảnh Lưu một ảnh từ ma trận I ra một file, sử dụng hàm imwrite(I,’filename’): >> imwrite (I, 'pout2.png'); 2.5.3. Cải thiện sự tương phản của ảnh Biểu đồ histogram của ảnh I >> figure, imhist(I) Cân bằng Histogram >> I2 = histeq(I); Hiệu chỉnh Histogram >>I2 = imadjust(I); 2.5.4. Tạo ảnh nhị phân từ ảnh đã cho >>level = graythresh(I3); graythresh: xác định mức xám của ảnh sử dụng phương pháp Otsu >>bw = im2bw(I3,level); >>figure, imshow(bw) Có thể xác định số đối tượng có trong ảnh nhị phân đó bằng lệnh: >>[labeled,numObjects] = bwlabel(bw,4); Khi đó numObjects là số đối tượng trong ảnh bw 2.6. Bài tập chương 2 Bài 1. Biểu diễn các tín hiệu sau trong Matlab, và vẽ đồ thị biểu diễn tín hiệu x(n) (0.5) n cos(2 n ) x(n) 5cos(2 n ) 3 Bài 5. 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 6. 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. x[n]=2*δ[n-5]-4*δ[n+7] trên đoạn [0:10] c. x(n)=3u((n-3) + δ(n+10) trên đoạn [-3:3] Bài 7. Hãy sử dụng Matlab để xác định năng lượng của tín hiệu a. 2*δ[n-5]-4*δ[n+7] b. x(n)=3u((n-3) + δ(n+10) Hướng dẫn giải: Năng lượng của tín hiệu sum(abs(x.^2)) Bài 8. Cho 2 tín hiệu sau đây: a. x1(n) = {0, 1,2,3} 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 Hướng dẫn giải: n1 = [0 1 2 3]; x1 = [0 1 2 3]; n2 = [-1 0 1 2]; x2 = [0 1 2 3]; n = min(min(n1), min(n2)): max(max(n1), max(n2)); x1i = zeros(1, length(n)); x2i = x1i; x1i(find((n>=min(n1)) & (n=min(n2)) & (n số lượng phép tính rất lớn N X (e j ) x(n)e jn 0 N X (e j ) x (n)e 0 even x(n)e jn n jn N 1 2 x ( 2m)e m 0 odd x ( n)e jn n j 2 m N 1 2 x(2m 1)e j ( 2 m 1) m 0 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. Trong Matlab hàm fft để tính Fourier nhanh: 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 3.4.1. Đáp ứng tần số 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: y ( n) h(n) e jn h(k )e j ( n k ) j k jn h ( k )e FT h( n) e jk H (e j )e jk e Áp dụng tính chất của biến đổi Fourier, ta cũng sẽ có: Y ( e j ) H ( e j ) X ( e j ) Với H(ejω) được gọi là đáp ứng tần số của hệ thống, và được tính bởi công thức: H (e j ) FT h n h( n)e jn n 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: 1 h(n) IFT H (e ) 2 j H (e j ) e j n d 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 h(n) 0.9 n u (n) 0 0 H (e j ) h(n)e jn 0.9 n e jn (0.9e j 1 )n 1 0.9e j 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: Bộ lọc thông thấp Bộ lọc thông cao Bộ lọc thông dải Bộ lọc chắn dải a. Bộ lọc thông thấp lý tưởng Bộ lọc thông thấp được định nghĩa bằng công thức: 1 H ( e j ) 0 - c c otherwise Với –π ≤ ω ≤ π |H(ejω)| 1 ω -π -ωc 0 ωc π Trong đó: ωc: tần số cắt - ωc ≤ ω ≤ ωc: dải thông - π ≤ ω ≤ ωc và ωc ≤ ω ≤ π: dải chắn Ví dụ: Xác định và vẽ đồ thị đặc tính xung h(n) của bộ lọc số thông thấp lý tưởng có tần số cắt ωc=π/3 Đặ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ó: h(n) sin(n 3) n. 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 ...-9 0,03 0,04 0,04 -6 -9 0,14 -8 0,03 -3 -6 -5 -0,05 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ... 8 -0,07 -0,05 -0,07 h(n) của bộ lọc thông thấp lý tưởng pha không với c 3 . 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ế. b. Bộ lọc thông cao lý tưởng Bộ lọc thông thấp được định nghĩa bằng công thức: 1 H ( e j ) 0 Với –π ≤ ω ≤ π - c and otherwise c n |H(ejω)| 1 ω -π 0 -ωc π ωc Trong đó: ωc: tần số cắt - ωc ≤ ω ≤ ωc: dải thông - π ≤ ω ≤ ωc và ωc ≤ ω ≤ π: dải chắn c. Bộ lọc thông dải lý tưởng Bộ lọc thông thấp được định nghĩa bằng công thức: 1 H ( e j ) 0 - c2 ` c1 and c1 c2 otherwise Với –π ≤ ω ≤ π |H(ejω)| 1 ω -π -ωc2 -ωc1 Trong đó: ωc: tần số cắt - ωc ≤ ω ≤ ωc: dải thông - π ≤ ω ≤ ωc và ωc ≤ ω ≤ π: dải chắn 0 ωc1 ωc2 π 3.5. Phép biến đổi Fourier của tín hiệu hai chiều 3.5.1. Phép biến đổi Fourier Khái niệm và công thức 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: F (u , v ) f ( x, y )e 2 j ( ux vy ) dxdy 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ố. Theo đó ánh xạ ngược của phép biến đổi sẽ là: f ( x, y ) F (u , v )e 2 j ( uxvy ) dudv 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: M 1 N 1 X ( u , v ) x ( m, n ) e um vn 2 j M N m 0 n 0 Và ánh xạ ngược của phép biến đổi là: um vn M N 2 j 1 M 1 N 1 x (m, n ) X ( u , v )e MN u 0 v 0 Khi đó tập hợp giá trị X(u,v) hình thành lên miền tần số (frequency domain), Mỗi thành phần của X(u,v) gọi là thành phần của tần số (frequency components) 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: X (u , v ) X (u , v ) e j arg( u ,v ) 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: X (u , v) Re 2 ( X (u , v)) Im 2 ( X (u , v)) 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: Im( X (u , v )) arg(u , v ) arctan Re( X (u , v )) 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ố. Một số tính chất của DFT Chuyển đổi: M 1 N 1 X (u a , v b) x ( m, n )e ( u a ) m ( v b ) n 2 j M N m 0 n 0 M 1 N 1 x (m, n )e um vn 2 j M N e am bn 2 j M N m 0 n 0 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 X( u Tức là: um vn M N M 1 N 1 2 j M N , v ) x ( m, n ) e 2 2 m0 n 0 ( 1) ( mn ) FT( x (m, n )) X(u , v) FT( x (m, n )( 1) ( m n ) ) X(u M N ,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ố. Tính đối xứng và đơn vị FT(u,v)=F(u,v) 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ó: F(u , v) F(u M, v) F(u , v N) F(u M, v N) Tích chập của 2 tín hiệu Giả sử có 2 tín hiệu x(m,n) và h(k,l) 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ố Cơ sở lý thuyết 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. Có thể hình dung như sau: x(m,n) filter DFT F(u,v) IDFT y(m,n) H(u,v)F(u,v) Làm trơn ảnh bằng phép lọc thông thấp 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: 1 H( u , v) 0 if if D(u, v) D 0 D(u, v) D 0 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 M N D( u , v ) u v 2 2 Có thể hình dung như sau: 2 Với Y(u,v)=X(u,v)H(u,v) Ý 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)) imshow(FC,[]) Để hiện thị phổ được rõ, chúng ta sử dụng thêm hàm log. FC2=log(1+FC); imshow(FC2,[]); Kết quả: 3.6. Bài tập chương 3 Bài 1. Bài 2. Xác định các hệ số ck, biên độ tần số, và phổ pha của dãy tín hiệu rời rạc tuần hoàn x(n) = {0^, 1, 2, 3} với chu kỳ N = 4. Xác định biến đổi Fourier của tín hiệu rời rạc thời gian và không tuần hoàn sau : x ( n) 0.5n u ( n) Bài 3. Bài 4. Bài 5. Tìm biến đổi Fourier của tín hiệu xung Aδ(n) (rời rạc và không tuần hoàn) Cho hệ thống rời rạc với đáp ứng xung là h(n) = δ(n) + δ(n-1) và tín hiệu nhập x(n) = 0.5nu(n). Tìm đáp ứng y(n) sử dụng phương pháp biến đổi Fourier Sử dụng tín hiệu nhập x(n) = 0.5nu(n) cho qua hai hệ thống: h1 (n) h2 (n) (n) (n 1) Xác định y(n) bằng phương pháp biến đổi Fourier. Bài 6. Xác định chuỗi Fourier của tín hiệu liên tục thời gian và tuần hoàn sau : x(t ) cos 0t Bài 7. Xác định biến đổi Fourier của tín hiệu liên tục thời gian và không tuần hoàn sau : x(t) = e−αtu(t), α > 0 với Bài 1. 0 u (t ) 1 ,t 0 , t 0 Xác định biến đổi Fourier của t x(t ) triag t t 1 Với: triag 0 Bài 2. , t , t Tìm biến đổi Fourier của các tín hiệu sau a. x(t ) e jw t 0 t b. x(t ) rect T Với: c. Bài 3. 1 rect (t / T ) 0 , t T , t T x (t ) (t nT ) n Tìm biến đổi Fourier của các tín hiệu a. x(n) u (n) u (n 6) b. x(n) 2n u ( n) n 1 c. x(n) u (n 4) 4 n d. x(n) sin 0 n u (n) , 1 n e. x(n) sin 0 n , 1 f. 2 x(n) 1 n , n 4 2 0 , n 4 g. x(n) { 2, 1, 0 ,1,2} Bài 1. Tìm biến đổi Fourier của x(n) = 0.1n, với n≥0. Vẽ đồ thị cường độ và pha của X(). Bài 2. Tìm biến đổi Fourier của : x(n) (n) (n 1) (n 2) (n 3) Vẽ đồ thị cường độ và pha của X(). Bài 3. Cho hệ thống có : h(n) 0.1 ( n) 0.2 ( n 2) 0.5 ( n 3) Vẽ đồ thị cường độ và pha của H(). Bài 4. Cho phương trình sai phân : y ( n) 0.1 y ( n 1) 0.2 y ( n 2) x( n) 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ố. 4.1. Phép biến rổi Z hai phía Biến đổi Z hai phía của dãy x[n] được định nghĩa như sau: X ( z ) Z [ x ( n)] x( n) z n n 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. Ví dụ: xét tính hội tụ của dãy anu(n) với a ≠ 0. n X ( z ) a z 0 n n z a z a 0 z Hội tụ khi |a/z| < 1 hay khi |z| > |a| Mặt phẳng Z Im[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ớ: Điểm cực: là điểm mà tại đó X(z)=∞ Điểm không: là điểm mà tại đó X(z)=0 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: b0 b1 z 1 ... bM z M X (z) a0 a1 z 1 ... a N z N 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 4.2. Một số tính chất của biến đổi Z 4.2.1. Tính tuyến tính Z [ a1 x1 (n) a2 x2 (n)] a1 X 1 ( z ) a2 X 2 ( z ); ROC : ROCx1 ROCx2 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. 4.2.2. Dịch mẫu – tính chất trễ Z [ x(n n0 )] z n0 X ( z ); ROC : ROC x 4.2.3. Dịch tần số z Z [a n x(n)] X ; a ROC : ROC x scaled by | a | 4.2.4. Biến số đảo X [ x ( n)] X (1 / z ); ROC : Inverted ROC x 4.2.5. Liên hợp phức Z [ x * ( n)] X * ( z * ); ROC : ROC x 4.2.6. Tích của hai dãy Z [ x1 ( n) x 2 ( n)] 1 2j X C 1 (v ) X 2 ( z / v )v 1 dv ROC : ROC x1 ROC x2 4.2.7. Tích chập của hai dãy Z [ x1 ( n) * x 2 (n)] X 1 ( z ) X 2 ( z ) ROC : ROC x1 ROC x2 Ví dụ: X1(z)=2+3z-1+4z-2 X2=3+4z-1+5z-2+6z-3 Cần tính X3=X1X2 Dễ dàng tính được X3=6+17z-1+34z-2+43z-3+38z-4+24z-5 Ngoài ra chúng ta cũng có thể sử dụng phép nhân chập Ta có x1(n)={2,3,4} x2(n)={3,4,5,6} Ta sử dụng matlab để tính nhân chập: x1=[2,3,4]; x2=[3,4,5,6]; x3=conv(x1,x2) x3 = 6 17 34 43 Như vậy X3=6+17z-1+34z-2+43z-3+38z-4+24z-5 38 24 4.3. Biến đổi Z của một số dãy cơ bản Sequence Transform ROC ( n) 1 z 1 u ( n) | z | 1 1 z 1 1 u ( n 1) | z | 1 1 z 1 1 a n u ( n) | z || a | 1 az 1 1 b nu ( n 1) | z || b | 1 bz 1 Sequence Transform (a sin w0 ) z 1 [a n sin w0 n]u (n) 1 (2a cos w0 ) z 1 a 2 z 2 1 (a cos w0 ) z 1 [a n cos w0 n]u (n) 1 (2a cos w0 ) z 1 a 2 z 2 az 1 n na u (n) (1 az 1 ) 2 bz 1 nb n u ( n 1) (1 bz 1 ) 2 ROC | z || a | | z || a | | z || a | | z || b | 4.4. Biến đổi Z ngược Chúng ta sử dụng biến đổi Z ngược để đưa về miền biến số độc lập tự nhiên x(n) Ta có công thức của phép biến đổi Z ngược: x( n) Z 1[ X ( z )] 1 2j X ( z) z n 1 C dz Trên thực tế chúng ta có 3 phương pháp để tính biến đổi Z: Tính trực tiếp tích phân sử dụng phương pháp thặng dư Phương pháp triền khai thành lỹ thừa theo Z hoặc Z-1 Phương pháp triển khai thành tổng các phân thức tối giản. Theo lý thuyết thặng dư của hàm biến đổi số phức thì tích phân vòng trong biểu thức biến đổi biến đổi Z ngược có thể được đánh giá bằng tổng các thặng dư. x( n) 1 2j X ( Z ) Z c n 1 dZ Re s[ X ( Z ) Z n 1 | Z Z pk ] Ở k đây Zpk là các cực của X(Z)Zn-1 nằm trong đường cong khép kín c. 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: X ( z) B( z ) R1 R2 Rn ... c(1) c (2) z 1 1 1 1 A( z ) 1 p1 z 1 p2 z 1 pn z Khi đó Rk là các giá trị thặng dư, Pk chứa các điểm cực. Trong Matlab chúng ta sử dụng hàm [R,p,C]=residuez(b,a) khi đó b và a tương ứng là các đa thức ở tử số và mẫu số được viết theo chiều hàm mũ z -1 tăng dần. r và p tương ứng là các giá trị tặng dư và các điểm cực, C cũng cũng là một vector cột chứa các thành phần trực tiếp. Hàm này cũng có thể tính ngược lại [b,a]=residuez(R,p,C) Ví dụ: Xét X ( z ) Như vậy X ( z ) z1 0 z1 3 4z 1 z 2 3 4z 1 z 2 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 = z 3z 4 z 1 1.0000 0.3333 2 C = [] Như vậy chúng ta sẽ có: 1 1 2 X ( z) 2 1 1 1 z 1 z1 3 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 1 1 z z 3 X (z) 2 4 1 1 z 1 z 2 3z 4 z 1 3 3 0 Từ biểu thức: 1 1 2 X ( z) 2 1 1 1 z 1 z1 3 n Sử dụng bảng, ta có: Z (a u ( n)) 1 az1 1 như vậy x(n): n 1 1 1 x ( n ) u ( n ) u ( n) 2 2 3 4.5. Hàm truyền đạt của hệ thống rời rạc Hàm truyền đạt ký hiệu là H(z) được hiểu theo hai khái niệm: Là tỷ số biến đổi Z của tín hiệu vào và tín hiệu ra. H ( z) Cần lưu ý ROCy=ROCh∩ ROCx Y ( z) X ( z) H(z) là biến đổi Z của đáp ứng xung h(n) 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: N a M k k 0 y ( n k ) br x (n r ) r 0 M b z r r Thì khi đó H ( z ) Y ( z) r 0N X ( z) 1 ak z k k 1 Trong trường hợp hệ không đệ quy, tức là bậc N=0 vậy ta có: M b z r Y ( z ) r 0 H ( z) X ( z) a0 r M r và nếu ao=1 thì H ( z ) br z r 0 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. M H ( z ) b0 z N M ( z zi ) i 1 N ( z pk ) k 1 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ụ: Hệ thống cho bởi phương trình sai phân: y(n)=0.9y(n-1)+x(n) 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: Áp dụng công thức, ta có: 1 H ( z) 1 0.9 z 1 Như vậy có 1 điểm cực tại Z=0.9 và một điểm không tại gốc. Chúng ta sử dụng Matlab để kiểm tra: b=[1]; a=[1,-0.9]; zplane(b,a); Muốn tính H(ejω), ta có công thức: M e z j l j H (e ) bo e j ( N M ) 1 N e j pk 1 Trong Matlab ta sử dụng hàm freqz. [H,w]=freqz(b,a,100) subplot(2,1,1);plot(w/pi,abs(H));grid; subplot(2,1,2);plot(w/pi,angle(H));grid; Tra bảng, ta tính được h(n)=(0.9)nu(n). 4.6. Bài tập chương 4 Bài 1. Tìm biến đổi Z của x(n) A (n) Bài 12. Tìm biến đổi Z của x(n) Aa n với n 0 Bài 13. Tìm biến đổi Z của x(n) Aa n cos( n)u (n) Bài 14. Tìm ROC của các tín hiệu sau a. x(n) Au (n) b. x(n) Aa nu (n) c. x(n) Aa n cos( n)u (n) d. x(n) 0.5n u (n) 0.4n u (n) e. x(n) 0.5n u (n) 0.9n u ( n 1) Bài 15. Tìm biến đổi Z và ROC của các tín hiệu sau 1 3 a. x(n) ( ) n u (n) 1 2 b. x(n) ( ) n u ( n 1) 1 3 1 2 c. x(n) ( ) n u (n) ( ) n u ( n 1) Bài 16. Tìm biến đổi Z và xác định ROC của tín hiệu sau: Bài 17. x(n) (n 2)0.5n u (n) Bài 18. Tìm biến đổi Z của tín hiệu: Bài 19. x(n) cos(n)u (n) nu (n) Bài 20. Tìm biến đổi Z của tín hiệu x(n) x1 (n) * x2 (n) Bài 21. Trong đó x1 (n) (n) 2 (n 1) Và x2 (n) (n 1) 3 (n 2) Bài 22. Tìm biến đổi Z của tín hiệu: x(n) x1 (n) * x2 (n) Trong đó x1 (n) (n 1) (n) (n 1) Bài 23. Và x2 (n) ( n) (n 1) Bài 24. Tìm biến đổi Z và tính ROC của tín hiệu sau: Bài 25. x( n) 0.5n u (n) 0.3n u ( n) 0.9 n u ( n) 4.6.1. Bài tập sinh viên tự giải Bài 1. x(n) 3(0.3) n u (n) Bài 26. x( n) (0.3) n u ( n) (0.3) n u ( n 1) Bài 27. x(n) u (n) u (n 1) Bài 28. x(n) sin(n )u (n) (0.3) n u ( n 1) 3 Bài 29. x(n) u (n)*(0.5) n u ( n) Bài 30. x( n) u ( n) *(0.5) n u (n)*(0.5) n u ( n 1) Bài 1. a. Tìm biến đổi Z ngược của các tín hiệu nhân quả sau: 1 1.5 z 1 X ( z) 1 1.5 z 1 0.5 z 2 1 az 1 b. X ( z ) 1 z a 1 X ( z) 1 1 z 0.25 z 2 1 d. X ( z ) 1 3 10 z 3z 2 Bài 2. Tìm tất cả các tín hiệu (có thể có) mà có biến đổi Z như sau: 1 a. X ( z ) 2 3z 1 z 2 c. 1 2z 1 z 2 b. X ( z ) 1 4z 1 4z 2 c. X ( z) 2 z 2 12 z ( z 0.3)( z 0.2)( z 3) Bài 3. Sử dụng biến đổi Z để tính tổng chập của x1(n) * x2(n) a. x1(n) = {1, 1, 1, 1} và x2(n) = {1, 1, 1, 1} b. x1(n) = {1, 2, 3, 4, 5} và x2(n) = {1, 1, 1} c. x1(n) = (1/5)nu(n) và x2(n) = 2nu(n) d. x1(n) = nu(n) và x2(n) = 2nu(n-1) Bài 4. Tìm biến đổi Z ngược: a. X(z) = log(1-2z), |z| < ½ b. X(z) = log(1-2z-1), |z| > ½ Z Gợi ý: Sử dụng tính chất nx(n) z dX ( z ) d ( z) Bài 5. Tính tổng chập của các cặp tín hiệu sau sử dụng biến đổi Z một phía a. x1(n) = {1, 1, 1, 1, 1} và x2(n) = {1, 1, 1} b. x1(n) = {1, 2, 3, 4} và x2(n) = {4, 3, 2, 1} c. x1(n) = (1/2)nu(n) và x2(n) = (1/3)nu(n) Bài 6. Cho phương trình sai phân y(n) – 0.7y(n-1) = x(n) a. Tìm H(z) b. Tìm h(n) c. Tìm y(n) nếu x(n) = u(n) Bài 7. Cho phương trình sai phân y(n) – 0.5y(n-1) = x(n) + x(n-1) a. Tìm h(n) b. Tìm đáp ứng xung bước đơn vị Bài 8. Tìm giá trị cuối cùng của h(n) với: h(n) = (0.5)nu(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: y ( n) h( n) x ( n) h( k ) x ( n k ) k 0 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 ∞ 5.1. Phân tích các mạnh lọc FIR đơn giản 5.1.1. Mạch lọc FIR thông thấp 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 H ( z ) bm z m m 0 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 ( z) 1 1 z1 2 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à: 1 1 H (e j ) 1 e j 1 cos j sin 2 2 1 2 cos 2 2 sin cos cos cos j sin 2 2 2 2 2 2 2 H (e j ) cos e 2 j 2 Do đó đáp ứng biên độ: H (e j ) cos e 2 j 2 cos 2 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. 5.1.2. Mạch lọc FIR thông cao 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: H ( z) 1 1 z1 2 Đáp ứng tần số tương ứng là: H (e j ) je j 2 sin( ) 2 Đáp ứng biên độ: H (e j ) je j 2 sin( 2 ) sin( 2 ) Đá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. 5.2. Mạch lọc số IIR 5.2.1. Mạch lọc IIR thông thấp Mạch lọc IIR đơn giản nhất là mạch lọc số IIR bậc nhất 1 1 z1 H ( z) 2 1 z 1 Trong đó hệ số |α|> H= fspecial('type',parameter) Type Mô tả fspecial(‘average’) 1 1 1 9 1 fspecial(‘unsharp’) 1 1 4 6 1 fspecial(‘gaussian’) mặt nạ Gauss là mặt nạ vuông mà các hệ số của nó là các 1 1 1 1 1 1 4 26 4 1 4 1 phần tử rời rạc của phân bố Gauss. Chúng ta cũng có thể tự tạo mặt nạ. Ví dụ: >> h=1/10*[1 1 1; 1 2 1; 1 1 1] Ta được bộ lọc hàm mũ 1 1 1 10 1 1 2 1 1 1 1 Để 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 đó: A: ma trận chứa dữ liệu điểm ảnh H: mặt nạ lọc Xét ảnh đầu vào được biểu diễn bởi ảnh A >> I = imread('coins.png'); >>imshow(I) Lọc ảnh trên với mặt nạ h >> h =fspecial(‘average’) h = 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 0.1111 Lọc ảnh I sử dụng mặt nạ lọc h >> I2 = imfilter(I,h); >> imshow(I2) Chú ý khi sử dụng phép lọc, dữ liệu bên ngoài ảnh được tính là 0. 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'); 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ệ: L Y (m, n) a( k ) w( k ) k 1 Trong đó w(k) là giá trị hệ số lọc của cửa sổ w tương ứng với a(k) Một số bộ lọc hạng bậc: Lọc trung vị (Median tuckey): wk 1 wk 0 if if k ( L 1) / 2 k ( L 1) / 2 Kích thước của cửa sổ không nhất thiết phải vuông, tùy thuộc vào ảnh ta chọn cửa sổ phù hợp. Lọc co giãn (erosion - dilation): Bộ lọc co: wk 1 wk 0 if k 1 if k 1 wk 1 wk 0 if if k L k L wk 1 wk 0 if if k r k r Bộ lọc giãn: Lọc hạng (bậc) r: Bộ lọc k láng giềng gần nhất Mục đích nhằm làm giảm nhiễu xung. Sử dụng một cửa sổ lọc bao gồm k phần tử, có dạng ma trận, quá trình lọc gồm các bước: 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 r p M k H (k , l ) X (m k , n l ) k r l p c. Xác định các điểm ảnh của đầu ra ( m, n) Y ( m, n) X ( m, n) if if X(m, n) ( m, n) X(m, n) ( m, n) 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: là những sai khác trong giá trị của pixel, Ảnh hưởng quang học: sự mở do việc chuyển động của camera Ta có dạng tổng quát của ảnh bị biến dạng: g(x,y) = f(x,y)*h(x,y) + n(x,y) Nhiễu muối tiêu Trong Matlab để tạo ra nhiễu muối tiêu ta sử dụng hàm imnoise: I2= imnoise(I1,'salt & pepper') Nhiễu gaussian Để tạo ra nhiễu Gaussian t = imnoise(image,’gaussian’) Các phương pháp để khôi phục ảnh bao gồm Sử dụng bộ lọc trung bình Bộ lọc hạng Bộ lọc chắn dải Bộ lọc thông dải 6.3. Tách biên ảnh Ý tưởng cơ bản đằng sau tách biên là tìm các nơi trong ảnh có cường độ thay đổi nhanh, sử dụng một trong hai tiêu chuẩn tổng quát sau: 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') Trong đó Trong đo'method' gồm : Sobel, Prewitt, Roberts, Cany v.v... Xét ví dụ: I= imread('rice.tif'); BW1 = edge(I,'prewitt'); BW2 = edge(I,'canny'); imshow(BW1) figure, imshow(BW2) Kết quả: This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.Tìm kiếm
Chủ đề
Atlat Địa lí Việt Nam Đề thi mẫu TOEIC Bài tiểu luận mẫu Hóa học 11 Giải phẫu sinh lý Thực hành Excel Lý thuyết Dow Trắc nghiệm Sinh 12 Mẫu sơ yếu lý lịch Tài chính hành vi Đồ án tốt nghiệp Đơn xin việc adblock Bạn đang sử dụng trình chặn quảng cáo?Nếu không có thu nhập từ quảng cáo, chúng tôi không thể tiếp tục tài trợ cho việc tạo nội dung cho bạn.
Tôi hiểu và đã tắt chặn quảng cáo cho trang web nàyTừ khóa » Tích Chập Matlab
-
(PDF) THUCHANHDSP | Văn Phạm
-
Cách Tính Tích Chập Bằng Matlab
-
Code Tính Tích Chập Trong Môn Xử Lý Tín Hiệu Số
-
[PDF] Xử Lý Tín Hiệu Số,dhbkhn
-
Thi Nghiem Xlths - SlideShare
-
Convolution - Tích Chập Giải Thích Bằng Code Thực Tế - Techmaster
-
MÔ PHỎNG HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC BẰNG MATLAB
-
[PDF] BÀI 1: CÁC TÍN HIỆU CƠ BẢN - TaiLieu.VN
-
MATLAB | PDF - Scribd
-
Tính Tích Chập Bằng Phương Pháp Lật Và Trượt - YouTube
-
Xử Lý Tín Hiệu Số Sử Dụng Matlab - Digital Signal Processing Using ...
-
Phép Tích Chập Trong Xử Lý Ảnh (Convolution) — Computer Vision
-
Lý Thuyết MATLAB - Tài Liệu, Ebook, Giáo Trình
-
[DOC] Mẫu Đề Cương Môn Học