You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
How to read a .dat file containing an ECG signal?
66 views (last 30 days)
Show older comments
Hi,
I have an ECG signal contains data collected from 12 leads, saved in a .dat file (attached here). Could someone please help me to read this file? I've already installed WFDB toolbox to read the file, however, it's not able to search locally for the file and so not able to read it. I've tried to read data using rdann.m file however it needs an annotator file that I don't have. Any help would be greatly appreciated!
Thanks,
Susan
Accepted Answer
Star Strider
on 6 Aug 2022
PhysioBank used to be much friendlier than it now is.
I have no idea what records you’re interested in, however the easiest way to work with it is to go to the PhysioBank ATM then select the database you’re interested in and then use the Toolbox drop-down menu and select one of the ‘Export as ...’ options to get the data in a relatively easy-to-import file. (I suggest the .CSV option if you want to post it here as an attachment, since the online Run feature here still doesn’t work and play well with .mat files, and .CSV files are easy to work with.)
23 Comments
Susan
on 6 Aug 2022
Edited: Susan
on 6 Aug 2022
@Star Strider Thank you so much for your detailed response! Truly appreciate it. It seems that PhysioBank ATM is useful for reading the ECG signals available in its dataset. Is my understanding correct? I have my data, but it's not part of this PhysioBank. Any idea how can I read that?
Moreover, I followed the steps you mentioned above to try it out, but haven't got any .cvs file. Could you please take a look at this pic and let me know what I am doing wrong?
Star Strider
on 6 Aug 2022
For whatever reason, that particular database no longer exists, although several others do and can be downloaded in several different formats. So if you absolutely must have 00735 you’re out of luck, however 04015 and several of the others exist and can be downloaded (I did that for 04015 to be sure).
I suggest the .zip option, because that includes the .dat file and several related files (although the .CSV file will be easiest to work with, so you may want to download that separately).
I can’t do anything about 00735, however I will help as I can otherwise.
.
Susan
on 6 Aug 2022
Thank you very much again for your help, @Star Strider! Your detailed explanation was very helpful and I am now able to download the available data sets/files. Appreciate it.
Back to my first question, Could you please help me to read the attached .dat file (SE8ECG4E.zip)? It's NOT one of the files available at the PhysioBank ATM but an ECG signal contains measured data collected from 12 leads (I believe in the same format as .dat files available in the PhysioBANK ATM).
I've already installed the WFDB toolbox to read the file, however, it's not able to search locally for the file (I saw your detailed response here How can I read local ecg file using wfdb app? - (mathworks.com)) and so not able to read it. I've tried to read data using the rdann.m file, however, it needs an "annotator file" that I don't have.
Any suggestions/help would be greatly appreciated!
Star Strider
on 6 Aug 2022
‘... however, it's not able to search locally for the file ...’
It may be necessary to tell it where the file is by providing the full path name. The fileparts and fullfile functions may be necessary to do this. The other option is to use the movefile function to copy the .dat file to the same directory as the function that reads it (or wherever that function would look for it). I generally use the files I can easily get through the ATM, so I don’t need the other PhysioNet files, and so have no experience with them.
My note in that post is the best I can do. If possible, download the appropriate .zip file from PhysioNet since it will contain all the other appropriate files. There is a ‘00735.atr’ annotation file in the link I provided earlier (and re-reference here) that may be what you need for the PhysioNet function to work. I suggest downloading all the 00735.* files and put them in the same directory so you have them in the event that you need them.
Otherwise, it appears to be a binary file, and while it’s certainly possible to read binary files with the fread function, my attempts at guessing the necessary parameters in order to read it have not been successful.
Uz = unzip('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1089450/SE8ECG4E.zip')
Uz = 1×1 cell array
{'SE8ECG4E.DAT'}
datfile = readcell(Uz{1})
datfile = 12417×24 cell array
{' B41741881V1.20 None 1024 CCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFI II V1 V2 V3 V4 V5 V6 10 110 20.05OFF 60 22222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22' } {[ 7]} {'2804:25 ?1A!ø $¿:ŨS!"¶'} {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'ü' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'@m' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'z¦P0_2ê<Pñ:=8ÓajA6D→÷+' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'FIôÍvÑ"IRLBѽwAKN.ô×r ÀLPÕ£B¨ÇM@Q; 6ÆwNRw oªFbôNÅR« Õ(»j®PO<Sè 5°(ÆOS)!' ZÞOÏS^!Å ËX P' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'T!æÎ ð ´>PBT¤' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'!· ÅiPsT¯!':!4É ÔPT»!:d!^Ú çªPÄTÊ!I!û ñ¼PðTÞ!gÄ!¢ !ùÄPUó!÷!ÒE!ÔP1Uü!¹,"p!3öPO"Øf"@![ QpU"ô¡"q³!SQU' } {'×¢Ó! wQ§U9"2#Äü!À{QÏUL"^T#ë$"àwQöUf"#D"õ~QV|"½Ï#Ub"Q.V"í$"¦QBV"@$Ï¢"F¾QWV·"7i$Ä"cÂQoVÁ"H$,â"d½QVÈ"f $>ù"g½QV×"~¹$F#~½QVâ"È$T#¾QV×"Í$]ü"ÃQV¿"Ø$]ì"ÆQ¤V²"õ$YÖ"ÅQ©V¹"%bÌ"ÌQVÌ"%sÚ"ÎQuVÖ"£ò$vô"§»QTVÏ"Õ$k# QGVÁ"½$b' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'#QIVµ"¸$[#zQSVµ"u¾$L#svQ\V´"T±$,÷"_wQ_V¤"=$ã"MsQ\V",$Û";nQVV}"|$$Õ""fQ>Vy"' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'X$Î"→YQVy":$ò½" DQéUs"ù)$Ì"#QÅUm"à$¨p"Q£Un"½ë#B"èæPUj" Ã#u"ÊÍPnUZ"#W"·®PRUD"¢_#' } {'"¤PU3"#"SPÝT!"mÙ"Ôê!}2PTÿ!+"°![PTÜ!ö@"aw!.êOGTÃ!Ð"<C!ýËOT©!©×!!ŹOùS!!ÛÝ £OèSh!Tb!¦» _OÀS^!"6!x OtOSE!ßû =v @TO8S!¬ ø? *&OüRá ^_ »→ òNÇRÉ -# ×ô½NRº èQ¨ÏNUR Ö y®eN' } {'R ¤SÍ;BR q' } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'~ý[NÊQ >³=Å<èM}Q M±M1Qa Ôô°OâqMêP? J¬0M¨P X-ï×÷LxPú'Ó¨§eÃLQPÙhuCL*P¾Ñ^'9L→Pª«0õúLúOåíìLúOùåèéLîOõîéç|LÓOø æâsLÀOø→âÝtLÁOyùèØtLÍOjuýòñÅlLØOUlùßù¨YLàOMhïÑÿFLåO[WèÂüBLÞOrAèµî¡ELÅOEè¸Û´?L¡OfóÏÝÑ7LOâíÙ;LvO~âôÏELyOykýÓìÃ7LyOv]ûÅÞ³LrO{_óÄÛ¤LjO}läÑì→LcOvrÒÞýLZOcgÀÛ #LPOJW´Ôð'LDO@NµÛã$L?O>IÃÚÙ L@O=DÓÁËLCO:>Ù«Ç¥LCO59ÖÇþK9O2>ÙÄ…'} {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'O6,¿Ðµz°KöN66Îȵr¡KìN2FÞ¼·KæN'LÝ´°§KÚN'Jϵ¦ªKÊN5Lȹ¨ K½N=NË´KµN:NĦ°K¸N,B·¨KÅN,µKÖN→&»zKÚN:¾twKÊNIÆ¡euK·N3Dα\~KªN@2Æ°aKNA$¸ªlyKN=(°®plKN23»®²p\KN*¿±¢hIKN°«k3KN' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'®s*KxN' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'ºp+KyNzÄh*KNpÅZ#KN+' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'|ÉRKtN.õË_&KjN ë¢Äxm0KdN' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'õ¯fe5KYNûdV2KFNþjR(K.N¨©uQKN¨¹MKN¢¸MKN' } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing } {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
{'¶VöJN¼`æJN´rZäJNlW>ãJNý^@#ÝJNõ^<)ÝJNæ]D6ëJóMÕûRaF.þJ¹MÐÝ' } {'-ûJaMÌë ×JñLÅmøÓØJxL²-NhMJýKõóÉ!+úI{Kz½IöJg→~ìK1IuJbaªþJܹHüIfG^±fKHIrD.A"êîG9IR $w GIc.3úZGIqUcr!G<I²¢ÊpGxIÕÜtÆiGåI→>¿eÀWGJA²¡¨ÿéÀGuK=Â5{]RHLÍÛ#þ.öIN ¼ ÅúIÁOx Ow @TÏK¯Qá 1Z"²ÊNLÙSX!0}$S"]·MDVå!Xè&D%¢öROÖX"°)(!Ì Qy[H# !X,õ+§#Î S>^$"2'} {'j' } {'k&ì"U%aÉ$ü#2ì2Z)%Wd%s%5v6h,V'Yg,&Ü&ê7ä9'} {')O[úiÃ&0(µ:=¥2ã+]÷lT')=B@ê5B.á_pâ'ã*z@Ck9Ä0%b sm(C,^CÊF'} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing} {1×1 missing}
.
Susan
on 6 Aug 2022
Thanks again for your quick response! Truly appreciate it.
As you mentioned, I tell it where the file is by providing the full path name.
>> file = "C:\User\Desktop\test\database\mitdb\SE8ECG4E.dat";
[filepath,name,ext] = fileparts(file)
filepath =
"C:\User\Desktop\test\database\mitdb"
name =
"SE8ECG4E"
ext =
".dat"
or:
filepath = fullfile('C:\Users\Desktop\test\database','mitdb','SE8ECG4E.dat')
But here is the error that I get
[signal, fs, tm] = rdsamp(filepath);
Error using rdsamp (line 204)
Could not find record: C:\User\Desktop\test\database\mitdb\SE8ECG4E. Search path is set to: '.
C:\User\Desktop\test\mcode\..\database\http://physionet.org/physiobank/database/'
then I copied the SE8ECG4E.dat file and paste it to "C:\User\Desktop\test\mcode" , and I got the same error as before
[signal, fs, tm] = rdsamp('C:\User\Desktop\test\mcode\SE8ECG4E.DAT');
Error using rdsamp (line 204)
Could not find record: C:\User\Desktop\test\mcode\SE8ECG4E.DAT. Search path is set to: '.
C:\User\Desktop\test\mcode\..\database\http://physionet.org/physiobank/database/'
First question: I wasn't able to take advantage of the movefile function as you suggested. Could you please kindly tell me what I am doing wrongly?
SourceFile = 'C:\User\Desktop\test\SE8ECG4E.DAT';
destinationFolder = 'C:\User\Desktop\test\database\mitdb'
>> movefile SourceFile destinationFolder
Error using movefile
Cannot copy or move a file or directory onto itself.
Here is how my folder and files in it looks like.
Then I chain the WFDB_path in the wfdbloadlib.m line 50 from [] to the following address to make sure the package searchs locally instead of searching online.
%WFDB_PATH: If empty, will use the default given config.WFDB_PATH
%this is where the toolbox searches for data files (*.dat, *.hea etc).
%When unistalling the toolbox, you may wish to clear this directory to save space.
%See http://www.physionet.org/physiotools/wag/setwfd-1.htm for more details.
WFDB_PATH='C:\User\Desktop\test\database\';%[];
However, still I get the same error as above.
Anyway, THANK YOU SO MUCH for your help and suggestions! I haven't thought about this possibility that you suggested, i.e., "download the appropriate .zip file from PhysioNet since it will contain all the other appropriate files. There is a ‘00735.atr’ annotation file in the link I provided earlier (and re-reference here) that may be what you need for the PhysioNet function to work."
I downloaded the files and working on it! the rdann.m file is attached here too. No success so far and getting an error "Index exceeds Java array dimensions", but I'm on it and it worths a try!
Star Strider
on 6 Aug 2022
My pleasure!
I can’t help with troubleshooting the PhysioNet MATLAB files, especially with respect to Java code (that I have no experience with). I encourage you to contact PhysioNet and ask them for help (or perhaps there are FAQs or other resources that you can use).
I will do what I can otherwise.
Susan
on 10 Aug 2022
Edited: Susan
on 10 Aug 2022
@Star Strider I contacted PhysioNet and asked them for help. No news from them so far.
I'm still working on what you suggested to me. I downloaded a related annotation file and try to read my .dat file using the Matlab code I mentioned above. No success so far though :) However, I figured out that .dat files in PhysioNet bank don't have any headers but mine does. I just wondering if removing headers from my file can work fine with the annotation file I downloaded from the PhysioNet bank.
Could you please help me out with removing the header? This is what I did so far
FidMain = fopen('SE8ECG4E.DAT', 'rt');
hdr = strtrim(regexp(fgetl(FidMain), '\t', 'split'));
fmt = repmat('%f', 1, length(hdr{1,1}));
datacell = textscan(FidMain, fmt, 'Delimiter', ',', 'HeaderLines', 1, 'CollectOutput', 1);
MeasInfo = fread(FidMain,'int');
fclose(FidMain)
Many thanks in advance!
Star Strider
on 10 Aug 2022
As I mentioned before, that appears to be a binary file and I have no idea how to read it. The fread funciton might be able to read it, however that requires knowing information about the file (such as the encoding) and that’s not obvious.
What information are you getting from it?
Star Strider
on 10 Aug 2022
Well, I still can’t read the binary file (the first one). The second file is nothing I’ve ever seen before. I have no idea what its sampling frequency is, however it just looks like some sort of noise. It doesn’t make any sense even after lowpass filtering (guessing at the cutoff frequency). It’s certainly not a normal EKG, and the amplitude is too high for any physiological signal I’ve ever encountered, so there must be some sort of scaling factor involved.
LD1 = load(websave('hdr','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1093815/hdr.mat'))
LD1 = struct with fields:
hdr: {' B41741881V1.20 None 1024 CCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFI II V1 V2 V3 V4 V5 V6 10 110 20.05OFF 60 22222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22/08/1004:11 Ô0Aô (&¿/ˆµ²D7!Ž"'}
LD2 = load(websave('MeasInfo','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1093845/MeasInfo.mat'))
LD2 = struct with fields:
MeasInfo: [387651×1 double]
MeasInfo = LD2.MeasInfo;
x = 0:numel(MeasInfo)-1;
figure
plot(x, MeasInfo)
grid
figure
plot(x, MeasInfo)
grid
xlim([0 1000])
MeasInfoFilt = lowpass(MeasInfo, 0.05, 1, 'ImpulseResponse','iir');
figure
plot(x, MeasInfoFilt)
grid
xlim([0 1000])
I am at a complete loss here.
.
Susan
on 11 Aug 2022
Edited: Susan
on 11 Aug 2022
@Star Strider Thanks again for your detailed response. Even though I haven't solved the problem yet, your answers always are beneficial to me and help me to have a better understanding of the possible solutions to this problem. I truly appreciate your time and help!
I collected another set of data. It's attached here (Data.zip that contains .dat file). Then I used the following code
%Open data file
Fid = fopen('\SE8ECG4E.DAT');
MeasData = fread(Fid,'int');
fclose(Fid);
Fs = 1024; % sample rate
%Plot data
figure;plot((0:length(MeasData)-1)*(1/(Fs*4)),MeasData)
This is what I get
When I zoom in I get
As you mentioned, "the amplitude is too high for any physiological signal".
I dug more into the collected data and this is what I found:
- there is a recording gain of 2mV = 20mm/mV
- Sample rate is 1024
- Some parameters are given for filtering: HP filter= 0.05 and LP Filter = 60
- Recording time: 00:02:07
I expect the signal length to be Sample rate* Recording time = 1024*127 = 130048 but the size of data is 520536 which is almost 4 times greater than 130048. Any idea why this is the case?
Could you please let me know if knowing any of this information can help us to plot a clean ECG signal?
Star Strider
on 11 Aug 2022
Try this —
Uz = unzip('Susan_MeasData.zip')
Uz = 1×1 cell array
{'Susan_MeasData.txt'}
MeasData = readmatrix(Uz{1});
MeasData = MeasData/max(MeasData(end-5000:end)); % Normalise Amplitude
Fs = 1024; % sample rate
Fn = Fs/2;
L = numel(MeasData);
t = linspace(0, L-1, L)/Fs; % Time Vector
DataMask = 13000:L;
MeasDataFilt = sgolayfilt(MeasData, 3, 101); % Filter EKG
%Plot data
figure
subplot(2,1,1)
plot(t,MeasData)
grid
xlim([min(t) max(t)])
subplot(2,1,2)
plot(t,MeasDataFilt)
grid
xlim([min(t) max(t)])
figure
subplot(2,1,1)
plot(t,MeasData)
grid
xlim([13 20])
subplot(2,1,2)
plot(t,MeasDataFilt)
grid
xlim([13 20])
I could not get the frequency-selective filters to produce the result I want, so I went with sgolayfilt with satisfactory results for the entire record. (It looks normal to me, although I do not trust the sampling frequency because the intervals do not appear to be correct, although the relative intervals as fractions of the R-R intervals are.)
The file contains the extracted data as a text file.
.
Susan
on 11 Aug 2022
Thank you so much, @Star Strider. May I ask you why you normalized the signal in this way? It has nothing do with the recording gain of 2mV = 20mm/mV, right?
Star Strider
on 11 Aug 2022
As always, my pleasure!
I have no idea what the units of the signal are, so I have no idea how to apply the 20mm/mV scaling. I just scaled it as I did to get the relative amplitudes of the various deflections in a context I’m familiar with, that being a 1mV R-deflection. (The timing still doesn’t make sense to me.) The baseline appears to be a decaying exponential, so I chose the end of the signal (where the baseline variation would be minimal) as the basis of the scaling.
.
Achamma Thomas
on 12 Aug 2022
Hi,
I have been facing a similar issue. I have attached the ECG dat file.This file is from a BPL 9108 Cardiart Machine. @Star Strider could you please help. Thank you.
Star Strider
on 12 Aug 2022
Please post this as a new question.
It is not appropriate to post it here.
Susan
on 12 Aug 2022
@Achamma Thomas Hey! I haven't been able to solve that issue yet. But it seems your data has the same structure of mine. There is a header, raw data, and maybe sth at the end. Happy to brianstorm and find a solution!
Achamma Thomas
on 13 Aug 2022
@Susan yes will surely share if I find a solution, meanwhile do let me know if you find one too.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)