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

Ứ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Ế

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (161.36 KB, 12 trang )

Ứ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


- Xung đơn vị:
n = n0

1
0

Mô tả: δ (n − n0 ) = 

n ≠ n0

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
X
u
n
gd
o
nv
iv
o

i tre=2
1

0
.8

0
.6

0
.4

0
.2

0
-1

0

1

2

3

4

5


Hình 1.1: Xung đơn vị với n0=2; n1=-1; n2=5
- Dãy nhảy đơn vị
n ≥ n0

1
0

Mô tả: U (n − n0 ) = 

n < n0

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
D
a
yn
h
a
yd
o
nv
iv
o
i tre=2
1


0
.8

0
.6

0
.4

0
.2

0
-1

0

1

2

3

4

5

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

T
inh
ie
ud
a
n
gh
a
m
m
u

1

0
.8

0
.6

0
.4

0
.2


0
0

1

2

3

4

5

6

7

8

9

1
0

Hình 1.3: Tín hiệu hàm số 0.9n với n=0 ÷ 10


- Biểu diễn tín hiệu dạng sin(x)
Mô tả: x(n) = sin(ω 0 n + θ ) , ∀n
Mô tả bằng Matlab trường hợp:

π
x(n) = 3cos(0.1π n + ) + 2sin(0.5π n) với 0 ≤ n ≤10 :
3

n= [0:10]; x = 3*cos(0.1*pi*n + pi/3) +
2*sin(0.5*pi*n)
Kết quả
3
2
1
0
-1
-2
-3
-4
-5

0

1

2

3

4

5

6


7

8

π
3

9

10

Hình 1.4: Tín hiệu hàm x(n) = 3cos(0.1π n + ) + 2sin(0.5π n)

- Biểu diễn tín hiệu bằng hàm mũ phức
Mô tả: x(n) = e(σ + jω ) n , ∀n
Mô phỏng bằng Matlab trường hợp: x(n) = e(2 + j 3) n
0

n = [0:10]; x = exp((2+3j)*n);

Hàm ABS(x): Cho ta giá trị x = σ 2 + ω 02
ω
Hàm ϕ = angle(x): Cho ta giá trị góc ϕ = arctg 0

Hàm real(x) trả lại phần thực của x
Hàm Imag(x) trả lại phần ảo của x
Kết quả:

σ



Magnitude part

Angle part
0
-0.2

1.5
Angle

Magnitude

2

1
0.5

-0.6
0

0.5
Frequency
pi unit
Imagineinpart

-0.8

1


0

0.5
Angle
in part
pi unit
Real

1

0

0.5
Real in pi unit

1

1.5
Real

Imagine

0

2

-0.2
-0.4
-0.6
-0.8


-0.4

0

0.5
Imagine in pi unit

1

1
0.5

Hình 1.5: Biểu diễn các thông tin của hàm x(n) = e(2 + j 3) n
- 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);
1
0
.9
0
.8
0
.7
0
.6
0
.5

0
.4
0
.3
0
.2
0
.1
0
0

1
0

2
0

3
0

4
0

5
0

6
0

7

0

8
0

9
0

1
0
0

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

{ x1 (n)} + { x2 (n)} = { x1 (n) + x2 (n)}

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));
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 nhân 2 dãy tín hiệu rời rạc


{ x1 (n)} .{ x2 (n)} = { x1 (n). x2 (n)}

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)

y(n)
h(n)
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)]

y ( n) = x ( n ) * h ( n ) =



∑ x ( k ) h( n − k )

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) ]


Matlab 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 ≤ n ≤ 3

h( n) = [ 2 3 0 − 5 2 1 ]

−1 ≤ n ≤ 4


Ta có đáp ứng ra y (n) = x(n) * h(n) = ∑ x(k )h(n − k )
k =−∞

T
i
n
h
i
e
u
d
a

u
v
a
o
x
(
n
)
1
2

1
0

8

6

4

2

0

2
3

2

1


0

1

2

3

Hình 1.7: Tín hiệu đầu vào x(n)
D
a
p
u
n
g
x
u
n
g
h
(
n
)
3
2
1
0
1
2

3
4
5
1

0
.
5

0

0
.
5

1

1
.
5

2

2
.
5

3

Hình 1.8: Đáp ứng xung h(n) của hệ thống

Dùng hàm conv_m trên ta có:

3
.
5

4


D
a
u
r
a
y
(
n
)
6
0

4
0

2
0

0

2

0

Hình 1.9: Đáp ứng ra của hệ thống

4
0

6
0
4

2

0

2

4

6

8

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ả:
a0

x(n)


Σ

Σ

b0

Delay

y(n)

Delay

a1

x(n-1)

Σ

Σ

b1

Delay

y(n-1)
Delay

y(n-2)

x(n-2)

.
.
.
Delay

x(n-k) ak

br

Σ
Hình 1.10 Dạng tổng quát của bộ lọc số

Delay

y(n-r)

Bộ lọc số này được biểu diễn qua phương trình sai phân như sau:
+∞



k =−∞

ak x (n − k ) =

+∞

∑ b y (n − r )

k =−∞


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:


X (e





) @F [ x(n)] = ∑ x(n)e

− jω n

n =−∞

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
Magnitude part

Angle part
1
0.5

1.5
Angle

Magnitude

2

1

0.5


0
-0.5

0

0.5
1
1.5
Frequency in pi unit
Imagine part

-1

2

1

0

0.5
1
1.5
Angle in pi unit
Real part

2

0

0.5

1
1.5
Real in pi unit

2

2

1.5
Real

Imagine

0.5
0

1
-0.5
-1

0

0.5
1
1.5
Imagine in pi unit

2

0.5


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


+ 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)
x ( n) Z
Transform
uuu
uuuuuuuuuur X ( Z )
y ( n) Z
Transform
uuu
uuuuuuuuuur Y ( Z )
Y (Z )
+ Tính H ( Z ) = X ( Z )

+ Thực hiện biến đổi Z ngược hàm truyền đạt
-1

H(Z) Z
uuuuTransform
uuuuuuuuuuu
r 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ế.

Gradient

ξ
Hình chiếu
của
Gradient
xuống mặt
phẳng
trọng số

Gradient

w1

Hình chiếu của
Gradient xuống
mặt phẳng
trọng số


×
Đường
mức


Hì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ạ độ ( w1* , w2* ) 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];
for n=N:M
x=X(n:-1:n-N+1);
y=W*x';
e(n)=d(n)-y;
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)
Tin hieu co nhieu
10
0
-10
0

200

400

600ra cua
800bo loc
1000
1200 giam
1400
Dau
co nhieu
dan 1600

1800

2000

0

200

400Sai so

600giua800
1000
1400
tin hieu
sach 1200
va dau ra
thuc 1600
te

1800

2000

1
0
-1

6
4
2
0

0

500

1000

1500


2000

2500

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


Sau đó 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)
TIN HIEU SAU LOC
0.05

0.04

0.03

0.02

0.01

0

-0.01

0

500

1000


1500

2000

2500

3000

3500

4000

4500

5000

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.


[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



×