RosettaCodeData/Task/Fast-Fourier-transform/Perl/fast-fourier-transform.pl

17 lines
414 B
Perl
Raw Permalink Normal View History

2013-10-27 22:24:23 +00:00
use strict;
use warnings;
use Math::Complex;
sub fft {
return @_ if @_ == 1;
2015-02-20 00:35:01 -05:00
my @evn = fft(@_[grep { not $_ % 2 } 0 .. $#_ ]);
my @odd = fft(@_[grep { $_ % 2 } 1 .. $#_ ]);
2013-10-27 22:24:23 +00:00
my $twd = 2*i* pi / @_;
2018-06-22 20:57:24 +00:00
$odd[$_] *= exp( $_ * -$twd ) for 0 .. $#odd;
2013-10-27 22:24:23 +00:00
return
2015-02-20 00:35:01 -05:00
(map { $evn[$_] + $odd[$_] } 0 .. $#evn ),
(map { $evn[$_] - $odd[$_] } 0 .. $#evn );
2013-10-27 22:24:23 +00:00
}
2017-09-23 10:01:46 +02:00
print "$_\n" for fft qw(1 1 1 1 0 0 0 0);