… | |
… | |
1615 | my $fftw_loaded; |
1615 | my $fftw_loaded; |
1616 | sub _fftw { |
1616 | sub _fftw { |
1617 | defined $fftw_loaded or eval { |
1617 | defined $fftw_loaded or eval { |
1618 | $fftw_loaded = 0; |
1618 | $fftw_loaded = 0; |
1619 | require PDL::FFTW; |
1619 | require PDL::FFTW; |
1620 | PDL::FFTW::load_wisdom("$ENV{HOME}/.pdl_wisdom") if $ENV{HOME}; |
1620 | PDL::FFTW::load_wisdom("$ENV{HOME}/.pdl_wisdom") |
|
|
1621 | if -r "$ENV{HOME}/.pdl_wisdom"; |
1621 | $fftw_loaded = 1; |
1622 | $fftw_loaded = 1; |
1622 | }; |
1623 | }; |
1623 | $fftw_loaded; |
1624 | $fftw_loaded; |
1624 | } |
1625 | } |
1625 | |
1626 | |
1626 | sub rfft { |
1627 | sub rfft { |
1627 | my $data = $_[0]; |
1628 | my $data = $_[0]; |
1628 | if (_fftw) { |
1629 | if (_fftw) { |
1629 | my $x = $data->r2C; |
1630 | my $x = $data->r2C; |
1630 | PDL::FFTW::nfftw($x); |
1631 | $x = PDL::FFTW::nfftw $x; |
1631 | $x; |
1632 | $x; |
1632 | } else { |
1633 | } else { |
1633 | require PDL::FFT; |
1634 | require PDL::FFT; |
1634 | my @fft = ($data->copy, $data->zeroes); |
1635 | my @fft = ($data->copy, $data->zeroes); |
1635 | PDL::FFT::fft(@fft); |
1636 | PDL::FFT::fft(@fft); |
… | |
… | |
1638 | } |
1639 | } |
1639 | |
1640 | |
1640 | sub irfft { |
1641 | sub irfft { |
1641 | if (_fftw) { |
1642 | if (_fftw) { |
1642 | $x = $_[0]->copy; |
1643 | $x = $_[0]->copy; |
1643 | PDL::FFTW::infftw($x); |
1644 | $x = PDL::FFTW::infftw $x; |
1644 | re $x / $x->getdim(1); |
1645 | re $x / $x->getdim(1); |
1645 | } else { |
1646 | } else { |
1646 | require PDL::FFT; |
1647 | require PDL::FFT; |
1647 | my @fft = $_[0]->xchg(0,1)->dog({Break => 1}); |
1648 | my @fft = $_[0]->xchg(0,1)->dog({Break => 1}); |
1648 | PDL::FFT::ifft(@fft); |
1649 | PDL::FFT::ifft(@fft); |