Error while creating an EDF file

18 ビュー (過去 30 日間)
Maxime Alessandri
Maxime Alessandri 2021 年 4 月 29 日
編集済み: Maxime Alessandri 2022 年 4 月 4 日
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
Maxime Alessandri 2022 年 4 月 4 日
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
Federico Del Gallo 2021 年 6 月 7 日
I'm having the same problem. Did you find something to fix this error?
  1 件のコメント
Maxime Alessandri
Maxime Alessandri 2022 年 4 月 4 日
編集済み: Maxime Alessandri 2022 年 4 月 4 日
Hello,
I found the solution, please see my comment above,
Cheers, Maxime

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeAI for Signals についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by