A Matlab Home címkéje alatt a File szekcióban található a New gomb. Erre klikkelve a felugró lehetőségek közül válasszuk a Script lehetőséget.

Hasonló dokumentumok
MATLAB. 5. gyakorlat. Polinomok, deriválás, integrálás

Fourier-sorfejtés vizsgálata Négyszögjel sorfejtése, átviteli vizsgálata

Baran Ágnes. Gyakorlat Függvények, Matlab alapok

1. Jelgenerálás, megjelenítés, jelfeldolgozás alapfunkciói

Rácsvonalak parancsot. Válasszuk az Elsődleges függőleges rácsvonalak parancs Segédrácsok parancsát!

Dr. Gyurcsek István. Példafeladatok. Helygörbék Bode-diagramok HELYGÖRBÉK, BODE-DIAGRAMOK DR. GYURCSEK ISTVÁN

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

Baran Ágnes. Gyakorlat Halmazok, függvények, Matlab alapok. Baran Ágnes Matematika Mérnököknek Gyakorlat 1 / 34

Diagram formázása. A diagram címének, a tengelyek feliratainak, jelmagyarázatának, adatfeliratainak formázása

MATLAB alapismeretek IV. Eredmények grafikus megjelenítése: vonalgrafikonok

A Paint program használata

BMF, Kandó Kálmán Villamosmérnöki Kar, Híradástechnika Intézet. Aktív Szűrő Mérése - Mérési Útmutató

Jelek és rendszerek Gyakorlat_02. A gyakorlat célja megismerkedni a MATLAB Simulink mőködésével, filozófiájával.

Mérés 3 - Ellenörzö mérés - 5. Alakítsunk A-t meg D-t oda-vissza (A/D, D/A átlakító)

A gyakorlat célja a fehér és a színes zaj bemutatása.

Függvények ábrázolása

MATLAB. 6. gyakorlat. Integrálás folytatás, gyakorlás

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

KANDÓ KÁLMÁN VILLAMOSMÉRNÖKI FŐISKOLAI KAR. Mikroelektronikai és Technológiai Intézet. Aktív Szűrők. Analóg és Hírközlési Áramkörök

11.5. Ellipszis és ellipszisív

4_Gnuplot1. October 11, Jegyzetben az 3. fejezet (36-től 52.-ig oldalig).

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

Analóg elektronika - laboratóriumi gyakorlatok

M-Fájlok létrehozása MATLAB-ban

Rajz 01 gyakorló feladat

Mesh generálás. IványiPéter

Első egyéni feladat (Minta)

Vérnyomásmérés, elektrokardiográfia. A testhelyzet, a légzés, a munkavégzés hatása a keringési rendszerre. A mérési adatok elemzése és értékelése

Vérnyomásmérés, elektrokardiográfia. A testhelyzet, a légzés, a munkavégzés hatása a keringési rendszerre.

6. Függvények. Legyen függvény és nem üreshalmaz. A függvényt az f K-ra való kiterjesztésének

MÁTRIXFÜGGVÉNYEK, SAJÁT FÜGGVÉNYEK, GRAFIKA

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI EMELT SZINT Paraméter

Bevezető. Mi is az a GeoGebra? Tények

A feladat megoldása során a Microsoft Office Excel használata a javasolt. Ebben a feladatban a következőket fogjuk gyakorolni:

10. Koordinátageometria

A program a köröket és köríveket az óramutató járásával ellentétes irányban rajzolja meg.

Aromo Szöveges Értékelés

Jelek és rendszerek 1. 10/9/2011 Dr. Buchman Attila Informatikai Rendszerek és Hálózatok Tanszék

Rajz 02 gyakorló feladat

6. Függvények. 1. Az alábbi függvények közül melyik szigorúan monoton növekvő a 0;1 intervallumban?

1. Halmazok, számhalmazok, alapműveletek

Oktatási segédanyag. Weboldalszerkesztési gyakorlatok

MODULATOR Számítógépes program Commodore 64-re a párhuzamos rezgések összetételének tanulmányozására

Diagram készítése. Diagramok formázása

MATLAB. 3. gyakorlat. Mátrixműveletek, címzések

Villamos jelek mintavételezése, feldolgozása. LabVIEW 7.1

Diagram létrehozása. 1. ábra Minta a diagramkészítéshez

1. A komplex számok ábrázolása

EuroSymphony Térképes diagram

ReszlAd fájl, kitöltési útmutató:

Matlab alapok. Baran Ágnes. Grafika. Baran Ágnes Matlab alapok Grafika 1 / 21

Lakóház tervezés ADT 3.3-al. Segédlet

A LOGO MOTION TANÍTÁSA

Word V. tabulátortípus meg nem jelenik: Tabulátor - balra, Tabulátor - jobbra,

Imagine Logo Tanmenet évfolyam

Az egyenes egyenlete: 2 pont. Az összevont alak: 1 pont. Melyik ábrán látható e függvény grafikonjának egy részlete?

Digitális szűrők - (BMEVIMIM278) Házi Feladat

Maple: Deriváltak és a függvény nevezetes pontjai

EGYENES ILLESZTÉSE (OFFICE

Tájékoztató. Használható segédeszköz: -

Jelgenerálás virtuális eszközökkel. LabVIEW 7.1

fmaozaik :n :m :h :s járóóra

Függvények Megoldások

Modern Fizika Labor. 5. ESR (Elektronspin rezonancia) Fizika BSc. A mérés dátuma: okt. 25. A mérés száma és címe: Értékelés:

BASH SCRIPT SHELL JEGYZETEK

Időjárási csúcsok. Bemenet. Kimenet. Példa. Korlátok. Nemes Tihamér Nemzetközi Informatikai Tanulmányi Verseny, 2-3. korcsoport

Több oldalas dokumentum készítése. MS Word 2010 szövegszerkesztővel

Prezentáció, Diagramok, rajzolt objektumok. Szervezeti diagram

QGIS gyakorló. Cím: Pufferzóna előállítása (Buffering) Minta fájl letöltése:

Ismerkedés az új felülettel

Eddigi tanulmányaink alapján már egy sor, a szeizmikában általánosan használt műveletet el tudunk végezni.

1.A. feladat: Programablakok

Hossz- és keresztszelvények előállítása

Analóg elektronika - laboratóriumi gyakorlatok

Számítógépes gyakorlat MATLAB, Control System Toolbox

Vérnyomásmérés, elektrokardiográfia. A testhelyzet, a légzés, a munkavégzés hatása a keringési rendszerre. A mérési adatok elemzése és értékelése

QGIS tanfolyam (ver.2.0)

Ossz1. vezetett gyakorlat

Villamos jelek mintavételezése, feldolgozása. LabVIEW előadás

Kérdés Lista. A Magyarországon alkalmazott rajzlapoknál mekkora az oldalak aránya?

Bevezetés a méréstechnikába és jelfeldolgozásba 7. mérés RC tag Bartha András, Dobránszky Márk

EGYENES ILLESZTÉSE (OFFICE

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

BME MOGI Gépészeti informatika 15.

Aromo Szöveges értékelés normál tantárggyal

1. tétel. 1. Egy derékszögű háromszög egyik szöge 50, a szög melletti befogója 7 cm. Mekkora a háromszög átfogója? (4 pont)

c adatpontok és az ismeretlen pont közötti kovariancia vektora

1. kép. A Stílus beállítása; új színskála megadása.

MATLAB alapismeretek III.

Segédanyag az iktatáshoz. Tartalomjegyzék

függvény grafikonja milyen transzformációkkal származtatható az f0 : R R, f0(

Képek és grafikák. A Beszúrás/Kép parancsot választva beszúrhatunk képet ClipArt gyűjteményből, vagy fájlból. 1. ábra Kép beszúrása

Prezentáció Microsoft PowerPoint XP

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Függvények

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Függvények

EGYENÁRAMÚ TÁPEGYSÉGEK

SCILAB programcsomag segítségével

Függvények december 6. Határozza meg a következő határértékeket! 1. Feladat: x 0 7x 15 x ) = lim. Megoldás: lim. 2. Feladat: lim.

Átírás:

1. Hozzon létre egy tetszőleges nevű mappát. Az elhelyezésekor vegye figyelembe, hogy az elkövetkező feladatokban a Matlab a létrehozott mappát használni fogja. A létrehozott mappát adja hozzá a Matlab keresőútvonalához (Matlab search path). Nyisson meg egy új Matlab script-et. A létrehozott script-et mentse el a létrehozott új mappába. Az elmentett script segítségével rajzoljon ki egy egyenest, amely kezdőpontjának koordinátája (0,0), végpontjának koordinátája (100,100) és a végpontok között 99 pontot tartalmaz. Megoldás: Az új mappa létrehozása után (jelen példában a sajat_programok nevű mappát hoztuk létre az asztalon) használjuk a Matlab Home címkéje alatt az Environment szekcióban található Set Path gombot. Erre klikkelve megnyílik egy párbeszédablak, amelynek Add Folder opciója segítségével a fájlrszerben navigálva kiválasztható a hozzáadni kívánt mappa.

A Matlab Home címkéje alatt a File szekcióban található a New gomb. Erre klikkelve a felugró lehetőségek közül válasszuk a Script lehetőséget. A megnyíló, egyelőre üres, névtelen script-et mentsük el az imént létrehozott mappába vonalrajzolas.m néven.

A vonalrajzolas.m script-be írjuk az alábbi kódot: x = 1:100; % 100 elemet tartalmazó vektor létrehozása y = 1:100; % 100 elemet tartalmazó vektor létrehozása plot(x,y); % y elemeinek kirajzolása, x elemeinek függvényében Mentsük el, majd futtassuk a script-et. Eredmény:

100 90 80 70 60 50 40 30 20 10 0 0 10 20 30 40 50 60 70 80 90 100 Önálló feladat: Adjon hozzá a Matlab keresőútvonalához két mappát, amelyekben egy-egy azonos nevű, de eltérő kódot tartalmazó Matlab script-et helyez. Próbálja ki, mi történik, ha a parancssorba begépeli a script nevét és Enter-t nyom, a kettő közül melyik script fog futni.

2. Készítsen egy Matlab script-et, amely előállítja egy háromszögjel 5 periódusát és a jelben kijelöli a lokális maximumokat. A háromszögjel legyen szimmetrikus, egy periódus tartalmazzon 10 mintát. A program rajzolja ki a háromszögjelet kék színnel és ugyanezen ábrán jelölje meg a lokális maximumokat piros színnel. Segítség: használja a Matlab sawtooth és findpeaks függvényeit. Megoldás: T = 10; % változó létrehozása és értékadás f = 1 / T; % változó létrehozása és értékadás t = 0:1:5*T; % 0 és 50 közti számok, lépésköz = 1 haromszogjel = sawtooth(2*pi*f*t, 1/2); % szimmetrikus háromszögjel [val, pos] = findpeaks(haromszogjel, 'MinPeakDistance', 9); % csúcsok keresése a háromszögjelben úgy, hogy az egyes csúcsok közti távolság legalább 9 minta legyen figure(1); % új ábra, 1-gyes sorszámmal plot(haromszogjel, 'b'); % a háromszögjel kirajzolása kék színnel hold on; % az eddig kirajzolt jelalakok megtartása, amikor új jelet rajzolunk scatter(pos, val, 'r'); % a val változó kirajzolása a pos változó függvényében, piros színnel úgy, hogy az egyes pontok nincsenek összekötve grid on; % rács rajzolása title('haromszog jel lokális maximumokkal'); % az ábra címének beállítása Eredmény: 1 Haromszog jel lokális maximumokkal 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 0 10 20 30 40 50 60

3. Készítsen egy Matlab script-et, amely előállítja két szinusz jel 5 periódusát. A szinusz jelek amplitúdója és frekvenciája legyen megegyező, a fáziskülönbség köztük legyen 30. A szinusz jelek egy periódusa tartalmazzon 100 mintát. A program rajzolja ki az első jelet kék színnel, az ehhez képest 30 -kal késő jelet piros színnel, egy ábrára. Megoldás: T = 100; % változó létrehozása és értékadás f = 1 / T; % változó létrehozása és értékadás t = 0:1:5*T; % 0 és 500 közti számok, lépésköz = 1 sin_1 = sin(2*pi*f*t); % szinusz jel, frekvencia = 0.01, fázis = 0 sin_2 = sin(2*pi*f*t-pi/6); % szinusz jel, frekvencia = 0.01, fázis = -30 figure(1); % új ábra, 1-gyes sorszámmal plot(sin_1, 'b'); % a sin_1 jel kirajzolása kék színnel hold on; % az eddig kirajzolt jelalakok megtartása, amikor új jelet rajzolunk plot(sin_2, 'r'); % a sin_2 jel kirajzolása piros színnel grid on; % rács rajzolása title('szinusz jelek 30 fokos faziskulonbseggel'); % az ábra címének beállítása Eredmény: 1 Szinusz jelek 30 fokos faziskulonbseggel 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 0 100 200 300 400 500 600 Önálló feladat: Állítson elő és ábrázoljon két szinusz jelet, amelyek frekvenciája nem egyezik meg, az első jel frekvenciája legyen a második jel frekvenciájának 1,5-szerese.

4. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt, majd ugyanazon ábrára kirajzolja az ecg1 elnevezésű jelet kék színnel és a ppgl_nir elnevezésű jelet piros színnel. Válassza ki az ecg1 elnevezésű jel minden századik mintáját, és ezeket a pontokat jelölje meg fekete színű körrel. Válassza ki a ppgl_nir elnevezésű jel minden ötszázadik mintáját és ezeket a pontokat jelölje meg zöld színű csillaggal. Segítség: Másolja be a hhmbinread.m nevű Matlab scrip-et abba a mappába, amelybe a saját script-jét helyezi és használja a hhmbinread függvényt a jelek beolvasásához. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); % fájl beolvasása nyersecg = JA_jelei.ecg1; % az ecg1 nevű jel kiolvasása nyersppg = JA_jelei.ppgl_nir; % a ppgl_nir nevű jel kiolvasása figure(1); % új ábra, 1-gyes sorszámmal plot(nyersecg, 'b'); % a nyersecg jel kirajzolása kék színnel hold on; % az eddig kirajzolt jelalakok megtartása, amikor új jelet rajzolunk plot(nyersppg, 'r'); % a nyersppg jel kirajzolása piros színnel grid on; % rács rajzolása pontok_szama_ecg = numel(nyersecg); % a nyersecg jelben található elemek számának meghatározása pontok_szama_ppg = numel(nyersppg); % a nyersppg jelben található elemek számának meghatározása kivalasztott_pontok_ecg = 1:100:pontok_szama_ECG; % a nyersecg jelben található elemek közül minden századik kiválasztása kivalasztott_pontok_ppg = 1:500:pontok_szama_PPG; % a nyersppg jelben található elemek közül minden őtszázadik kiválasztása scatter(kivalasztott_pontok_ecg, nyersecg(kivalasztott_pontok_ecg), 'k', 'o'); % a nyersecg jelből kiválasztott pontok kirajzolása fekete körökkel úgy, hogy a pontok nincsenek összekötve scatter(kivalasztott_pontok_ppg, nyersppg(kivalasztott_pontok_ppg), 'g', '*'); % a nyersppg jelből kiválasztott pontok kirajzolása zöld csillagokkal úgy, hogy a pontok nincsenek összekötve Eredmény:

Jelenlegi formájában az ábra a felvétel globális kiértékelésre használható (például kilógó értékek láthatók a PPG jelen), azonban a felvétel részletes vizuális értékeléséhez ki kell nagyítani az ábrát (Zoom In).

5. Készítsen egy Matlab script-et, amely egy egyszerű QRS detektort valósít meg. A detektált QRSkomplexumokat jelölje meg az eredeti jelen egy ábrán. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); % fájl beolvasása nyersecg = JA_jelei.ecg1; % az ecg1 nevű jel kiolvasása N = 3; % a szűrő fokszámának eltárolása az N változóban W = [5 15]; % a szűrő alsó és felső határfrekvenciájának eltárolása a W változóban Fs = 1000; % a mintavételi frekvencia eltárolása az Fs változóban normalt_frekvencia = W / (Fs / 2); % a szűrő határfrekvenciáját normálni kell (0 és 1 közötti érték kell, hogy legyen), ahol 1 a mintavételi frekvencia felének felel meg [b, a] = butter(n, normalt_frekvencia); % a szűrő fokszáma és normált határfrekvenciája alapján a butter függvény előállítja a butterworth szűrő számlálójának és nevezőjének együtthatóit szurtecg = filtfilt(b, a, nyersecg); % a megtervezett szűrő számlálójának és nevezőjének együtthatói alapján a filtfilt nulla fázistolású szűrést hajt végre derivaltecg = diff(szurtecg); % a szűrt jel deriválása negyzetesecg = derivaltecg.^ 2; % a derivált jel négyzetre emelése integraltecg = []; % üres vektor az integrált jel értékeinek későbbi tárolásához for i = 1 : numel(negyzetesecg) - 149 integraltecg(i) = mean(negyzetesecg(i:i+149)); % 150 minta szélességű mozgó ablakos integrálás végrehajtása [val, pos] = findpeaks(integraltecg, 'MinPeakDistance', 200); % csúcsok keresése az integrált jelben úgy, hogy az egyes csúcsok közti távolság legalább 200 minta legyen (200 ms-on belül nem következhet be két QRS) ECG_terjedelem = max(integraltecg) - min(integraltecg); % az integrált jel legnagyobb és legkisebb elemének különbségét használjuk annak eldöntésére, hogy a findpeaks által talált csúcsok QRS-hez tartoznak, vagy nem kivalasztottcsucsok = []; % üres vektor a QRS-ként azonosított csúcsok későbbi tárolására for i = 1 : numel(val) if val(i) > ECG_terjedelem * 0.6 kivalasztottcsucsok = [kivalasztottcsucsok pos(i)]; % az integrált jel azon csúcsait tekintjük QRS-nek, ahol a csúcs nagyobb, mint a jel legnagyobb és legkisebb elemének különbségének 0,6-szerese, ezzel kizárva az integrált jel alsó részén lévő lokális maximumokat azonositottqrskomplexumok = kivalasztottcsucsok + 75; % a mozgó ablakos integrálás torzításának kompenzálása figure(1); % új ábra, 1-gyes sorszámmal plot(nyersecg); % a nyersecg jel kirajzolása grid on; % rács rajzolása hold on; % az eddig kirajzolt jelalakok megtartása, amikor új jelet rajzolunk scatter(azonositottqrskomplexumok, nyersecg(azonositottqrskomplexumok)); % a nyersecg jelből QRS-ként azonosított pontok kirajzolása úgy, hogy a pontok nincsenek összekötve title('azonositott QRS-komplexumok az EKG-ban'); % az ábra címének beállítása xlabel('ido, ms'); % az x-tengely címének beállítása ylabel('amplitudo, a.u.'); % az y-tengely címének beállítása Eredmény:

3500 Azonosított QRS-komplexumok az EKG-ban 3000 Amplitudo, a.u. 2500 2000 1500 Kinagyítás után: 1000 0 0.5 1 1.5 2 2.5 Ido, ms 10 5 3400 Azonosított QRS-komplexumok az EKG-ban 3200 3000 2800 Amplitudo, a.u. 2600 2400 2200 2000 1800 1600 1400 1.85 1.9 1.95 2 2.05 2.1 2.15 2.2 Ido, ms 10 4

6. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt majd meghatározza az ecg1 elnevezésű jel alapján a szívciklus hosszokat (trr). Ábrázolja a szívciklus hosszokat az idő függvényében, az időegység legyen másodperc. Megjegyzés: A szívciklus hosszok egy vektort alkotnak, ezért közvetlenül is ábrázolhatók (plot(trr)), így azonban csak az derül ki az ábrából, hogy hányadik szívütéshez tartozik egy adott szívciklus hossz, nem derül ki, hogy a szívütés mikor következett be. Átlagos szívfrekvencia (70 ütés / perc) esetén a szívciklus sorszáma és bekövetkezésének másodpercben mért időpontja hasonló eredményt ad, ezért fontos egyértelműen jelölni, hogy a szívütések sorszáma, vagy a szívütések bekövetkezésének időpontja látható az x-tengelyen. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); nyersecg = JA_jelei.ecg1; N = 3; W = [5 15]; Fs = 1000; normalt_frekvencia = W / (Fs / 2); [b, a] = butter(n, normalt_frekvencia); szurtecg = filtfilt(b, a, nyersecg); derivaltecg = diff(szurtecg); negyzetesecg = derivaltecg.^ 2; integraltecg = []; for i = 1 : numel(negyzetesecg) - 149 integraltecg(i) = mean(negyzetesecg(i:i+149)); [val, pos] = findpeaks(integraltecg, 'MinPeakDistance', 200); ECG_terjedelem = max(integraltecg) - min(integraltecg); kivalasztottcsucsok = []; for i = 1 : numel(val) if val(i) > ECG_terjedelem * 0.6 kivalasztottcsucsok = [kivalasztottcsucsok pos(i)]; azonositottqrskomplexumok = kivalasztottcsucsok + 75; trr = diff(azonositottqrskomplexumok); % az azonosított QRS-ek közti időkülönbség (a szívciklus hosszok, trr) meghatározása ido_millisec = azonositottqrskomplexumok(1:-1); % a feladat szerint a szívciklus hosszokat az idő függvényében kell ábrázolni. Itt ezt úgy kezeljük, hogy a szívciklust meghatározó két QRS közül a korábbi időpontjához reljük az adott szívciklust. Így az első QRS-től az utolsó előtti QRS-ig, minden QRS időpontjához tartozni fog egy szívciklus hossz. A mintavételi frekvencia 1 khz, tehát az időpontok ms-ban értők. ido_sec = ido_millisec / 1000; % az időpontok átszámolása ms-ból s-ba figure(1); % új ábra, 1-gyes sorszámmal scatter(ido_sec, trr, '.'); % a trr-ek ábrázolása a s-ban értelmezett időpontok függvényében úgy, hogy a pontok nincsenek egymással összekötve. A pontokat pöttyökkel ábrázoljuk. Érdemes kipróbálni, milyen hatást kelt az ábra, ha a pontokat összekötjük: plot(ido_sec, trr) grid on; % rács rajzolása title('trr az ido fuggvenyeben'); % az ábra címének beállítása xlabel('ido, s'); % az x-tengely címének beállítása ylabel('trr, ms'); % az y-tengely címének beállítása Eredmény:

880 trr az ido fuggvenyeben 860 840 trr, ms 820 800 780 760 0 50 100 150 200 250 Ido, s A pontokat összekötve jól érzékeltethető az időbeliség. 880 trr az ido fuggvenyeben 860 840 trr, ms 820 800 780 760 0 50 100 150 200 250 Ido, s Önálló feladat: Ábrázolja a szomszédos szívciklushosszok különbségét az idő függvényében.

7. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt majd kirajzolja az ecg1 elnevezésű jel alapján számított Poincaré-diagramot. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); nyersecg = JA_jelei.ecg1; N = 3; W = [5 15]; Fs = 1000; normalt_frekvencia = W / (Fs / 2); [b, a] = butter(n, normalt_frekvencia); szurtecg = filtfilt(b, a, nyersecg); derivaltecg = diff(szurtecg); negyzetesecg = derivaltecg.^ 2; integraltecg = []; for i = 1 : numel(negyzetesecg) - 149 integraltecg(i) = mean(negyzetesecg(i:i+149)); [val, pos] = findpeaks(integraltecg, 'MinPeakDistance', 200); ECG_terjedelem = max(integraltecg) - min(integraltecg); kivalasztottcsucsok = []; for i = 1 : numel(val) if val(i) > ECG_terjedelem * 0.6 kivalasztottcsucsok = [kivalasztottcsucsok pos(i)]; azonositottqrskomplexumok = kivalasztottcsucsok + 75; trr = diff(azonositottqrskomplexumok); poincare_x = trr(1:-1); % a Poincare-diagram x-koordinátáinak (trr(i)) meghatározása poincare_y = trr(2:); % a Poincare-diagram y-koordinátáinak (trr(i+1)) meghatározása figure(1); % új ábra, 1-gyes sorszámmal scatter(poincare_x, poincare_y, '.'); % az y-koordináták ábrázolása az x- koordináták függvényében úgy, hogy a pontok nincsenek egymással összekötve. A pontokat pöttyökkel ábrázoljuk. grid on; % rács rajzolása title('poincare diagram'); % az ábra címének beállítása xlabel('trr(i), ms'); % az x-tengely címének beállítása ylabel('trr(i+1), ms'); % az y-tengely címének beállítása Eredmény:

880 Poincare diagram 860 840 trr(i+1), ms 820 800 780 760 760 780 800 820 840 860 880 trr(i), ms Önálló feladat: A fenti ábrába rajzoljon be egy 45 -os egyenest.

8. Fejlessze tovább az 5. feladatban készített QRS detektort úgy, hogy az azonosított QRS-komplexumok 50 minta szélességű környezetében keresse meg a nyers EKG jel lokális maximumát. A detektált lokális maximumokat jelölje meg az eredeti jelen egy ábrán. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); nyersecg = JA_jelei.ecg1; N = 3; W = [5 15]; Fs = 1000; normalt_frekvencia = W / (Fs / 2); [b, a] = butter(n, normalt_frekvencia); szurtecg = filtfilt(b, a, nyersecg); derivaltecg = diff(szurtecg); negyzetesecg = derivaltecg.^ 2; integraltecg = []; for i = 1 : numel(negyzetesecg) - 149 integraltecg(i) = mean(negyzetesecg(i:i+149)); [val, pos] = findpeaks(integraltecg, 'MinPeakDistance', 200); ECG_terjedelem = max(integraltecg) - min(integraltecg); kivalasztottcsucsok = []; for i = 1 : numel(val) if val(i) > ECG_terjedelem * 0.6 kivalasztottcsucsok = [kivalasztottcsucsok pos(i)]; azonositottqrskomplexumok = kivalasztottcsucsok + 75; lokalismaximumok = []; % üres vektor a lokális maximumok későbbi tárolására for i = 1 : numel(azonositottqrskomplexumok) % végig megyünk az összes QRS-ként azonosított ponton eddigimaxpont = azonositottqrskomplexumok(i); % a lokális maximum keresés kezdetén az eddig talált legnagyobb pont az aktuálisan vizsgált QRS-ként azonosított pont for j = 1 : 50 % az aktuálisan vizsgált QRS-ként azonosított pont 50 minta szélességű környezetének pontjain megyünk végig if nyersecg(azonositottqrskomplexumok(i) + j) > nyersecg(eddigimaxpont) eddigimaxpont = azonositottqrskomplexumok(i) + j; if nyersecg(azonositottqrskomplexumok(i) - j) > nyersecg(eddigimaxpont) eddigimaxpont = azonositottqrskomplexumok(i) - j; % végig megyünk a környezet pontjain, és ha olyan pontot találunk, akár pozitív, akár negatív irányban, amely nagyobb, mint az eddig talált legnagyobb pont, akkor mostantól ez a pont lesz az eddig talált legnagyobb pont lokalismaximumok(i) = eddigimaxpont; % ha végig mentünk a környezet összes pontján, akkor az ezek között talált legnagyobb pont lesz az adott QRS-hez tartozó lokális maximum figure(1); plot(nyersecg); grid on; hold on; scatter(lokalismaximumok, nyersecg(lokalismaximumok)); title('azonositott lokalis maximumok az EKG-ban'); xlabel('ido, ms'); ylabel('amplitudo, a.u.');

Eredmény: 3500 Azonositott lokalis maximumok az EKG-ban 3000 Amplitudo, a.u. 2500 2000 1500 Kinagyítás után: 1000 0 0.5 1 1.5 2 2.5 Ido, ms 10 5 3400 Azonositott lokalis maximumok az EKG-ban 3200 3000 2800 Amplitudo, a.u. 2600 2400 2200 2000 1800 1600 1400 1.85 1.9 1.95 2 2.05 2.1 2.15 2.2 Ido, ms 10 4 Önálló feladat: A kapott EKG lokális maximumok 300 minta szélességű környezetében határozza meg az ugyanezen felvételhez tartozó ppgl_nir jelben található lokális minimumokat. Segítség: Első lépésben célszerű ábrázolni, hová esnek a PPG jelen azok a pontok, amelyek az EKG lokális maximumok időpillanatának felelnek meg.

9. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt majd meghatározza az ecg1 elnevezésű jel spektrumát. Ügyeljen a vízszintes tengely (frekvencia) megfelelő skálázására, vegye figyelembe, hogy a HHMD-vel készült felvételek esetén a mintavételi frekvencia 1 khz. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); % fájl beolvasása nyersecg = JA_jelei.ecg1; % az ecg1 nevű jel kiolvasása ECG_atlag_kivonva = nyersecg - mean(nyersecg); % az jel középértékének kivonása ECG_spektrum = abs(fft(ecg_atlag_kivonva)); % a jel Fourier-transzformációja után kapott komplex számok abszolút értékének meghatározása Fs = 1000; % a mintavételi frekvencia 1 khz f = (1:numel(ECG_spektrum)) / numel(ecg_spektrum) * Fs; % a Matlab a spektrumot 0 Hz-től a mintavétel frekvenciáig ábrázolja annyi ponton, ahány pontból az időfüggvény áll. Jelen esetben a spektrum első pontja 0 Hz-nek, utolsó pontja 1000 Hz-nek felel meg, ezért használjuk a frekvencia tengely átskálázása során a spektrum elemszámával való osztást és a mintavételi frekvenciával való szorzást. A kirajzolt spektrum a mintavételi frekvencia felére szimmetrikus, ezért a spektrum 500 Hz feletti része plusz információt nem hordoz a 0-500 Hz tartományhoz képest. figure(1); plot(f, ECG_spektrum); % a spektrum pontjait az átskálázott frekvencia függvényében ábrázoljuk grid on; title('az EKG spektruma'); xlabel('frekvencia, Hz'); ylabel('amplitudo'); Eredmény: 3.5 10 7 Az EKG spektruma 3 2.5 Amplitudo 2 1.5 1 0.5 0 0 100 200 300 400 500 600 700 800 900 1000 Frekvencia, Hz Önálló feladat: Módosítsa a fenti script-et úgy, hogy csak a 0-500 Hz tartomány jelenjen meg az ábrán.

10. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt, majd a felvétel ecg1 elnevezésű jelén digitális szűrést hajt végre. Hasonlítsa össze két különböző szűrő hatását. A szűrők legyenek 3-ad fokú Butterworth aluláteresztő szűrők. A törésponti frekvencia legyen 20, illetve 15 Hz. (Vegye figyelembe, hogy a HHMD-vel készült felvételek esetén a mintavételi frekvencia 1 khz.) A kétféle szűrt jelet rajzolja egymásra kék, illetve piros színnel, nagyítson ki három szívciklust, alkalmazzon az ábrán jelmagyarázatot (2-3 jel ábrázolása esetén célszerű a piros, kék, fekete színeket használni, mivel ezek szürkeárnyalatos nyomtatás esetén is megkülönböztethetők). Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); % fájl beolvasása nyersecg = JA_jelei.ecg1; % az ecg1 nevű jel kiolvasása N = 3; % a szűrő fokszámának eltárolása az N változóban Fs = 1000; % a mintavételi frekvencia 1 khz W_20 = 20; % a 20 Hz-es szűrő határfrekvenciájának eltárolása a W_20 változóban normalt_frekvencia_20 = W_20 / (Fs / 2); % a szűrő határfrekvenciáját normálni kell (0 és 1 közötti érték kell, hogy legyen), ahol 1 a mintavételi frekvencia felének felel meg [b_20, a_20] = butter(n, normalt_frekvencia_20); % a szűrő fokszáma és normált határfrekvenciája alapján a butter függvény előállítja a butterworth szűrő számlálójának és nevezőjének együtthatóit szurtecg_20 = filtfilt(b_20, a_20, nyersecg); % a megtervezett szűrő számlálójának és nevezőjének együtthatói alapján a filtfilt nulla fázistolású szűrést hajt végre W_15 = 15; % a 15 Hz-es szűrő határfrekvenciájának eltárolása a W_15 változóban normalt_frekvencia_15 = W_15 / (Fs / 2); % a határfrekvencia normálása [b_15, a_15] = butter(n, normalt_frekvencia_15); % a butterworth szűrő számláló és nevező együtthatóinak előállítása szurtecg_15 = filtfilt(b_15, a_15, nyersecg); % a szűrés végrehajtása figure(1); % új ábra, 1-gyes sorszámmal plot(szurtecg_20, 'b'); % a 20 Hz-cel szűrt jel kirajzolása kék színnel hold on; % az eddig kirajzolt jelalakok megtartása, amikor új jelet rajzolunk plot(szurtecg_15, 'r'); % a 15 Hz-cel szűrt jel kirajzolása piros színnel grid on; % rács rajzolása leg('lpf - 20 Hz', 'LPF - 15 Hz'); % jelmagyarázat rajzolása. A vesszővel elválasztott magyarázatok sorrje meg kell, hogy egyezzen a jelek kirajzolásának sorrjével title('a szures hatasa az EKG-ra'); % az ábra címének beállítása xlabel('ido, ms'); % az x-tengely címének beállítása ylabel('amplitudo, a.u.'); % az y-tengely címének beállítása Eredmény:

2800 2700 2600 A szures hatasa az EKG-ra LPF - 20 Hz LPF - 15 Hz 2500 Amplitudo, a.u. 2400 2300 2200 2100 2000 1900 2.65 2.7 2.75 2.8 2.85 2.9 Ido, ms 10 4

11. Készítsen egy Matlab script-et, amely beolvas egy, a HHMD-vel készült felvételt, majd a felvétel ecg1 elnevezésű jelén digitális szűrést hajt végre. Hasonlítsa össze három különböző szűrő hatását. A szűrők legyenek 3-ad fokú Butterworth aluláteresztő szűrők. A törésponti frekvencia legyen 40, 30, illetve 15 Hz. (Vegye figyelembe, hogy a HHMD-vel készült felvételek esetén a mintavételi frekvencia 1 khz.) A háromféle szűrt jelet rajzolja egymásra olyan módon, hogy fekete-fehér ábrázolás esetén is jól felismerhetők legyenek az egyes jelek. Nagyítson ki egy szívciklust, alkalmazzon az ábrán jelmagyarázatot. Emelje át az ábrát a Microsoft Office Word programba. Megoldás: JA_jelei = hhmbinread('d:\hhmd1_recordings\ja_05_12_2017.hhm'); nyersecg = JA_jelei.ecg1; N = 3; Fs = 1000; W_40 = 40; normalt_frekvencia_40 = W_40 / (Fs / 2); [b_40, a_40] = butter(n, normalt_frekvencia_40); szurtecg_40 = filtfilt(b_40, a_40, nyersecg); W_30 = 30; normalt_frekvencia_30 = W_30 / (Fs / 2); [b_30, a_30] = butter(n, normalt_frekvencia_30); szurtecg_30 = filtfilt(b_30, a_30, nyersecg); W_15 = 15; normalt_frekvencia_15 = W_15 / (Fs / 2); [b_15, a_15] = butter(n, normalt_frekvencia_15); szurtecg_15 = filtfilt(b_15, a_15, nyersecg); figure(1); plot(szurtecg_40, 'k-'); % a 40 Hz-cel szűrt jel kirajzolása fekete folytonos vonallal hold on; plot(szurtecg_30, 'k--', 'LineWidth', 1.5); % a 30 Hz-cel szűrt jel kirajzolása fekete szaggatott vonallal, 1,5-ös vonalvastagsággal plot(szurtecg_15, 'k:', 'LineWidth', 1.5); % a 15 Hz-cel szűrt jel kirajzolása fekete pontozott vonallal, 1,5-ös vonalvastagsággal grid on; leg('lpf - 40 Hz', 'LPF - 30 Hz', 'LPF - 15 Hz'); title('a szures hatasa az EKG-ra'); xlabel('ido, ms'); ylabel('amplitudo, a.u.'); A Matlab lehetőséget ad az ábrák kézzel történő szerkesztésére is. A fenti példában beállított vonalszín, vonalstílus és vonalvastagság például beállítható az ábra eszköztárában (Tools) található Edit Plot eszközzel. Az Edit Plot kiválasztása után jobb-klikkelve a szerkeszteni kívánt jelre, felugrik a szín, stílus, vonalvastagság és további paraméterek beállítását lehetővé tevő menü. Az ábra tengelyei az ábra menüszalagjának Edit elemében található Axes Properties menüponttal szerkeszthetők. Beállítható a tengelyek neve, az ábrázolni kívánt tartomány, az ábrafelirat betűmérete és betűstílusa, a tengelyek osztási pontjai és további paraméterek. Az ábra átemelése a Microsoft Office Word programba legkönnyebben az ábra menüszalagjának Edit elemében található Copy Figure menüponttal tehető meg. Ezt követően a Word-ben egyszerű beillesztés parancs alkalmazása után megjelenik a másolt ábra.

Eredmény: A szures hatasa az EKG-ra 3000 2800 LPF - 40 Hz LPF - 30 Hz LPF - 15 Hz Amplitudo, a.u. 2600 2400 2200 2000 4.71 4.72 4.73 4.74 4.75 4.76 Ido, ms 10 4 Önálló feladat: Hasonlítsa össze a fenti három szűrés eredményeként kapott jel spektrumát az eredeti nyers jel spektrumával. Készítette: Nagy Péter, BME MIT Észrevételeket a nagy@mit.bme.hu címen lehet jelezni.