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()); }
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)); }
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); }
public static byte[] GetHarmonicLevels(string waveformName, int count, int maxLevel) { WaveformParameters parameters = WaveformParameters[waveformName]; return(GetCustomHarmonicLevels(parameters, count, maxLevel)); }
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); }