Error while creating an EDF file

7 次查看(过去 30 天)
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 个评论
Hassan Farhat
Hassan Farhat 2021-11-5
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
Maxime Alessandri
Hello,
I'm sorry I never had the oportunity to answer to you.
I found a solution:
My aquisition software record in volts so my hdr.PhysicalMin and hdr.PhysicalMax were like 0.0005 (whatever). So when I turned them in int32 it was just 0.
The way I managed was to scale the signal by 1000000 so that I was in microvolts. Then the int32 worked like a charm.
Thank you all for your help.
Maxime

请先登录,再进行评论。

采纳的回答

Federico Del Gallo
I'm having the same problem. Did you find something to fix this error?
  1 个评论
Maxime Alessandri
编辑:Maxime Alessandri 2022-4-4
Hello,
I found the solution, please see my comment above,
Cheers, Maxime

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 AI for Signals 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by