public static byte[] GetHarmonicLevels(string waveformName, int count) { LeiterParameters para = WaveformParameters[waveformName]; List <byte> levels = new List <byte>(); var n = 0; while (n < count) { levels.Add((byte)LeiterEngine.GetHarmonicLevel(n + 1, para)); n++; } return(levels.ToArray()); }
public static int GetHarmonicLevel(int harmonicNumber, LeiterParameters para, int maxLevel = 99) { double aMax = 1.0; double a = LeiterEngine.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, LeiterParameters 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); }