… | |
… | |
1500 | $beta = 2.5 unless defined $beta; |
1500 | $beta = 2.5 unless defined $beta; |
1501 | |
1501 | |
1502 | $size = $size->getdim(0) if ref $size; |
1502 | $size = $size->getdim(0) if ref $size; |
1503 | $size > 2 or barf "fft window size too small"; |
1503 | $size > 2 or barf "fft window size too small"; |
1504 | |
1504 | |
1505 | my $midn = $size >> 1; |
1505 | my $midn = $size >> 1; |
1506 | my $midm1 = ($size-1) >> 1; |
1506 | my $midm1 = ($size-1) >> 1; |
1507 | my $midp1 = ($size+1) >> 1; |
1507 | my $midp1 = ($size+1) >> 1; |
1508 | my $dur = zeroes $size; |
1508 | my $dur = zeroes $size; |
1509 | my $sf = ($size-1)/$size; |
1509 | my $sf = ($size-1)/$size; |
1510 | %fft_window = ( |
1510 | %fft_window = ( |
1511 | RECTANGULAR => sub { |
1511 | RECTANGULAR => sub { |
1512 | $dur->ones |
1512 | $dur->ones |
1513 | }, |
1513 | }, |
… | |
… | |
1682 | $data = rfft ( |
1682 | $data = rfft ( |
1683 | $data->slice ("0:" . ($len - 1)) |
1683 | $data->slice ("0:" . ($len - 1)) |
1684 | ->sever |
1684 | ->sever |
1685 | ) |
1685 | ) |
1686 | ->slice (",0:" . int ($len / 2)) |
1686 | ->slice (",0:" . int ($len / 2)) |
1687 | ->PDL::Complex::Cr2p->slice ("(0)"); |
1687 | ->PDL::Complex::Cr2p |
|
|
1688 | ->slice ("(0)"); |
1688 | if ($norm == 1 || lc $norm eq "norm") { |
1689 | if ($norm == 1 || lc $norm eq "norm") { |
1689 | $data / max $data; |
1690 | $data / max $data; |
1690 | } elsif (($norm =~ /^[.0]+$/) || (lc $norm eq "db")) { |
1691 | } elsif (($norm =~ /^[.0]+$/) || (lc $norm eq "db")) { |
1691 | log (1e-37 + $data / max $data) * (20 / log 10); |
1692 | log (1e-37 + $data / max $data) * (20 / log 10); |
1692 | } else { |
1693 | } else { |