From 7f5b414bbee7ce2fb1d635d255a88ca58689330d Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Fri, 7 Oct 2016 13:39:27 +0200 Subject: [PATCH] FFT: fft provider mvp interface --- src/Numerics/Numerics.csproj | 2 + .../IFourierTransformProvider.cs | 45 +++++++++++++++++++ .../ManagedFourierTransformProvider.cs | 34 ++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 src/Numerics/Providers/FourierTransform/IFourierTransformProvider.cs create mode 100644 src/Numerics/Providers/FourierTransform/ManagedFourierTransformProvider.cs diff --git a/src/Numerics/Numerics.csproj b/src/Numerics/Numerics.csproj index 0063697a..d224559c 100644 --- a/src/Numerics/Numerics.csproj +++ b/src/Numerics/Numerics.csproj @@ -172,6 +172,8 @@ True Resources.resx + + diff --git a/src/Numerics/Providers/FourierTransform/IFourierTransformProvider.cs b/src/Numerics/Providers/FourierTransform/IFourierTransformProvider.cs new file mode 100644 index 00000000..7c6e5c77 --- /dev/null +++ b/src/Numerics/Providers/FourierTransform/IFourierTransformProvider.cs @@ -0,0 +1,45 @@ +// +// Math.NET Numerics, part of the Math.NET Project +// http://numerics.mathdotnet.com +// http://github.com/mathnet/mathnet-numerics +// +// Copyright (c) 2009-2016 Math.NET +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +namespace MathNet.Numerics.Providers.FourierTransform +{ + +#if !NOSYSNUMERICS + using Complex = System.Numerics.Complex; +#endif + + public interface IFourierTransformProvider + { + void ForwardInplace(Complex[] complex); + void BackwardInplace(Complex[] complex); + + Complex[] Forward(Complex[] complexTimeSpace); + Complex[] Backward(Complex[] complexFrequenceSpace); + } +} diff --git a/src/Numerics/Providers/FourierTransform/ManagedFourierTransformProvider.cs b/src/Numerics/Providers/FourierTransform/ManagedFourierTransformProvider.cs new file mode 100644 index 00000000..f4afed72 --- /dev/null +++ b/src/Numerics/Providers/FourierTransform/ManagedFourierTransformProvider.cs @@ -0,0 +1,34 @@ +using System.Numerics; +using MathNet.Numerics.IntegralTransforms; + +namespace MathNet.Numerics.Providers.FourierTransform +{ + public class ManagedFourierTransformProvider : IFourierTransformProvider + { + public void ForwardInplace(Complex[] complex) + { + Fourier.BluesteinForward(complex, FourierOptions.Default); + } + + public void BackwardInplace(Complex[] complex) + { + Fourier.BluesteinInverse(complex, FourierOptions.Default); + } + + public Complex[] Forward(Complex[] complexTimeSpace) + { + Complex[] work = new Complex[complexTimeSpace.Length]; + complexTimeSpace.Copy(work); + ForwardInplace(work); + return work; + } + + public Complex[] Backward(Complex[] complexFrequenceSpace) + { + Complex[] work = new Complex[complexFrequenceSpace.Length]; + complexFrequenceSpace.Copy(work); + BackwardInplace(work); + return work; + } + } +}