--- /dev/null
+# -*- perl -*-
+
+package NmraAssist;
+
+BEGIN {
+ use Exporter ();
+ our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+ $VERSION = 1.00;
+ @ISA = qw(Exporter);
+ @EXPORT = qw();
+ %EXPORT_TAGS = ( );
+
+ @EXPORT_OK = qw();
+}
+
+package NmraAssist::HighPassFilter;
+
+# We subtract an alpha-smoothed value
+our $default_timeconstant= 300e-6; # seconds, e-life
+
+sub new ($) {
+ my ($class) = @_;
+ my $sf= {
+ SmoothedValue => 0,
+ TimeConstant => $default_timeconstant,
+ LastSampleTime => 0
+ };
+ bless $sf, $class;
+ return $sf;
+}
+
+sub transform ($$$) {
+ my ($sf, $t, $value) = @_;
+
+ my $interval= $t - $sf->{LastSampleTime};
+ $sf->{SmoothedValue} *= exp( -$interval / $sf->{TimeConstant} );
+ $sf->{SmoothedValue} += $value * $interval / $sf->{TimeConstant};
+ $sf->{LastSampleTime}= $t;
+ $value -= $sf->{SmoothedValue};
+ return $value;
+}
+
+1;
xpixels=1024
ypixels=768
-ypersamp=8
-fsd=0.3
+ypersamp=20
+fsd=1.0
perl -e <t.nmra.dat '
+ use NmraAssist;
+
+ $filter= NmraAssist::HighPassFilter->new();
+
for (;;) {
@l= ();
$ticks= "";
next if m/^\;/;
m/^\s*([-e0-9.]+)\s+([-0-9.]+)\s*$/ or die;
($t,$samp)=($1,$2);
+ $samp= $filter->transform($t, $samp);
$h= sprintf "%d",
($samp/(2.0*'$fsd') + 0.5) * ('$ypersamp'-1);
for ($y=0, $l=0; $y<'$ypersamp'; $y+=2, $l++) {
use strict qw(vars refs);
use IO::Handle;
+use NmraAssist;
sub usec_from_to ($$) {
my ($from,$to) = @_; # uses $from->{S}, $from->{U}, $to->{S}, $to->{U}
#---------- datapoint reader ----------
+our $filter= NmraAssist::HighPassFilter->new();
+
sub read_stdin() {
reset_bit_decoder();
last if STDIN->eof;
next if m/^\;/;
m/^\s*([-.0-9e]+)\s+([-.0-9e]+)\s*$/ or die "$_ ?";
- found_datapoint($1 * 1e6, $2);
+ my ($t, $value) = ($1,$2);
+ $value= $filter->transform($t, $value);
+ $t *= 1e6;
+ found_datapoint($t, $value);
}
die $! if STDIN->error;
}