Пример #1
0
        /// <summary>
        ///
        /// </summary>
        public void LoadCsv(string path)
        {
            var csv = new CsvImport().Load(path);

            for (int column = 0; column < csv.ColumCount; column++)
            {
                var wave = new Waveform();
                var row  = 0;

                for (row = 0; row < csv.RowCount; row++)
                {
                    var cell = csv.Table[row, column];

                    if (!string.IsNullOrEmpty(cell))
                    {
                        if (double.TryParse(cell, out double dummy) == false)
                        {
                            cell = cell.ToUpper();

                            if (cell.Contains("NAME"))
                            {
                                wave.Name = cell.Split('=')[1].Trim();
                            }

                            if (cell.Contains("DELTAX"))
                            {
                                wave.DeltaX = double.Parse(cell.Split('=')[1].Trim());
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                wave.YArray = new double[csv.RowCount - row];
                var yindex = 0;

                for (; row < csv.RowCount; row++)
                {
                    var cell = csv.Table[row, column];

                    if (string.IsNullOrEmpty(cell))
                    {
                        break;
                    }
                    else if (double.TryParse(cell, out double value) == true)
                    {
                        wave.YArray[yindex++] = value;
                    }
                    else
                    {
                        throw new InvalidCastException();
                    }
                }

                Waveforms.Add(wave);
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="amplitude"></param>
        /// <param name="cycleNum">The periodic count. eg.:1,2,3...n</param>
        /// <param name="resolution">Period resolution  in radian. min: 2*Math.PI , or Math.PI/20 </param>
        /// <param name="phase">Phase in radian. eg.: Math.PI/2 = 90degree </param>
        /// <param name="offset"></param>
        /// <returns></returns>
        public static void Generator(double amplitude,
                                     int cycleNum,
                                     double resolution,
                                     double phase,
                                     double offset,
                                     WaveformCollection waveforms)
        {
            var wave = new Waveform();

            wave.Name      = "Sine Wave" + Guid.NewGuid().ToString();
            wave.Timestamp = new DateTime(1985, 01, 23, 07, 30, 33);
            wave.DeltaX    = 1; /*sec*/

            double[] sequence = new double[0];
            int      index    = 0;

            for (int cycle = 0; cycle < cycleNum; cycle++)
            {
                for (double p = 0; p <= (2 * Math.PI); p += resolution)
                {
                    Array.Resize(ref sequence, index + 1);
                    sequence[index++] = amplitude * Math.Sin(p + phase) + offset;
                }
            }

            wave.YArray = new double[index + 1];
            sequence.CopyTo(wave.YArray, 0);

            for (int i = 0; i < wave.YArray.Length; i++)
            {
                wave.YArray[i] = Math.Round(wave.YArray[i], AppConstants.RoundDigits);
            }

            waveforms.Add(wave);
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        public static void CreateSample2(WaveformCollection waveforms)
        {
            var wave1 = new Waveform();

            wave1.Name      = "Sine Wave";
            wave1.Timestamp = new DateTime(1985, 01, 23, 07, 30, 33);
            wave1.DeltaX    = 1; /*sec*/
            wave1.YArray    = new double[] { 0, 0.707, 1, 0.707, 0, -0.707, -1, -0.707 };
            waveforms.Add(wave1);
        }
Пример #4
0
        public static void Generator(int length, double frequency, double sampleRate, WaveformCollection waveforms)
        {
            /*
             * This data was generated using the function definition:
             *
             *   sin(2 * pi * freq * time)
             *
             *   freq = 5Hz
             *   sampling rate = 100Hz
             *
             *   0. => sin( 2 * pi  0/100 * 5) = 0.
             *   1. => sin( 2 * pi  1/100 * 5) = 0.3090
             *   2. => sin( 2 * pi  1/100 * 5) = 0.5877
             *
             * */

            var wave = new Waveform();

            wave.Name   = "wave1";
            wave.Freq   = frequency;      /*Hz*/
            wave.DeltaX = 1 / sampleRate; /*sec*/

            wave.Timestamp = new DateTime(1985, 01, 23, 07, 30, 33);

            wave.YArray = new double[length];

            for (int pointIndex = 0; pointIndex < length; pointIndex++)
            {
                wave.YArray[pointIndex] = Math.Sin(2 * Math.PI * (pointIndex / sampleRate) * frequency);
            }

            for (int i = 0; i < wave.YArray.Length; i++)
            {
                wave.YArray[i] = Math.Round(wave.YArray[i], AppConstants.RoundDigits);
            }

            waveforms.Add(wave);
        }