Exemplo n.º 1
0
        /// <summary>
        /// Complex to complex transform.
        /// </summary>
        static void Example1(int length)
        {
            Console.Write("Test 1: complex transform ... ");

            // Size is 2 * n because we are dealing with complex numbers.
            int size = 2 * length;

            // Create two managed arrays, possibly misalinged.
            var data = Util.GenerateSignal(size);

            // Copy to native memory.
            var input  = new ComplexArray(data);
            var output = new ComplexArray(size);

            // Create a managed plan as well.
            var plan1 = Plan.Create1(length, input, output, Direction.Forward, Options.Estimate);

            plan1.Execute();

            var plan2 = Plan.Create1(length, output, input, Direction.Backward, Options.Estimate);

            plan2.Execute();

            Array.Clear(data, 0, data.Length);

            // Copy unmanaged output of back-tranform to managed array.
            input.CopyTo(data);

            // Check and see how we did.
            Util.CheckResults(length, length, data);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Real to complex transform.
        /// </summary>
        static void Example2(int length)
        {
            Console.Write("Test 2: real to complex transform ... ");

            int n = length;

            // Create two managed arrays, possibly misalinged.
            var data = Util.GenerateSignal(n);

            // Copy to native memory.
            var input  = new RealArray(data);
            var output = new ComplexArray(n / 2 + 1);

            // Create a managed plan.
            var plan1 = Plan.Create1(n, input, output, Options.Estimate);

            plan1.Execute();

            var plan2 = Plan.Create1(n, output, input, Options.Estimate);

            plan2.Execute();

            Array.Clear(data, 0, n);

            // Copy unmanaged output of back-tranform to managed array.
            input.CopyTo(data);

            // Check and see how we did.
            Util.CheckResults(n, n, data);
        }
Exemplo n.º 3
0
        private void getPxxFx(ComplexArray signal, double samplingRate, out DoubleArray Pxx, out DoubleArray Fx)
        {
            //Implements Matlab's PWelch. Same as [Pxx, Fx] = pwelch(x, w, 0, nfft, Fs), where x = signal, w is calculated below, nfft = signal.count, Fs = samplingRate (hz)
            int          Nx   = signal.Count;
            DoubleArray  w    = DoubleArray.From(hamming(Nx));
            double       std  = w.Std();
            double       mean = w.Mean();
            ComplexArray xw   = signal.ElementMultiply(w);
            int          nfft = Nx;
            ComplexArray X    = FFTComp.FFTComplex(xw);
            DoubleArray  absX = X.Abs();
            DoubleArray  mx   = absX.ElementMultiply(absX);

            DoubleArray wt  = w.Transpose();
            double      res = w.Multiply(wt)[0];

            mx = mx.Divide(res);
            int   numUniquePts = nfft / 2 + 1;
            Slice slice        = new Slice(0, numUniquePts - 1);

            mx = mx.GetSlice(slice);
            double temp1 = mx[0];
            double temp2 = mx[mx.Count - 1];

            mx               = mx.Multiply(2);
            mx[0]            = temp1;
            mx[mx.Count - 1] = temp2;

            Pxx = mx.Divide(samplingRate);
            Fx  = getFx(numUniquePts, samplingRate, nfft);
            w.Dispose();
            absX.Dispose();
            mx.Dispose();
            wt.Dispose();
        }
Exemplo n.º 4
0
    /// <summary>
    /// Shift (offset) the elements in the array
    /// </summary>
    /// <param name="array"></param>
    /// <param name="offset"></param>
    static public void Shift(ComplexF[] array, int offset)
    {
        Debug.Assert(array != null);
        Debug.Assert(offset >= 0);
        Debug.Assert(offset < array.Length);

        if (offset == 0)
        {
            return;
        }

        int length = array.Length;

        ComplexF[] workspace = null;
        ComplexArray.LockWorkspaceF(length, ref workspace);

        for (int i = 0; i < length; i++)
        {
            workspace[(i + offset) % length] = array[i];
        }
        for (int i = 0; i < length; i++)
        {
            array[i] = workspace[i];
        }

        ComplexArray.UnlockWorkspaceF(ref workspace);
    }
Exemplo n.º 5
0
        public double[] Spectrum(double[] input, bool scale)
        {
            int length = input.Length;

            var zinput = Helper.ToComplex(input);

            using (var data1 = new ComplexArray(zinput))
                using (var data2 = new ComplexArray(length))
                    using (var plan1 = Plan.Create1(length, data1, data2, Direction.Forward, Options.Estimate))
                        using (var plan2 = Plan.Create1(length, data2, data1, Direction.Backward, Options.Estimate))
                        {
                            plan1.Execute();

                            var temp     = data2.ToArray();
                            var spectrum = Helper.ComputeSpectrum(temp);

                            plan2.Execute();

                            data1.CopyTo(input, true);

                            if (scale)
                            {
                                for (int i = 0; i < length; i++)
                                {
                                    input[i] /= length;
                                }
                            }

                            return(spectrum);
                        }
        }
Exemplo n.º 6
0
        public double[] Spectrum(double[] input, bool scale)
        {
            int length = input.Length;

            using (var data1 = new RealArray(length))
                using (var data2 = new ComplexArray(length / 2 + 1))
                    using (var plan1 = Plan.Create1(length, data1, data2, Options.Estimate))
                        using (var plan2 = Plan.Create1(length, data2, data1, Options.Estimate))
                        {
                            data1.Set(input);

                            plan1.Execute();

                            var temp     = data2.ToArray();
                            var spectrum = Helper.ComputeSpectrum(temp);

                            plan2.Execute();

                            data1.CopyTo(input);

                            if (scale)
                            {
                                for (int i = 0; i < length; i++)
                                {
                                    input[i] /= length;
                                }
                            }

                            return(spectrum);
                        }
        }
Exemplo n.º 7
0
        private void GetPxxFx(ComplexArray signal, out DoubleArray Pxx, out DoubleArray Fx)
        {
            ComplexArray X = FFTComp.FFTComplex(signal);

            Pxx = X.Abs();
            Fx  = GetFx(signal.Length);
            X.Dispose();
        }
Exemplo n.º 8
0
    public FFT(int n)
    {
        this.N = n;

        var size = n * n;
        _fftIn = new ComplexArray(size);
        _fftOut = new ComplexArray(size);
        _fftPlan = fftwf_plan.dft_2d(n, n, _fftIn, _fftOut, fftw_direction.Backward, fftw_flags.Estimate);
        _spaceDomain = new float[2 * size];
    }
Exemplo n.º 9
0
        public void Initialize(double[] data)
        {
            int length = Size = data.Length;

            this.data = (double[])data.Clone();

            input  = new RealArray(data);
            output = new ComplexArray(length / 2 + 1);

            plan = Plan.Create1(length, input, output, Options.Estimate);
        }
Exemplo n.º 10
0
    public FFT(int n)
    {
        this.N = n;

        var size = n * n;

        _fftIn       = new ComplexArray(size);
        _fftOut      = new ComplexArray(size);
        _fftPlan     = fftwf_plan.dft_2d(n, n, _fftIn, _fftOut, fftw_direction.Backward, fftw_flags.Estimate);
        _spaceDomain = new float[2 * size];
    }
Exemplo n.º 11
0
        public FFTStats(Trajectory trajectory, EDirection direction, bool useSlope)
        {
            var points = (useSlope) ? trajectory.slopes : trajectory.points;
            var xList  = (direction == EDirection.Z) ? points.Select(p => p.z).ToArray() : points.Select(p => p.x).ToArray();
            var zList  = (direction == EDirection.X) ? points.Select(p => p.x).ToArray() : points.Select(p => p.z).ToArray();

            dataXList = DoubleArray.From(xList);
            dataZList = DoubleArray.From(zList);
            signal    = GetSignal(dataXList, dataZList);
            duration  = trajectory.duratation();
            GetPxxFx(signal, out Pxx, out Fx);
        }
Exemplo n.º 12
0
        public void Initialize(double[] data)
        {
            int length = Size = data.Length;

            this.data = new float[length];

            for (int i = 0; i < length; i++)
            {
                this.data[i] = (float)data[i];
            }

            input  = new RealArray(this.data);
            output = new ComplexArray(length / 2 + 1);

            plan = Plan.Create1(length, input, output, Options.Estimate);
        }
Exemplo n.º 13
0
        public void Initialize(double[] data)
        {
            int length = Size = data.Length;

            var temp = new double[2 * length];

            for (int i = 0; i < length; i++)
            {
                temp[2 * i]     = data[i];
                temp[2 * i + 1] = 0.0;
            }

            input  = new ComplexArray(length);
            output = new ComplexArray(length);

            input.Set(temp);

            plan = Plan.Create1(length, input, output, Direction.Forward, Options.Estimate);
        }
Exemplo n.º 14
0
        public FrequencyStats(Trajectory trajectory, bool useSlope = false)
        {
            var xList = (useSlope) ? trajectory.slopes.Select(p => p.x).ToArray() : trajectory.points.Select(p => p.x).ToArray();
            var zList = (useSlope) ? trajectory.slopes.Select(p => p.z).ToArray() : trajectory.points.Select(p => p.z).ToArray();

            dataXList = DoubleArray.From(xList);
            dataZList = DoubleArray.From(zList);
            signal    = getSignal(dataXList, dataZList);
            getPxxFx(signal, trajectory.samplingRate, out Pxx, out Fx);

            //Discard values before 0.05 Hz (high pass filter)
            highPassFilter(Pxx, Fx, 0.05, out Pxx, out Fx);

            totalPower     = Pxx.Sum();
            F50            = getFn(Pxx, Fx, 0.5);
            F95            = getFn(Pxx, Fx, 0.95);
            centroidFreq   = getCentroidFreq(Pxx, Fx);
            FreqDispersion = getFreqDispersion(Pxx, Fx);
        }
Exemplo n.º 15
0
        public void Construction()
        {
            int n = 10;
            WaveData wd = new WaveData(n);

            Assert.AreEqual(n, wd.Length);

            n = 24;
            double[] arr = new double[n];
            wd = new WaveData(arr);
            Assert.AreEqual(n, wd.Length);

            n = 20;
            ComplexArray ca = new ComplexArray(n, false);
            wd = new WaveData(ca);

            Assert.AreEqual(n + 1, wd.SpLength);
            Assert.AreEqual(n * 2, wd.Length);
        }
Exemplo n.º 16
0
 public override object Clone()
 {
     ComplexArray newObj = new ComplexArray(this);
     array.CopyTo(newObj.array, 0);
     return newObj;
 }
Exemplo n.º 17
0
			private ComplexArray(ComplexArray c) : base(c)
			{
				array = new Z.Pointer[c.Count];
			}
Exemplo n.º 18
0
 /// <summary>
 /// Multiply each element in target array with corresponding element in rhs array
 /// </summary>
 /// <param name="target"></param>
 /// <param name="rhs"></param>
 static public void Multiply(ComplexF[] target, ComplexF[] rhs)
 {
     ComplexArray.Multiply(target, rhs, target);
 }
Exemplo n.º 19
0
        static void Main(string[] args)
        {
            //CASE #1
            //--Inputs
            //---FlatArray:
            string[] i11 = new[] { "Islamabad", "lahore", "karachi", "SARGODHA", "mulTan" };
            //---ComplexArray:
            ComplexArray <string>[] i12 = new ComplexArray <string>[] {
                new ComplexArray <string>(
                    new[] { "islamabad" },
                    new ComplexArray <string>(new[] { "Lahore" },
                                              new ComplexArray <string>(new[] { "sARGODHA" }))
                    )
            };
            //--Operation
            string[] case1 = ArrayOperations.MergeElements(i11, i12);
            //--Output
            Console.WriteLine("----------------------\nCASE #1: \n----------------------");
            LogArray(case1);


            //CASE #2
            //--Inputs
            //---FlatArray:
            string[] i21 = new[] { "Islamabad", "lahore", "karachi", "SARGODHA", "mulTan" };
            //---ComplexArray:
            ComplexArray <string>[] i22 = new ComplexArray <string>[] {
                new ComplexArray <string>(
                    new[] { "islamabad" },
                    new ComplexArray <string>(new[] { "Lahore" },
                                              new ComplexArray <string>(new[] { "guJrat" }))
                    )
            };
            //--Operation
            (string[] camelCased, string[] lowerCased, string[] upperCased)case2
                = ArrayOperations.ExtractCased(i21, i22, requireUnique: false);
            //--Output
            Console.WriteLine("\n\n----------------------\nCASE #2: \n----------------------");
            Console.WriteLine("> Camel Cased: \n-----------");
            LogArray(case2.camelCased);
            Console.WriteLine("-----------");
            Console.WriteLine("> Lower Cased: \n-----------");
            LogArray(case2.lowerCased);
            Console.WriteLine("-----------");
            Console.WriteLine("> Upper Cased: \n-----------");
            LogArray(case2.upperCased);
            Console.WriteLine("-----------");


            //CASE #3
            //--Inputs
            //---FlatArray:
            string[] i31 = new[] { "Islamabad", "lahore", "karachi", "SARGODHA", "guJraT", "mulTan" };
            //---ComplexArray:
            ComplexArray <string>[] i32 = new ComplexArray <string>[] {
                new ComplexArray <string>(
                    new[] { "islamabad" },
                    new ComplexArray <string>(new[] { "Lahore" },
                                              new ComplexArray <string>(new[] { "fAiSalaBad" }))
                    )
            };
            //--Operation 1:
            var case3 = ArrayOperations.MergeCasedAndOrder(i31, i32, requireUnique: false);

            //--Output 1
            Console.WriteLine("\n\n---------------------------\nCASE #3 (Cased Merge): \n---------------------------");
            LogArray(case3);
            //--Operation 2:
            case3 = case3.SortDescending();
            //--Output 2
            Console.WriteLine("----------------------\n(Sorted): \n----------------------");
            LogArray(case3);

            Console.ReadKey();
        }
Exemplo n.º 20
0
 /// <summary>
 /// Divide each element in target array with corresponding element in rhs array
 /// </summary>
 /// <param name="target"></param>
 /// <param name="rhs"></param>
 static public void Divide(ComplexF[] target, ComplexF[] rhs)
 {
     ComplexArray.Divide(target, rhs, target);
 }
Exemplo n.º 21
0
 private ComplexArray GetSignal(DoubleArray xList, DoubleArray zList)
 {
     return(ComplexArray.From(xList, zList));
 }