Exemplo n.º 1
0
        public static byte[] GetCustomHarmonicLevels(WaveformParameters parameters, int count, int maxLevel)
        {
            List <byte> levels = new List <byte>();
            var         n      = 0;

            while (n < count)
            {
                levels.Add((byte)WaveformEngine.GetHarmonicLevel(n + 1, parameters, maxLevel));
                n++;
            }
            return(levels.ToArray());
        }
Exemplo n.º 2
0
        public static int GetHarmonicLevel(int harmonicNumber, WaveformParameters para, int maxLevel = 99)
        {
            double aMax  = 1.0;
            double a     = WaveformEngine.Compute(harmonicNumber, para);
            double v     = Math.Log(Math.Abs(a / aMax));
            double level = ((double)maxLevel) + 8.0 * v;

            //System.Console.WriteLine(String.Format("DEBUG: n = {0}, a = {1}, v = {2}", harmonicNumber, a, v));
            if (level < 0)
            {
                return(0);
            }
            return((int)Math.Floor(level));
        }
Exemplo n.º 3
0
        public static double Compute(int number, WaveformParameters para)
        {
            double n = (double)number;
            double a = para.A;
            double b = para.B;
            double c = para.C;
            double x = n * Math.PI * para.XP;
            double y = n * Math.PI * para.YP;
            double d = para.D;
            double e = para.E;

            double module1 = 1.0 / Math.Pow(n, a);
            double module2 = Math.Pow(Math.Sin(x), b) * Math.Pow(Math.Cos(x), c);
            double module3 = Math.Pow(Math.Sin(y), d) * Math.Pow(Math.Cos(y), e);

            return(module1 * module2 * module3);
        }
Exemplo n.º 4
0
        public static byte[] GetHarmonicLevels(string waveformName, int count, int maxLevel)
        {
            WaveformParameters parameters = WaveformParameters[waveformName];

            return(GetCustomHarmonicLevels(parameters, count, maxLevel));
        }
Exemplo n.º 5
0
        public static int RunEditAndReturnExitCode(EditOptions options)
        {
            byte[] levels;

            if (options.Waveform.Equals("custom"))
            {
                if (string.IsNullOrEmpty(options.Params))
                {
                    Console.WriteLine("Parameters required for Custom waveform");
                    return(1);
                }

                var paramStrings = new List <string>(options.Params.Split(','));

                /*
                 * foreach (string s in paramStrings)
                 * {
                 *  Console.WriteLine(s);
                 * }
                 */

                var paramValues = new List <double>();
                foreach (string s in paramStrings)
                {
                    double value = double.Parse(s, CultureInfo.InvariantCulture);
                    paramValues.Add(value);
                }

                /*
                 * foreach (double v in paramValues)
                 * {
                 *  Console.WriteLine(v);
                 * }
                 */

                var parameters = new WaveformParameters
                {
                    A  = paramValues[0],
                    B  = paramValues[1],
                    C  = paramValues[2],
                    XP = paramValues[3],
                    D  = paramValues[4],
                    E  = paramValues[5],
                    YP = paramValues[6]
                };
                levels = WaveformEngine.GetCustomHarmonicLevels(parameters, 64, 127);
            }
            else
            {
                levels = WaveformEngine.GetHarmonicLevels(options.Waveform, 64, 127);
            }

            List <string> group1Lines = SendHarmonics(options.Device, 0, 1, levels, 1);

            foreach (var line in group1Lines)
            {
                Console.WriteLine(line);
            }
            List <string> group2Lines = SendHarmonics(options.Device, 0, 1, levels, 2);

            foreach (var line in group2Lines)
            {
                Console.WriteLine(line);
            }

            return(0);
        }