public unsafe void process(Complex *input, float *output, int length) { for (int i = 0; i < length; i++) { Complex complex = input[i] * _lastIq.Conjugate(); float mod = complex.Modulus(); if (mod > 0f) { complex /= mod; } float argument = complex.Argument(); output[i] = argument * _gain; _lastIq = input[i]; } }
public void TestPolar() { var z1 = new Complex(1, 1); var minus4 = new Complex(-4, 0); var z = Complex.FromPolarCoordinates(16, Math.PI / 4); Assert.IsTrue(AreApproximatelyEqual(Math.Pow(z1.Modulus(), 2), 2)); Assert.IsTrue(AreApproximatelyEqual(Math.PI / 4, z1.Argument())); var z2 = Complex.FromPolarCoordinates(Math.Sqrt(2), Math.PI / 4); Assert.IsTrue(AreApproximatelyEqual(z1, z2)); Assert.IsTrue(AreApproximatelyEqual(minus4.Argument(), Math.PI)); Assert.IsTrue(AreApproximatelyEqual(z.Modulus(), 16.0)); Assert.IsTrue(AreApproximatelyEqual(z.Argument(), Math.PI / 4)); var z4 = new Complex(-1, 1); Assert.IsTrue(AreApproximatelyEqual(z4.Argument(), 3 * Math.PI / 4.0)); var z5 = new Complex(-1, -1); Assert.IsTrue(AreApproximatelyEqual(z5.Argument(), -3 * Math.PI / 4.0)); }
public void TestPolar() { var z1 = new Complex(1, 1); var minus4 = new Complex(-4, 0); var z = Complex.FromPolarCoordinates(16, Math.PI / 4); Assert.IsTrue(AreApproximatelyEqual(Math.Pow(z1.Modulus(), 2), 2)); Assert.IsTrue(AreApproximatelyEqual(Math.PI / 4, z1.Argument())); var z2 = Complex.FromPolarCoordinates(Math.Sqrt(2), Math.PI / 4); Assert.IsTrue(AreApproximatelyEqual(z1, z2)); Assert.IsTrue(AreApproximatelyEqual(minus4.Argument(), Math.PI)); Assert.IsTrue(AreApproximatelyEqual(z.Modulus(), 16.0)); Assert.IsTrue(AreApproximatelyEqual(z.Argument(), Math.PI / 4)); var z4 = new Complex(-1,1); Assert.IsTrue(AreApproximatelyEqual(z4.Argument(), 3 * Math.PI / 4.0)); var z5 = new Complex(-1, -1); Assert.IsTrue(AreApproximatelyEqual(z5.Argument(), -3 * Math.PI / 4.0)); }
public float cargf(Complex v) { return(v.Argument()); }