package pl.edu.fuw.fid.signalanalysis;
import java.util.Arrays;
import org.signalml.plugin.export.signal.ChannelSamples;
/**
* Implementation of single-channel signal, based on given ChannelSamples
* instance. Its getSamples method allows to reach
* outside of signal's valid time range, returning 0 in that case.
*
* @author ptr@mimuw.edu.pl
*/
public class SimpleSingleSignal implements SingleSignal {
private final double[] data;
private final double sampling;
public SimpleSingleSignal(ChannelSamples samples) {
this.data = samples.getSamples();
this.sampling = samples.getSamplingFrequency();
}
@Override
public void getSamples(int start, int length, double[] buffer) {
length = Math.min(length, buffer.length);
int maxLength = Math.max(0, data.length - start);
if (maxLength < length) {
Arrays.fill(buffer, maxLength, length, 0.0);
length = maxLength;
}
int bufferOffset = 0;
if (start < 0) {
bufferOffset = Math.min(length, -start);
length -= bufferOffset;
start = 0;
Arrays.fill(buffer, 0, bufferOffset, 0.0);
}
if (length > 0) {
System.arraycopy(data, start, buffer, bufferOffset, length);
}
}
@Override
public double getSamplingFrequency() {
return sampling;
}
};