Exemple #1
0
        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}");
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
        }