#!/usr/bin/perl

use strict;

use lib 'd:\Programs\Perl\lib';

#use DFTC;

use Time::HiRes qw/gettimeofday/;

use JFile;
use Sci::Algorism;
use Sci qw($pi);
use Sci::MyFFT;


my $Method = "FFT";
my $AdjustMethod = "truncate"; # "fillzero";

my $InFile = "20150529_20150612_142249_P00001.csv";
$InFile = $ARGV[0] if($ARGV[0]);
my $OutFile = $InFile;
$OutFile =~ s/\.csv$/\.FFT\.csv/i;



print "InFile : [$InFile]\n";
print "OutFile: [$OutFile]\n";


my $in  = JFile->new($InFile, 'r')  or die "$!: Can not read [$InFile].\n";
my $out = JFile->new($OutFile, "w") or die "$!: Can not write to [$OutFile].\n";

my $line = $in->SkipTo("TIME\\[s\\]");
#print "line [$line]\n";

my $nData = 0;
my (@x, @y);
while(1) {
	$line = $in->ReadLine();
	last if(!defined $line);

	my ($t, $V, $e) = split(/,\s*/, $line);
	next if(!defined $V);
	
	$x[$nData] = $t;
	$y[$nData] = $V;
	$nData++;
}

$in->Close();


my $dt = $x[1] - $x[0];

print "nData = $nData\n";
print "dt    = $dt [s]\n";

my ($nFFTused, $tmax, $pFreq, $pR, $pI, $pF2);
if($Method eq 'FFT') {
	my $fft = new MyFFT;
	my ($n, $pX, $pData) = $fft->SetData(\@x, \@y, undef, "forward:real", $AdjustMethod);
	$nFFTused = $n;
	$tmax     = $x[$n-1];
	($pFreq, $pR, $pI) = $fft->FFT();
}

my $nFFT = @$pFreq;
my ($fmin, $fmax) = ($pFreq->[0], $pFreq->[$nFFT-1]);

for(my $i = 0 ; $i < $nFFT ; $i++) {
	$pF2->[$i] = $pR->[$i]*$pR->[$i] + $pI->[$i]*$pI->[$i];
}

$out->print("f(Hz),FTy(r),FTy(i),FT2\n");
for(my $i = 0 ; $i < @$pFreq ; $i++) {
	$out->print("$pFreq->[$i],$pR->[$i],$pI->[$i],$pF2->[$i]\n");
}

$out->Close();

print "\n";
print "FFT data:\n";
print "nData(used) = $nFFTused\n";
print "t(max,used) = $tmax s\n";

print "nFFT        = $nFFT\n";
print "f range     = $fmin - $fmax Hz\n";


exit;

1;
