@@ -301,9 +301,6 @@ def ifft2(signal, dim0 = None, dim1 = None , scale = None):
301
301
302
302
dims = signal .dims ()
303
303
304
- if (len (dims ) < 2 ):
305
- return ifft (signal )
306
-
307
304
if dim0 is None :
308
305
dim0 = dims [0 ]
309
306
@@ -359,9 +356,6 @@ def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
359
356
360
357
dims = signal .dims ()
361
358
362
- if (len (dims ) < 3 ):
363
- return ifft2 (signal )
364
-
365
359
if dim0 is None :
366
360
dim0 = dims [0 ]
367
361
@@ -379,6 +373,377 @@ def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
379
373
ct .c_longlong (dim0 ), ct .c_longlong (dim1 ), ct .c_longlong (dim2 )))
380
374
return output
381
375
376
+ def fft_inplace (signal , scale = None ):
377
+ """
378
+ In-place Fast Fourier Transform: 1D
379
+
380
+ Parameters
381
+ ----------
382
+
383
+ signal: af.Array
384
+ A 1 dimensional signal or a batch of 1 dimensional signals.
385
+
386
+ scale: optional: scalar. default: None.
387
+ - Specifies the scaling factor.
388
+ - If None, scale is set to 1.
389
+
390
+ """
391
+
392
+ if scale is None :
393
+ scale = 1.0
394
+
395
+ safe_call (backend .get ().af_fft_inplace (signal .arr , ct .c_double (scale )))
396
+
397
+ def fft2_inplace (signal , scale = None ):
398
+ """
399
+ In-place Fast Fourier Transform: 2D
400
+
401
+ Parameters
402
+ ----------
403
+
404
+ signal: af.Array
405
+ A 2 dimensional signal or a batch of 2 dimensional signals.
406
+
407
+ scale: optional: scalar. default: None.
408
+ - Specifies the scaling factor.
409
+ - If None, scale is set to 1.
410
+
411
+ """
412
+
413
+ if scale is None :
414
+ scale = 1.0
415
+
416
+ safe_call (backend .get ().af_fft2_inplace (signal .arr , ct .c_double (scale )))
417
+
418
+ def fft3_inplace (signal , scale = None ):
419
+ """
420
+ In-place Fast Fourier Transform: 3D
421
+
422
+ Parameters
423
+ ----------
424
+
425
+ signal: af.Array
426
+ A 3 dimensional signal or a batch of 3 dimensional signals.
427
+
428
+ scale: optional: scalar. default: None.
429
+ - Specifies the scaling factor.
430
+ - If None, scale is set to 1.
431
+ """
432
+
433
+ if scale is None :
434
+ scale = 1.0
435
+
436
+ output = Array ()
437
+ safe_call (backend .get ().af_fft3_inplace (signal .arr , ct .c_double (scale )))
438
+
439
+ def ifft_inplace (signal , scale = None ):
440
+ """
441
+ Inverse In-place Fast Fourier Transform: 1D
442
+
443
+ Parameters
444
+ ----------
445
+
446
+ signal: af.Array
447
+ A 1 dimensional signal or a batch of 1 dimensional signals.
448
+
449
+ scale: optional: scalar. default: None.
450
+ - Specifies the scaling factor.
451
+ - If None, scale is set to 1.0 / (signal.dims()[0])
452
+ """
453
+
454
+ if scale is None :
455
+ dim0 = signal .dims ()[0 ]
456
+ scale = 1.0 / float (dim0 )
457
+
458
+ safe_call (backend .get ().af_ifft_inplace (signal .arr , ct .c_double (scale )))
459
+
460
+ def ifft2_inplace (signal , scale = None ):
461
+ """
462
+ Inverse In-place Fast Fourier Transform: 2D
463
+
464
+ Parameters
465
+ ----------
466
+
467
+ signal: af.Array
468
+ A 2 dimensional signal or a batch of 2 dimensional signals.
469
+
470
+ scale: optional: scalar. default: None.
471
+ - Specifies the scaling factor.
472
+ - If None, scale is set to 1.0 / (signal.dims()[0] * signal.dims()[1])
473
+ """
474
+
475
+ dims = signal .dims ()
476
+
477
+ if scale is None :
478
+ dim0 = dims [0 ]
479
+ dim1 = dims [1 ]
480
+ scale = 1.0 / float (dim0 * dim1 )
481
+
482
+ safe_call (backend .get ().af_ifft2_inplace (signal .arr , ct .c_double (scale )))
483
+
484
+ def ifft3_inplace (signal , scale = None ):
485
+ """
486
+ Inverse In-place Fast Fourier Transform: 3D
487
+
488
+ Parameters
489
+ ----------
490
+
491
+ signal: af.Array
492
+ A 3 dimensional signal or a batch of 3 dimensional signals.
493
+
494
+ scale: optional: scalar. default: None.
495
+ - Specifies the scaling factor.
496
+ - If None, scale is set to 1.0 / (signal.dims()[0] * signal.dims()[1] * signal.dims()[2]).
497
+ """
498
+
499
+ dims = signal .dims ()
500
+
501
+ if scale is None :
502
+ dim0 = dims [0 ]
503
+ dim1 = dims [1 ]
504
+ dim2 = dims [2 ]
505
+ scale = 1.0 / float (dim0 * dim1 * dim2 )
506
+
507
+ safe_call (backend .get ().af_ifft3_inplace (signal .arr , ct .c_double (scale )))
508
+
509
+ def fft_r2c (signal , dim0 = None , scale = None ):
510
+ """
511
+ Real to Complex Fast Fourier Transform: 1D
512
+
513
+ Parameters
514
+ ----------
515
+
516
+ signal: af.Array
517
+ A 1 dimensional signal or a batch of 1 dimensional signals.
518
+
519
+ dim0: optional: int. default: None.
520
+ - Specifies the size of the output.
521
+ - If None, dim0 is calculated to be the first dimension of `signal`.
522
+
523
+ scale: optional: scalar. default: None.
524
+ - Specifies the scaling factor.
525
+ - If None, scale is set to 1.
526
+
527
+ Returns
528
+ -------
529
+
530
+ output: af.Array
531
+ A complex af.Array containing the non-redundant parts of the full FFT.
532
+
533
+ """
534
+
535
+ if dim0 is None :
536
+ dim0 = 0
537
+
538
+ if scale is None :
539
+ scale = 1.0
540
+
541
+ output = Array ()
542
+ safe_call (backend .get ().af_fft_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), ct .c_longlong (dim0 )))
543
+ return output
544
+
545
+ def fft2_r2c (signal , dim0 = None , dim1 = None , scale = None ):
546
+ """
547
+ Real to Complex Fast Fourier Transform: 2D
548
+
549
+ Parameters
550
+ ----------
551
+
552
+ signal: af.Array
553
+ A 2 dimensional signal or a batch of 2 dimensional signals.
554
+
555
+ dim0: optional: int. default: None.
556
+ - Specifies the size of the output.
557
+ - If None, dim0 is calculated to be the first dimension of `signal`.
558
+
559
+ dim1: optional: int. default: None.
560
+ - Specifies the size of the output.
561
+ - If None, dim1 is calculated to be the second dimension of `signal`.
562
+
563
+ scale: optional: scalar. default: None.
564
+ - Specifies the scaling factor.
565
+ - If None, scale is set to 1.
566
+
567
+ Returns
568
+ -------
569
+
570
+ output: af.Array
571
+ A complex af.Array containing the non-redundant parts of the full FFT.
572
+
573
+ """
574
+ if dim0 is None :
575
+ dim0 = 0
576
+
577
+ if dim1 is None :
578
+ dim1 = 0
579
+
580
+ if scale is None :
581
+ scale = 1.0
582
+
583
+ output = Array ()
584
+ safe_call (backend .get ().af_fft2_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ),
585
+ ct .c_longlong (dim0 ), ct .c_longlong (dim1 )))
586
+ return output
587
+
588
+ def fft3_r2c (signal , dim0 = None , dim1 = None , dim2 = None , scale = None ):
589
+ """
590
+ Real to Complex Fast Fourier Transform: 3D
591
+
592
+ Parameters
593
+ ----------
594
+
595
+ signal: af.Array
596
+ A 3 dimensional signal or a batch of 3 dimensional signals.
597
+
598
+ dim0: optional: int. default: None.
599
+ - Specifies the size of the output.
600
+ - If None, dim0 is calculated to be the first dimension of `signal`.
601
+
602
+ dim1: optional: int. default: None.
603
+ - Specifies the size of the output.
604
+ - If None, dim1 is calculated to be the second dimension of `signal`.
605
+
606
+ dim2: optional: int. default: None.
607
+ - Specifies the size of the output.
608
+ - If None, dim2 is calculated to be the third dimension of `signal`.
609
+
610
+ scale: optional: scalar. default: None.
611
+ - Specifies the scaling factor.
612
+ - If None, scale is set to 1.
613
+
614
+ Returns
615
+ -------
616
+
617
+ output: af.Array
618
+ A complex af.Array containing the non-redundant parts of the full FFT.
619
+
620
+ """
621
+ if dim0 is None :
622
+ dim0 = 0
623
+
624
+ if dim1 is None :
625
+ dim1 = 0
626
+
627
+ if dim2 is None :
628
+ dim2 = 0
629
+
630
+ if scale is None :
631
+ scale = 1.0
632
+
633
+ output = Array ()
634
+ safe_call (backend .get ().af_fft3_r2c (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ),
635
+ ct .c_longlong (dim0 ), ct .c_longlong (dim1 ), ct .c_longlong (dim2 )))
636
+ return output
637
+
638
+ def _get_c2r_dim (dim , is_odd ):
639
+ return 2 * (dim - 1 ) + int (is_odd )
640
+
641
+ def fft_c2r (signal , is_odd = False , scale = None ):
642
+ """
643
+ Real to Complex Fast Fourier Transform: 1D
644
+
645
+ Parameters
646
+ ----------
647
+
648
+ signal: af.Array
649
+ A 1 dimensional signal or a batch of 1 dimensional signals.
650
+
651
+ is_odd: optional: Boolean. default: False.
652
+ - Specifies if the first dimension of output should be even or odd.
653
+
654
+ scale: optional: scalar. default: None.
655
+ - Specifies the scaling factor.
656
+ - If None, scale is set to 1 / (signal.dims()[0]).
657
+
658
+ Returns
659
+ -------
660
+
661
+ output: af.Array
662
+ A real af.Array containing the full output of the fft.
663
+
664
+ """
665
+
666
+
667
+ if scale is None :
668
+ dim0 = _get_c2r_dim (signal .dims ()[0 ], is_odd )
669
+ scale = 1.0 / float (dim0 )
670
+
671
+ output = Array ()
672
+ safe_call (backend .get ().af_fft_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
673
+ return output
674
+
675
+ def fft2_c2r (signal , is_odd = False , scale = None ):
676
+ """
677
+ Real to Complex Fast Fourier Transform: 2D
678
+
679
+ Parameters
680
+ ----------
681
+
682
+ signal: af.Array
683
+ A 2 dimensional signal or a batch of 2 dimensional signals.
684
+
685
+ is_odd: optional: Boolean. default: False.
686
+ - Specifies if the first dimension of output should be even or odd.
687
+
688
+ scale: optional: scalar. default: None.
689
+ - Specifies the scaling factor.
690
+ - If None, scale is set to 1 / (signal.dims()[0] * signal.dims()[1]).
691
+
692
+ Returns
693
+ -------
694
+
695
+ output: af.Array
696
+ A real af.Array containing the full output of the fft.
697
+
698
+ """
699
+ dims = signal .dims ()
700
+
701
+ if scale is None :
702
+ dim0 = _get_c2r_dim (dims [0 ], is_odd )
703
+ dim1 = dims [1 ]
704
+ scale = 1.0 / float (dim0 * dim1 )
705
+
706
+ output = Array ()
707
+ safe_call (backend .get ().af_fft2_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
708
+ return output
709
+
710
+ def fft3_c2r (signal , is_odd = False , scale = None ):
711
+ """
712
+ Real to Complex Fast Fourier Transform: 3D
713
+
714
+ Parameters
715
+ ----------
716
+
717
+ signal: af.Array
718
+ A 3 dimensional signal or a batch of 3 dimensional signals.
719
+
720
+ is_odd: optional: Boolean. default: False.
721
+ - Specifies if the first dimension of output should be even or odd.
722
+
723
+ scale: optional: scalar. default: None.
724
+ - Specifies the scaling factor.
725
+ - If None, scale is set to 1 / (signal.dims()[0] * signal.dims()[1] * signal.dims()[2]).
726
+
727
+ Returns
728
+ -------
729
+
730
+ output: af.Array
731
+ A real af.Array containing the full output of the fft.
732
+
733
+ """
734
+ dims = signal .dims ()
735
+
736
+ if scale is None :
737
+ dim0 = _get_c2r_dim (dims [0 ], is_odd )
738
+ dim1 = dims [1 ]
739
+ dim2 = dims [2 ]
740
+ scale = 1.0 / float (dim0 * dim1 * dim2 )
741
+
742
+ output = Array ()
743
+ safe_call (backend .get ().af_fft3_c2r (ct .pointer (output .arr ), signal .arr , ct .c_double (scale ), is_odd ))
744
+ return output
745
+
746
+
382
747
def dft (signal , odims = (None , None , None , None ), scale = None ):
383
748
384
749
"""
0 commit comments