public static float[] GetWaveFromFile(AnalogChannel channel, uint waveLength, double samplePeriod, double timeOffset) { if (readChannel == null || readTime == null) { String filename = Path.GetTempFileName(); FileStream f = new FileStream(filename, FileMode.Create, FileAccess.Write); byte[] i2cSequence = Resources.Load("i2c_sequence.mat"); f.Write(i2cSequence, 0, i2cSequence.Length); f.Close(); MatfileReader matfileReader = new MatlabFileIO.MatfileReader(filename); readChannel = new Dictionary <AnalogChannel, float[]>() { { AnalogChannel.ChA, Utils.CastArray <double, float>(matfileReader.Variables["chA"].data as double[]) }, { AnalogChannel.ChB, Utils.CastArray <double, float>(matfileReader.Variables["chB"].data as double[]) }, }; readTime = matfileReader.Variables["time"].data as double[]; samplePeriodOriginal = readTime[1] - readTime[0]; sequenceLength = readChannel[AnalogChannel.ChA].Length; matfileReader.Close(); } if (samplePeriod / samplePeriodOriginal % 1.0 != 0.0) { throw new Exception("Data from file doesn't suit the dummy scope sampling frequency"); } uint decimation = (uint)Math.Ceiling(samplePeriod / samplePeriodOriginal); float[] wave = Utils.DecimateArray(readChannel[channel], decimation); int sampleOffset = (int)Math.Ceiling(timeOffset / samplePeriodOriginal % sequenceLength); int requiredRepetitions = (int)Math.Ceiling(waveLength / (double)wave.Length); if (requiredRepetitions > 1) { List <float> concat = new List <float>(); for (int i = 0; i < requiredRepetitions; i++) { concat.AddRange(wave); } wave = concat.Take((int)waveLength).ToArray(); } return(wave); }
public static float[] GetWaveFromFile(AnalogChannel channel, uint waveLength, double samplePeriod, double timeOffset) { if(readChannel == null || readTime == null) { String filename = Path.GetTempFileName(); FileStream f = new FileStream(filename, FileMode.Create, FileAccess.Write); byte[] i2cSequence = Resources.Load ("i2c_sequence.mat"); f.Write(i2cSequence, 0, i2cSequence.Length); f.Close(); MatfileReader matfileReader = new MatlabFileIO.MatfileReader(filename); readChannel = new Dictionary<AnalogChannel, float[]>() { { AnalogChannel.ChA, Utils.CastArray<double, float>(matfileReader.Variables["chA"].data as double[]) }, { AnalogChannel.ChB, Utils.CastArray<double, float>(matfileReader.Variables["chB"].data as double[]) }, }; readTime = matfileReader.Variables["time"].data as double[]; samplePeriodOriginal = readTime[1] - readTime[0]; sequenceLength = readChannel[AnalogChannel.ChA].Length; matfileReader.Close(); } if (samplePeriod / samplePeriodOriginal % 1.0 != 0.0) throw new Exception("Data from file doesn't suit the dummy scope sampling frequency"); uint decimation = (uint)Math.Ceiling(samplePeriod / samplePeriodOriginal); float[] wave = Utils.DecimateArray(readChannel[channel], decimation); int sampleOffset = (int)Math.Ceiling(timeOffset / samplePeriodOriginal % sequenceLength); int requiredRepetitions = (int)Math.Ceiling(waveLength / (double)wave.Length); if (requiredRepetitions > 1) { List<float> concat = new List<float>(); for(int i = 0; i < requiredRepetitions; i++) concat.AddRange(wave); wave = concat.Take((int)waveLength).ToArray(); } return wave; }
private void LoadDataFromFile(string filename) { MatfileReader matfileReader = new MatlabFileIO.MatfileReader(filename); if (!matfileReader.Variables.ContainsKey("SamplePeriodInSeconds")) { throw new Exception(".mat file not compatible"); } //load data dataChA = LoadAnalogChannelFromMatlabFile <float>("ChannelA", matfileReader); dataChB = LoadAnalogChannelFromMatlabFile <float>("ChannelB", matfileReader); dataLA = LoadAnalogChannelFromMatlabFile <byte>("ChannelLA", matfileReader); SamplePeriod = (double)matfileReader.Variables["SamplePeriodInSeconds"].data; //calc fixed values if (dataChA != null) { NrSamples = dataChA[0].Length; NrWaveforms = dataChA.Count; } else { NrSamples = dataLA[0].Length; NrWaveforms = dataLA.Count; } if (NrWaveforms > 0) { this.AcquisitionLenght = SamplePeriod * (double)NrSamples; } else { this.AcquisitionLenght = 0; } }