use strict; use warnings; use Tk; use Tk::Canvas; use Math::FFT; my $filePath = $ARGV[0] // "testData.txt"; my @data = do { open my $fh, $filePath or die "Can't open $filePath: $!"; local $/; split /\s+/, <$fh> }; my $spectrum; my $fft = Math::FFT->new(\@data); $spectrum = $fft->spctrm; shift @$spectrum; # Remove DC signal component my $mw = MainWindow->new (-title => "Magnetometer Plotter"); my $canvas = $mw->Canvas (-height => 700, -width => 1024)->pack (); my $i = 0; $canvas->createLine( (map +(2 + 2 * $i++, $_), NormData($spectrum, 680)), -fill => 'blue' ); $mw->MainLoop; sub NormData { my ($data, $span) = @_; my ($min, $max); for my $datum (@$data) { $min //= $datum; $max //= $datum; $min = $datum if $min > $datum; $max = $datum if $max < $datum; } my $scale = $span / ($max - $min); map $span - ($_ - $min) * $scale + 10, @$data; }