ỨNG DỤNG MATLAB TRONG VIỆC GIẢNG DẠY VÀ NGHIÊN CỨU KHOA HỌC TẠI TRƯỜNG KỸ THUẬT THIẾT BỊ Y TẾ Hoàng Mạnh Hà Trần Thị Phượng Trường Kỹ thuật thiết bị y tế Tóm tắt: Việc tích hợp ngày càn
Trang 1ỨNG DỤNG MATLAB TRONG VIỆC GIẢNG DẠY VÀ NGHIÊN CỨU KHOA HỌC TẠI TRƯỜNG KỸ THUẬT THIẾT BỊ Y TẾ
Hoàng Mạnh Hà Trần Thị Phượng
Trường Kỹ thuật thiết bị y tế
Tóm tắt:
Việc tích hợp ngày càng tăng các thành tựu tốt nhất của Toán học, Công nghệ thông tin đã cải thiện chất lượng, tính năng của các thiết bị y tế Song song với những lợi ích này là yêu cầu đối với người quản lý, hiệu chỉnh, kiểm chuẩn thiết bị y tế phải có kiến thức về một số phương pháp toán học như biến đổi Fourier/ Wavelet, cách tính tích chập (Convolution), tương quan (Correlation), các thuật toán thích nghi như LMS/RLS, ước lượng gradient bằng phương pháp Canny Chúng tôi nhận thấy qua thực tế tại Trường Kỹ thuật thiết bị y tế cũng như tại một số các trường Kỹ thuật khác, học sinh tỏ ra rất vất vả khi tiếp thu các phương pháp trên Để hỗ trợ giải quyết vấn đề này chúng tôi quyết định dùng Signal Processing Toolbox của Matlab Với đặc điểm: Các hàm xử lý tín hiệu được xây dựng sẵn rất dễ
sử dụng, mang tính trực quan cao, có nguồn tại liệu hướng dẫn đáng tin cậy Matlab đã trở thành công cụ giảng dạy và nghiên cứu khoa học không thể thiếu ở Trường Kỹ thuật thiết bị y tế, giới thiệu điều đó là nội dung chính của bài viết này
I Ứng dụng Matlab trong giảng dạy
Trong các thiết bị y tế, chức năng thu nhận và xử lý tín hiệu giữ vai trò đặc biệt quan trọng, kết quả của nó được sử dụng làm căn cứ cho chẩn đoán của bác sỹ Do vậy mục tiêu giảng dạy đặt ra là:
- Học sinh nắm được cơ sở và y nghĩa toán học của từng phương pháp xử lý tín hiệu cơ bản
- Có khả năng mô phỏng các phương pháp xử lý tín hiệu trong y tế bằng Matlab
Để thực hiện được hai mục tiêu trên, ngay sau khi giới thiệu cơ sở và
ý nghĩa toán học của từng phương pháp chúng tôi đã tiến hành giới thiệu các hàm tương ứng trong Matlab
Ví dụ:
Bài I Các tín hiệu và hệ thống rời rạc
1.1 Tín hiệu rời rạc theo thời gian
Các tín hiệu rời rạc cơ sở và các hàm mô phỏng tương ứng
Trang 2- Xung đơn vị:
0
1 ( )
0
n n
n n
n n
Mô phỏng bằng Matlab
function [x,n] = impseq(n0,n1,n2)
n = [n1:n2]; x = [(n-n0) ==0];
Khi hàm được gọi ta sẽ có xung đơn vị như sau
Hình 1.1: Xung đơn vị với n0=2; n1=-1; n2=5
- Dãy nhảy đơn vị
0
0
1 ( )
0
n n
U n n
n n
Mô phỏng bằng Matlab
function [x,n] = stepseq(n0,n1,n2)
n = [n1:n2];
x = [(n-n0) >= 0];
Khi hàm được gọi sẽ có dãy nhảy đơn vị sau
Hình 1.2: Dãy nhảy đơn vị với n0=2; n1=-1; n2=5
- Biểu diễn tín hiệu hàm số mũ
Mô tả: x n( ) a n, n a; R
Mô phỏng bằng matlab
n=[0:10]; x(n) = (0.9).^n
Hình 1.3: Tín hiệu hàm số 0.9n với n=0 10
0 0.2 0.4 0.6 0.8
1 Xung don vi voi tre = 2
0 0.2 0.4 0.6 0.8
1 Day nhay don vi voi tre = 2
0 0.2 0.4 0.6 0.8
Trang 3- Biểu diễn tín hiệu dạng sin(x)
Mô tả: x n( ) sin( 0n ), n
Mô tả bằng Matlab trường hợp:
( ) 3cos(0.1 ) 2sin(0.5 )
3
x n n n với 0 n 10:
n= [0:10]; x = 3*cos(0.1*pi*n + pi/3) + 2*sin(0.5*pi*n)
Kết quả
Hình 1.4: Tín hiệu hàm ( ) 3cos(0.1 ) 2sin(0.5 )
3
x n n n
- Biểu diễn tín hiệu bằng hàm mũ phức
Mô tả: ( 0 )
( ) j n,
x n e n
Mô phỏng bằng Matlab trường hợp: (2 3)
( ) j n
x n e
n = [0:10]; x = exp((2+3j)*n);
0
x Hàm angle(x): Cho ta giá trị góc arctg0
Kết quả:
-5 -4 -3 -2 -1 0 1 2 3
Trang 4Hình 1.5: Biểu diễn các thông tin của hàm x n( ) e(2 j n3)
- Biểu diễn tín hiệu ngẫu nhiên
Matlab dùng hàm rand(1,N) để tạo ra dãy tín hiệu ngẫu nhiên có độ dài = N, có độ lớn trong khoảng từ 0 1 theo phân phối Gaussian
Mô phỏng bằng Matlab trường hợp N=100
N=100; x = rand(1,N);
Hình 1.6: Biểu diễn hàm ngẫu nhiên phân phối Gaussian
1.2 Hệ thống rời rạc
- Hệ thống cộng 2 dãy tín hiệu rời rạc
x n1 ( ) x n2 ( ) x n1 ( ) x n2 ( )
Thực hiện bằng Matlab
function [y,n] = sigadd(x1,n1,x2,n2)
n= min(min(n1), min(n2)):max(max(n1),max(n2));
0.5 1 1.5 2
Frequency in pi unit
Magnitude part
-0.8 -0.6 -0.4 -0.2 0
Angle in pi unit Angle part
-0.8
-0.6
-0.4
-0.2
0
Imagine in pi unit
Imagine part
0.5 1 1.5 2
Real in pi unit Real part
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Trang 5y1=zeros(1,length(n)); y2=y1;
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;
y=y1+y2;
- Hệ thống nhân 2 dãy tín hiệu rời rạc
x n1 ( ) x n2 ( ) x n x n1 ( ) ( ) 2
Thực hiện bằng Matlab
function [y,n] = sigmult(x1,n1,x2,n2)
n = min(min(n1),min(n2)):max(min(n1),max(n2));
y1 = zeros(1,length(n));
y2=y1;
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;
y = y1.*y2;
- Hệ thống dịch dãy tín hiệu
( ) ( )
y n x n k
Thực hiện bằng Matlab
function [y,n] = sigshift(x,m,n0);
n=m+n0; y=x;
- Hệ thống “lật” dãy tín hiệu
( ) ( )
y n x n
Thực hiện bằng Matlab
function [y,n] = sigfold(x,n)
y = fliplr(x);
n = -fliplr(n);
1.3 Phép tích chập (Convolution)
Phép tích chập được dùng để mô tả đáp ứng của hệ thống tuyến tính bất biến theo thời gian LTI (Linear Time Invariance) Trong xử lý tín hiệu
số, tích chập là toán tử quan trọng, được xử dụng rộng rãi Do vậy học sinh phải hiểu được điều kiện sử dụng, ý nghĩa và có hàm tính tích chập chính xác
Mô tả: Cho hệ thống tuyến tính bất biến theo thời gian, trong đó
x(n): Tín hiệu đầu vào của hệ thống tuyến tính bất biến theo thời gian y(n): Đáp ứng ra của hệ thống tuyến tính bất biến theo thời gian
( ) ( )
y n LTI x n
( ) ( )* ( ) ( ) ( )
k
y n x n h n x k h n k
h(n): Đáp ứng xung của hệ thống tuyến tính bất biến theo thời gian, và được đinh nghĩa là:
( ) ( )
h n LTI n
h(n)
Trang 6Matlab có sẵn hàm tính tích chập cho 2 dãy số a,b là conv(a,b), nhưng chưa đáp ứng yêu cầu tính ra khoảng tồn tại của kết quả nên ta có thể tự viết hàm tính tích chập dựa vào hàm conv như sau
function [y,ny] = conv_m(x,nx,h,nh)
nyb = nx(1) + nh(1);
nye = nx(length(x)) + nh(length(h));
ny = [nyb:nye];
y=conv(x,h);
Trong đó:
x, nx : Là tín hiệu đầu vào và khoảng tồn tại của nó
h, nh: Là đáp ứng xung và khoảng tồn tại của nó
y, ny: Là đáp ứng ra và khoảng tồn tại của nó
Ví dụ:
x(n) = 3 11 7 0 -1 4 2 3 3 ( ) 2 3 0 5 2 1 1 4
n
Ta có đáp ứng ra ( ) ( )* ( ) ( ) ( )
k
y n x n h n x k h n k
Hình 1.7: Tín hiệu đầu vào x(n)
Hình 1.8: Đáp ứng xung h(n) của hệ thống
Dùng hàm conv_m trên ta có:
-2 0 2 4 6 8 10
-5 -4 -3 -2 -1 0 1 2
Trang 7Hình 1.9: Đáp ứng ra của hệ thống
Hình 1.9: Đáp ứng ra của bộ lọc
1.4 Hàm Filter
Một bộ lọc số có thể được mô tả:
Hình 1.10 Dạng tổng quát của bộ lọc số
Bộ lọc số này được biểu diễn qua phương trình sai phân như sau:
a x n k b y n r
Matlab đã xây dựng sẵn hàm Filter cho phép tính đáp ứng ra y(n)
trong trường hợp biết các hệ số ak , br và dãy tín hiệu đầu vào x(n)
y = filter(a,b,x)
Trong đó a = [a1 a2 ak]
b = [b1 b2 b3 br] 1.5 Biến đổi Fourier thời gian rời rạc:
Biến đổi Fourier (Fourier Tramsform) là phép biến đổi dãy tín hiệu từ miền thời gian (Time Domain) sang miền tần số (Frequency Domain)
Nếu tín hiệu được biểu diễn trong miền thời gian rời rạc thì ta có phép biến đổi Fourier thời gian rời rạc như sau:
-60
-40
-20
0
20
40
60
Delay
Delay
Delay
.
x(n)
x(n-1)
x(n-2)
x(n-k)
a0
a1
ak
Delay
Delay
Delay
y(n)
y(n-1)
y(n-r) y(n-2)
b0
b1
br
Trang 8 j ( ) ( ) j n
n
X e F x n x n e
Hàm tính biến đổi Fourier thông qua ví dụ như sau:
clear;
%w=[0:1:1000]*2*pi/1000;
w=[0:1:2000]*4*pi/2000;
X=exp(j*w) /(exp(j*w) - 0.5*ones(1,2001));
mag=abs(X); subplot(2,2,1); plot(w/2/pi,mag); ylabel('Magnitude');
xlabel('Frequency in pi unit'); title('Magnitude part');
angle=angle(X); subplot(2,2,2); plot(w/2/pi,angle); ylabel('Angle'); xlabel('Angle in pi unit'); title('Angle part');
imagine=imag(X); subplot(2,2,3); plot(w/2/pi,imagine);
ylabel('Imagine');
xlabel('Imagine in pi unit'); title('Imagine part');
realp=real(X); subplot(2,2,4); plot(w/2/pi,realp); ylabel('Real');
xlabel('Real in pi unit'); title('Real part');
Kết quả thực hiện
Hình 1.11 Biểu diễn các thông tin của tín hiệu sau biến đổi Fourier
II Ứng dụng Matlab trong nghiên cứu khoa học
2.1 Thử nghiệm các bộ lọc cố định bằng hàm Filter
Trước đây sau khi thiết kế, việc thử nghiệm các bộ lọc cố định đòi hỏi nhiều thời gian, dụng cụ linh kiện Đặc biệt là giai đoạn hiệu chỉnh hoặc thay đổi thử các tham số, đặc tính Nhiều khi không thể thực hiện được các ý tưởng chỉ vì không các yếu tố trên Hàm Filter như giới thiệu trên cho phép rút ngắn thời gian triển khai thử nghiệm, dễ dàng thay đổi các tham số Nhưng để sử dụng được, người học cần được trang bị một số kiến thức như trên đã nêu
- Trình tự thiết kế và thử nghiệm bộ lọc
0.5
1 1.5
2
Frequency in pi unit
Magnitude part
-1 -0.5 0 0.5 1
Angle in pi unit Angle part
-1 -0.5
0 0.5
1
Imagine in pi unit
Imagine part
0.5 1 1.5 2
Real in pi unit Real part
Trang 9+ Thiết lập trạng thái đáp ứng ra y n( ) mong muốn tương ứng với tín
hiệu đầu vào x n( )
+ Thực hiện biến đổi sang miền Z hai tín hiệu x n( )và y n( )
( ) Z Transform ( )
x n X Z
( ) Z Transform ( )
+ Tính ( ) ( )
( )
Y Z
H Z
X Z
+ Thực hiện biến đổi Z ngược hàm truyền đạt
-1
H(Z) Z Transform ( ) h n
+ Nạp vào hàm Filter các hệ số a và b từ h n( )
+ Chạy thử và đánh giá Hiệu chỉnh nếu cần thiết
2.2 Thử nghiệm bộ lọc thích nghi qua thuật toán Newton
- Thuật toán Newton: Dựa trên cực tiểu hoá sai số giữa tín hiệu mong muốn
và tín hiệu ra thực tế
w 1
Đường mức
Gradient
Hình chiếu của Gradient xuống mặt phẳng trọng số
Gradient
Hình chiếu
của
Gradient
xuống mặt
phẳng
trọng số
Trang 10Hình 2.1 Mặt parapoloid của sai số giữa tín hiệu thực tế với tín hiệu mong muốn
và hình chiếu của nó xuống mặt phẳng trọng số
Phương pháp Newton thực hiện bình phương 2 vế hàm tính sai số đó Khi đó nếu hàm bình phương của sai số là mặt parapoloid không giới hạn dương như hình 2.1 trên đây
Khi đó tồn tại duy nhất 1 điểm cực tiểu có toạ độ ( * *
1 , 2
w w ) trên mặt phẳng trọng số, tại đó sai số giữa tín hiệu thực tế với tín hiệu mong muốn là nhỏ nhất Thuật toán Newton tìm cách đạt đến điểm cực tiểu đó từ một điểm bất
kỳ trên mặt parapoloid bằng cách đi dần theo hướng ngược chiều với chiều của Gradient tại mỗi điểm (Hình 2.1)
Thuật toán Newton được thực hiện bằng Matlab như sau:
function [W,e] = lmsfir(X,d,N)
delta=0.7;
M=length(X);
y=zeros(1,M);
W=[ 0 0];
x=X(n:-1:n-N+1);
y=W*x';
W= W + delta*e(n)*x;
end;
Ứng dụng thuật toán Newton để lọc nhiễu cho tín hiệu được mô tả trong hình vẽ (2.2)
Hình 2.2 Kết quả của nghiên cứu lọc nhiễu cho tín hiệu bằng bộ lọc thích
nghi dùng thuật toán Newton
-10 0 10
Tin hieu co nhieu
-1 0 1
Dau ra cua bo loc co nhieu giam dan
0 2 4
6 Sai so giua tin hieu sach va dau ra thuc te
Trang 11Sau đó chúng tôi thử nghiệm trên tín hiệu y sinh (tín hiệu điện tim), thu được kết quả như sau (Hình vẽ 2.3)
Hình 2.3: Kết quả lọc nhiễu cho tín hiệu điện tim (Nhiễu giảm dần)
III Kết luận và kiến nghị
Matlab với đặc điểm có các hàm toán học đáp ứng được yêu cầu giảng dạy các kiến thức xử lý tín hiệu cơ bản ở các trường kỹ thuật Có thể tiếp cận nhanh, thân thiện với người sử dụng, đơn giản về yêu cầu thiết bị thực hiện (Có thể dùng PC cấu hình thấp như: CPU tốc độ 200MHz, RAM 64MB, Cache 64KB) Có thể dùng làm công cụ học tập và nghiên cứu khoa học cho các đối tượng là Kỹ sư, sinh viên
Kiến nghị đưa vào giảng dạy môn xử lý tín hiệu số có lồng nội dung hướng dẫn sử dụng Matlab vào chương trình, bắt buộc sinh viên giải bài tập môn bằng Matlab
IV Tài liệu dẫn
[1] B.Widrow & S.T Stearns, “Adaptive Signal Processing”, Prentice – Hall, Engle wood Cliffs, USA, 1985
[2] V.K Ingle & J.G Proakis, “Digital Signal Processing Using Matlab”, PWS, USA, 1997
-0.01
0
0.01
0.02
0.03
0.04
Trang 12[3] R Aston, “Principles of BioMedical Instrumentation and Mesurement”, Merrill, pp 37 – 255, 1990
[4] S.HAYKIN, “Adaptive Filter Theory” , Prentice – Hall, Engle wood Cliffs, USA, 2sd edition, 1995
[5] Jonathan Richard ShewChuk, “An instrudution to the conjugate gradient method without the Agonizing pain” , School of Computer Science Carngie Mellon University, 1st edition, 1994
[6] Hoàng Mạnh Hà - Phạm Trần Nhu “Phần mềm nhúng trong lọc nhiễu điện tim” Tạp chí khoa học và Công nghệ, Tập 43, số 3, 2005