public void Tools_Normalize() { var rnd = new Random(Environment.TickCount); List <double> items = new List <double>() { -Math.PI * 2, -Math.PI, 0, Math.PI, Math.PI * 2, }; items .AddRange( Enumerable .Range(-500000, 1000000) .Select(idx => Math.PI * 2 * rnd.NextDouble() * idx)); foreach (var data in items) { var normalized = FPGATrigonometryTools.Normalize((float)data); Assert.IsTrue(normalized >= 0 && normalized < FPGATrigonometryConstants.TwoPI, $"failed for {data}, got {normalized}"); } }
public void Tools_Q1Project() { var rnd = new Random(Environment.TickCount); foreach (var idx in Enumerable.Range(0, 10000)) { float rad = (float)(Math.PI * 2 * rnd.NextDouble()); var q1 = FPGATrigonometryTools.Q1Project(rad); Assert.IsTrue(q1 >= 0 && q1 <= FPGATrigonometryConstants.HalfPI); } }
public void TaylorCos() { using (var port = new QuokkaPort()) { var rnd = new Random(Environment.TickCount); foreach (var idx in Enumerable.Range(0, 10000)) { var value = (float)(rnd.NextDouble() * FPGATrigonometryConstants.HalfPI); port.WriteFloat(value); var expected = FPGATrigonometryTools.TaylorCos(value); var actualBytes = port.Read(4, true, port.DefaultTimeout); var actual = TestConverters.FloatFromByteArray(actualBytes); Assert.AreEqual(expected, actual, $"Failed for {value}"); } } }
public static async Task Aggregator( FPGA.InputSignal <bool> RXD, FPGA.OutputSignal <bool> TXD ) { Sequential handler = () => { FPU.FPUScopeNoSync(); while (true) { float data = 0; UART.ReadFloat(115200, RXD, out data); data = FPGATrigonometryTools.TaylorSin(data); UART.WriteFloat(115200, data, TXD); } }; FPGA.Config.OnStartup(handler); }