You are on page 1of 16

Short Time Fourier

Transform (STFT)
of ECG Signal
ทฤษฎีและหลัก
การที่ใช้
คลื่นไฟฟ้าหัวใจ (Electrocardiogram)
การตรวจคลื่นไฟฟ้าหัวใจ เป็นการตรวจกระแสไฟฟ้าที่กล้ามเนื้อหัวใจ
ผลิตออกมาขณะที่หัวใจบีบตัวโดย ECG สามารถสื่อถึง
การนำไฟฟ้าภายในกล้ามเนื้อหัวใจของเรา
อัตราการเต้นของหัวใจ
จังหวะการเต้นของหัวใจเป็นไปอย่างสม่ำเสมอหรือไม่
โดยที่ในแต่ละส่วนของกราฟไฟฟ้าหัวใจจะช่วยบอกถึงความสัมพันธ์
ในการทำงานของหัวใจห้องบนและห้องล่าง
คลื่นไฟฟ้าหัวใจโดยปกติมีคลื่นที่เห็นได้อยู่ 5 ตัว ได้แก่คลื่น P, คลื่น T และกลุ่ม
คลื่น Q, R และ S ซึ่งกลุ่มคลื่น QRS นี้ แสดงถึงเหตุการณ์เดียวกันที่เกิดขึ้น
พร้อมๆ กัน
คลื่น P คือคลื่นที่แสดงผลรวมทางไฟฟ้าของการเกิด depolarization ที่เอ
เตรียม(atrium)
คลื่น Q คือคลื่นส่วนแรกของเวนติเคิลที่ถูกกระตุ้น
คลื่น R คือคลื่นทิศเป็นบวกที่เกิดตามหลังมา
คลื่น S คือคลื่นทิศเป็นลบที่ตามหลังคลื่น R
คลื่น T คือเป็นคลื่นระยะที่ต้องใช้พลังงาน คลื่นที่แสดงผลรวมทางไฟฟ้าของ
การเกิด depolarization ของหัวใจห้องล่างทั้งสองห้องเกิดตามหลังคลื่น S
ผังแสดงคลื่นไฟฟ้าหัวใจปกติ (NORMAL ECG)

1) ระยะพี - อาร์ (P-R Interval) เริ่มจากคลื่น P ไปจนถึงเริ่ม QRS Complex ใน บางครั้งเรียกว่า P–Q
Interval เป็นระยะที่ใช้ในการดีโพลาไรเซซัน ระยะนี้ไม่ควรเกิน 0.20 วินาที
2) ระยะคิวอาร์เอส (QRS Interval) ระยะนี้วัดตั้งแต่เริ่มคลื่นคิว ถึงสิ้นสุดคลื่นเอส ช่วงเวลานี้ไม่ควรเกิน
0.10 วินาทีอาจถึง 0.11 วินาทีในลีด V2 และ V3
3) ระยะวีเอที (Ventricular Activation Time) แสดงถึงระยะเวลาที่ใช้ในการส่ง สัญญาณจากกล้าม
เนื้อหัวใจห้องล่างในสุดถึงชั้นนอกสุดวัดเริ่มจากคลื่นคิวจนถึงจุดสูงสุดของคลื่นอาร์
4) ระยะคิวที(Q-T Interval) ซึ่งท าการวัดจากระยะเริ่มระยะคิวอาร์เอส จนสิ้นสุด คลื่นที หมายถึงระยะ
เวลาในการดีโพลาไรเซชันและรีโพลาไรเซชันในกล้ามเนื้อหัวใจห้องล่างทั้งหมด
5) ระยะอาร์พี (R-P Interval) วัดจากจุดสูงสุดของ R Wave ที่อยู่ถัดไปสามารถ นำมาคำนวณหาอัตรา
ของหัวใจห้องล่างได้
6) ระยะพีอาร์ (P-R Interval) ระดับของเส้นปกติจะอยู่ ระดับเส้นพื้นฐ าน (Isoelectric Line) เส้นนี้เริ่ม
ดูตั้งแต่จบคลื่นพีจนถึงเริ่มระยะคิวอาร์เอส
7) ระยะเอสที(S–T Segment) เริ่มวัดจากระยะคิวอาร์เอสจบถึงเริ่มคลื่นทีปกติอยู่ ระดับเส้นพื้นฐาน
เปลี่ยนแปลงได้เล็กน้อยจาก -0.5 มิลลิเมตรถึง +2 มิลลิเมตร
Fourier transform

การแปลงฟูเรียร์ (Fourier transform)


การแปลงฟูเรียร์เป็นวิธีการแปลงสัญญาณรูปแบบแรกที่เปลี่ยนจากการวิเคราะห์ในทางเวลา
มาเป็นการวิเคราะห์ในทางความถี่แทน และเพื่อให้ง่ายต่อการวิเคราะห์สัญญาณจะทำโดยการแปลง
สัญญาณจากโดเมนทางเวลา (Time-Domain) ไปอยู่ในรูปของโดเมนทางความถี่ (Frequency-Domain)
ซึ่งฟูเรียร์ทรานสฟอร์มจะใช้หลักการที่ว่า คลื่นใด ๆเกิดจากกระบวนการรวมกันของคลื่นไซน์หลาย ๆความถี่
หลาย ๆตัวเข้าด้วยกัน ซึ่งผลที่ได้อาจจะเกิดความแตกต่างกันในทางความถี่หรือทางเวลาก็เป็นไปได้
เป็นการแปลงสัญญาณให้เป็นฟูเรียร์ทรานสฟอร์มของสัญญาณนั้น ๆ ซึ่ง
จากสมการจะเห็นได้ว่า ถ้าสัญญาณมีความถี่ใดที่ตรงกับความถี่ของคลื่นไซน์
แล้วจะให้ผลคูณมีค่ามาก จะแสดงเป็นแอมปลิจูดสูงสุดในทางโดเมนความถี่
ของฟูเรียร์ทรานสฟอร์ม
Fourier
transform

เป็นสมการแปลงฟูเรียร์ทรานสฟอร์มของสัญญาณนั้น กลับไปเป็นสัญญาณ
เดิม โดยเป็นฟังก์ชันของที่เปลี่ยนแปลงตามเวลาและเป็นฟังก์ชันของที่เปลี่ยนแปลงตามความถี่
ฟูเรียร์ทรานสฟอร์มของสัญญาณ ทำให้ทราบถึงความถี่ของสัญญาณ แต่ไม่ทราบเวลาที่เกิดความถี่ของ
สัญญาณนั้น ๆ
Fourier
transform
การแปลงฟูเรียร์ช่วงเวลาสั้น (short-time Fourier transform: STFT)
เนื่องจากการแปลงฟูเรียร์นั้น มีข้อจำกัดในการวิเคราะห์หาข้อมูลทางด้านเวลา จึงได้มีการพัฒนาวิธีการ
เพื่อให้สามารถวิเคราะห์ข้อมูลได้ทั้งทางเวลาและความถี่ ซึ่งการแปลงฟูเรียร์ช่วงเวลาสั้นนั้นเป็นรูปแบบหนึ่งใน
การแปลงสัญญาณจากข้อมูลในรูปแบบโดเมนทางเวลาไปอยู่ในโดเมนทางความถี่และเวลาที่เกิดความถี่นั้น ๆ
ซึ่งได้ใช้หลักการคล้ายกันกับวิธีการแปลงฟูเรียร์ทรานสฟอร์ม คือคลื่นใด ๆที่เกิดจากการรวมกันของสัญญาณ
คลื่นไซน์นูซอยด์หลาย ๆความถี่และหลาย ๆตัวเข้าด้วยกันและทำการแปลงฟูเรียร์ทรานสฟอร์ม เพื่อทำการหา
ค่าความถี่และเฟสของช่วงใดช่วงหนึ่งของสัญญาณที่มีความเปลี่ยนแปลงไปตามเวลา ซึ่งในทางเวลาจะมีทั้ง
สัญญาณที่เกิดในเวลาที่ต่อเนื่องกัน และสัญญาณที่เกิดในเวลาที่ไม่มีความต่อเนื่องกัน จึงเรียกวิธีการนี้ว่าการ
แปลงฟูเรียร์ช่วงเวลาสั้น (Short-Time Fourier Transform :STFT) นั้นเอง
load ecg.mat;
x=ecg;
T=1;
fs=512;
fn = 0.5*fs;
N=length(x);
ts=1/fs;
t=(0:N-1)*ts;
figure(1)
plot(t,x); % ecg original
xlabel('Time (secs)')
ylabel('Amplitude (Millivolt)')
title('ecg original')
L=2^nextpow2(N);
yf=fft(x,L);
f=fs*(0:L-1)/L;
figure(2)
plot(f,abs(yf));
xlabel('Frequency (Hz)')
ylabel('Amplitude (Millivolt)')
title('spectrum of original signal')
figure(3);
windowsize = 2;
window = hanning(windowsize);
nfft = windowsize;
noverlap = windowsize-1;
[S,F,T] = spectrogram(x,window,noverlap,nfft,fs);
imagesc(T,F,log10(abs(S)))
colorbar
set(gca,'YDir','Normal')
xlabel('Time (secs)')
ylabel('Freq (Hz)')
title('Short-time Fourier Transform spectrum ')
figure(3);
windowsize = 50;
window = hanning(windowsize);
nfft = windowsize;
noverlap = windowsize-1;
[S,F,T] = spectrogram(x,window,noverlap,nfft,fs);
imagesc(T,F,log10(abs(S)))
colorbar
set(gca,'YDir','Normal')
xlabel('Time (secs)')
ylabel('Freq (Hz)')
title('Short-time Fourier Transform spectrum ')
%find local maxima
ismax = islocalmax(x,'MinProminence',1);

A = t(ismax);
B = x(ismax);

figure(5)
plot(t,x,'DisplayName','Input data')
hold on
%plot local maxima
plot(A,B,'r*','DisplayName','Local maxima')
title(['Number of extrema : ' num2str(nnz(ismax))]);
hold off
legend
xlabel('Time (s)');ylabel('Amplitude'); grid;
figure(6);
plot(t,x)
title('P Q R S T');
xlabel('Time (s)');ylabel('Amplitude'); grid;
xlim([0.6 1.2])
%find heart rate
maxIndices = find(ismax)/300
secPerBeat = mean(diff(maxIndices));
HeartRate = 60/(secPerBeat);

ขอบคุณ!

You might also like