Error while creating an EDF file
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Maxime Alessandri
le 29 Avr 2021
Modifié(e) : Maxime Alessandri
le 4 Avr 2022
While creating an EDF file in matlab form a matrix, matlab return an error which doesn't make sense
%getting the name from the original file
Name = string(Infos.OriginalName(1:end-4))+ ".edf";
%Extracting the data of the signal in the proper form
sigdata = [traces(1,:)', traces(2,:)', traces(3,:)'];
%getting the sampling frequency of my recordings
fs = 1000;
% t = 0:1/fs:(size(sigdata,1)-1)/fs; I used that to plot the data
%making the header for the EDF file
hdr = edfheader("EDF+");
hdr.Recording = string(Infos.RecordingDate);
hdr.StartDate = string(datetime(string(Infos.RecordingDate(1:11)),'InputFormat','dd-MMM-yyyy', 'Format','dd.MM.yy'));
hdr.StartTime = string(datetime(string(Infos.RecordingDate(13:end)),'InputFormat', 'HH:mm:ss','Format','HH.mm.ss'));
hdr.NumDataRecords = 1;
hdr.DataRecordDuration = seconds(length(sigdata(:,1))/fs);
hdr.NumSignals = 3;
hdr.SignalLabels = ["Parietal_1" "Parietal_2" "Reference"];
hdr.PhysicalDimensions = repelem("uV",3);
%% this is where my problem is
hdr.PhysicalMin = min(sigdata);
hdr.PhysicalMax = max(sigdata);
hdr.DigitalMin = [-32768 -32768 -32768];
hdr.DigitalMax = [32767 32767 32767];
EEG_signal = edfwrite(Name,hdr,sigdata,'InputSampleType',"physical");
Everything is fine until a run the last line. Matlab give me this error:
Error using signal.internal.edf.write.validateFieldBytes (line 50)
Each value of "PhysicalMin" field must be less than or equal to 8 bytes. See edfheader documentation for more information.
Error in edfwrite/createFile (line 1667)
signal.internal.edf.write.validateFieldBytes(value, fieldIndex, ...
Error in edfwrite (line 493)
[obj, fileInfo] = createFile(obj, filename, hdr,...
I don't understand because my values in the hdr.PhysicalMin and hdr.PhysicalMax are doubles. when I run the "whos" function on the individual value they are 8 bytes each. Any idea how I could solve the problem ?
5 commentaires
Hassan Farhat
le 5 Nov 2021
Hi Kartheek Akurati
It really depends on the amplitude range of your recorded EEG.
int16() is limited between [-32768 & 32767], anynumber outside this range will be threshold to these maximum limits
ex: int32(65000) = 32767.
So if your signal is higher in amplitude, you need to use higher bits (32) (64 bits is not working)
uint32 is limited between [0 & 65535]
Threfore, if you want to stick to 16 bits you need to rescale your inputs to be limited within the above ranges.
Best Regards
Hassan Farhat
Réponse acceptée
Federico Del Gallo
le 7 Juin 2021
I'm having the same problem. Did you find something to fix this error?
1 commentaire
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur AI for Signals dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!