コード例 #1
0
        private static int R2rLength(int n, FftwR2rKind kind)
        {
            switch (kind)
            {
            case FftwR2rKind.FFTW_R2HC:
            case FftwR2rKind.FFTW_HC2R:
            case FftwR2rKind.FFTW_DHT:
                return(n);

            case FftwR2rKind.FFTW_REDFT00:
                return(2 * (n - 1));

            case FftwR2rKind.FFTW_REDFT10:
            case FftwR2rKind.FFTW_REDFT01:
            case FftwR2rKind.FFTW_REDFT11:
                return(2 * n);

            case FftwR2rKind.FFTW_RODFT00:
                return(2 * (n + 1));

            case FftwR2rKind.FFTW_RODFT10:
            case FftwR2rKind.FFTW_RODFT01:
            case FftwR2rKind.FFTW_RODFT11:
                return(2 * n);

            default:
                throw new ArgumentException("Real to real transform kind must be one of allowed values in " +
                                            "FftwR2rKind enum.", nameof(kind));
            }
        }
コード例 #2
0
        public static FftwPlan DftR2r3D(int n0, int n1, int n2, out FftwArray inArray, out FftwArray outArray,
                                        FftwR2rKind kind0, FftwR2rKind kind1, FftwR2rKind kind2, FftwFlags flags = FftwFlags.FFTW_MEASURE)
        {
            int length = R2rLength(n0, n1, n2, kind0, kind1, kind2);

            inArray  = new FftwArray(length);
            outArray = new FftwArray(length);
            return(DftR2r3D(n0, n1, n2, inArray, outArray, kind0, kind1, kind2, flags));
        }
コード例 #3
0
        public static FftwPlan DftR2r3D(int n0, int n1, int n2, FftwArray inArray, FftwArray outArray,
                                        FftwR2rKind kind0, FftwR2rKind kind1, FftwR2rKind kind2, FftwFlags flags = FftwFlags.FFTW_MEASURE)
        {
            int length = R2rLength(n0, n1, n2, kind0, kind1, kind2);

            ValidateArray(inArray, length, nameof(inArray));
            ValidateArray(outArray, length, nameof(outArray));
            return(new FftwPlan(flags,
                                fftw_plan_r2r_3d(n0, n1, n2,
                                                 inArray.Pointer, outArray.Pointer,
                                                 kind0, kind1, kind2, (uint_t)flags),
                                inArray, outArray));
        }
コード例 #4
0
ファイル: FftwBindings.cs プロジェクト: Kyle-Gagner/Fftw.Net
 public static extern fftw_plan fftw_plan_r2r_3d(
     int_t n0, int_t n1, int_t n2,
     double_ptr in_ptr, double_ptr out_ptr,
     FftwR2rKind kind0, FftwR2rKind kind1, FftwR2rKind kind2,
     uint_t flags);
コード例 #5
0
ファイル: FftwBindings.cs プロジェクト: Kyle-Gagner/Fftw.Net
 public static extern fftw_plan fftw_plan_r2r_1d(
     int_t n0,
     double_ptr in_ptr, double_ptr out_ptr,
     FftwR2rKind kind0,
     uint_t flags);
コード例 #6
0
 public static FftwPlan DftR2r2D(int n0, int n1, out FftwArray ioArray,
                                 FftwR2rKind kind0, FftwR2rKind kind1, FftwFlags flags = FftwFlags.FFTW_MEASURE)
 {
     ioArray = new FftwArray(R2rLength(n0, n1, kind0, kind1));
     return(DftR2r2D(n0, n1, ioArray, ioArray, kind0, kind1, flags));
 }
コード例 #7
0
 private static int R2rLength(int n0, int n1, int n2, FftwR2rKind kind0, FftwR2rKind kind1, FftwR2rKind kind2) =>
 R2rLength(n0, kind0) * R2rLength(n1, kind1) * R2rLength(n2, kind2);