Skip to content

Commit

Permalink
fix #7
Browse files Browse the repository at this point in the history
  • Loading branch information
LiorBanai committed Aug 13, 2022
1 parent 6e5cbf1 commit 8c0e78f
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
2 changes: 1 addition & 1 deletion EDF/EDF.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<RootNamespace>EDFCSharp</RootNamespace>
<Company>Lior Banai</Company>
<Product>EDF</Product>
<Version>0.5.6</Version>
<Version>0.5.7</Version>
<Description>Read and write EDF signal files.</Description>
<Copyright>Copyright © 2022</Copyright>
<SignAssembly>false</SignAssembly>
Expand Down
16 changes: 8 additions & 8 deletions EDF/Reader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,7 @@ internal EDFSignal[] AllocateSignals(EDFHeader header)
public void ReadSignal(EDFHeader header, EDFSignal signal)
{
var current = ((DateTimeOffset)header.StartTime).ToUnixTimeMilliseconds();
var interval = 1000 / (int)signal.FrequencyInHZ;

var interval = signal.FrequencyInHZ == 0 ? 0 : (1000 / signal.FrequencyInHZ);
// Make sure we start just after our header
BaseStream.Seek(header.SizeInBytes.Value, SeekOrigin.Begin);

Expand All @@ -103,20 +102,21 @@ public void ReadSignal(EDFHeader header, EDFSignal signal)
// For each record
for (int j = 0; j < header.NumberOfDataRecords.Value; j++)
{
var currentPerRecord = (current + j * header.RecordDurationInSeconds.Value * 1000);
// For each signal
for (int i = 0; i < header.NumberOfSignalsInRecord.Value; i++)
{
// Read that signal samples
if (i == signal.Index)
{
ReadNextSignalSamples(signal.Samples, signal.Timestamps, signal.NumberOfSamplesInDataRecord.Value, current);
ReadNextSignalSamples(signal.Samples, signal.Timestamps, signal.NumberOfSamplesInDataRecord.Value, current, (long)interval);
}
else
{
// Just skip it
SkipSignalSamples(header.NumberOfSamplesPerRecord.Value[i]);

}
current += interval;
}
}
}
Expand All @@ -136,11 +136,10 @@ public EDFSignal[] ReadSignals(EDFHeader header)
// For each signal
for (int i = 0; i < signals.Length; i++)
{
var interval = 1000 / signals[i].FrequencyInHZ;

var interval = signals[i].FrequencyInHZ == 0 ? 0 : (1000 / signals[i].FrequencyInHZ);
// Read that signal samples
ReadNextSignalSamples(signals[i].Samples, signals[i].Timestamps, signals[i].NumberOfSamplesInDataRecord.Value, (long)currentPerRecord);
currentPerRecord += interval;
ReadNextSignalSamples(signals[i].Samples, signals[i].Timestamps, signals[i].NumberOfSamplesInDataRecord.Value, (long)currentPerRecord, (long)interval);
}
}

Expand All @@ -151,7 +150,7 @@ public EDFSignal[] ReadSignals(EDFHeader header)
/// Read n next samples
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void ReadNextSignalSamples(ICollection<short> samples, List<long> timestamps, int sampleCount, long currentTimestamp)
private void ReadNextSignalSamples(ICollection<short> samples, List<long> timestamps, int sampleCount, long currentTimestamp, long interval)
{
// Single file read operation per record
byte[] intBytes = ReadBytes(sizeof(short) * sampleCount);
Expand All @@ -161,6 +160,7 @@ private void ReadNextSignalSamples(ICollection<short> samples, List<long> timest
short intVal = BitConverter.ToInt16(intBytes, i * sizeof(short));
samples.Add(intVal);
timestamps.Add(currentTimestamp);
currentTimestamp += interval;
}
}

Expand Down
2 changes: 2 additions & 0 deletions Nuget/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ This project is provided under the terms of the [MIT license](http://choosealice
|nr of samples[ns] * integer | last signal |

## History
### V0.5.7:
- https://github.com/LiorBanai/EDF/issues/7 : Fix Timestamps calculations

### V0.5.6:
- Fix Divided By Zero
Expand Down

0 comments on commit 8c0e78f

Please sign in to comment.