/// <summary> /// Executes the block /// </summary> public override void Execute() { var inputNode = InputNodes[0].ConnectingNode as BlockOutputNode; if (inputNode == null || inputNode.Object == null) { return; } OutputNodes[0].Object.Clear(); OutputNodes[1].Object.Clear(); foreach (var inputSignal in inputNode.Object) { var fft = WaveMath.UpSample(inputSignal.Samples); ManagedFFT.Instance.FFT(ref fft, true, Mode); var abs = WaveMath.AbsFromComplex(fft, 0, fft.Length / 2); abs = WaveMath.Normalize(abs, abs.Length); var absSignal = new Signal(abs) { Start = 0, Finish = abs.Length - 1 }; var fftSignal = new Signal(fft) { Start = 0, Finish = fft.Length - 1, IsComplex = true, SamplingInterval = fft.Length }; OutputNodes[0].Object.Add(absSignal); OutputNodes[1].Object.Add(fftSignal); } if (Cascade && OutputNodes[0].ConnectingNode != null) { OutputNodes[0].ConnectingNode.Root.Execute(); } if (Cascade && OutputNodes[1].ConnectingNode != null) { OutputNodes[1].ConnectingNode.Root.Execute(); } }
public void TestAbsFromComplex() { var input = new[] { 2.1, 3.2, 1, -1.3, -100, 145, -2 }; var expected = new[] { 3.8275318418009276, 1.6401219466856727, 176.13914953808538, 2 }; Assert.IsTrue(TestUtils.SequenceEquals(expected, WaveMath.AbsFromComplex(input))); var signal = new Signal(input) { IsComplex = true }; WaveMath.Abs(ref signal, input); Assert.IsTrue(TestUtils.SequenceEquals(expected, signal.Samples)); input = new double[] { }; expected = new double[] { }; Assert.IsTrue(TestUtils.SequenceEquals(expected, WaveMath.AbsFromComplex(input))); }