NAME
DSP::LinPred_XS - Linear Prediction
SYNOPSIS
use DSP::LinPred_XS;
# OPTIONS
# mu : Step size of filter. (default = 0.001)
#
# h_length : Filter size. (default = 100)
#
# dc_init : Initial DC bias.
# It *SHOULD* be set value *ACCURATELY* when dc_mode => 0.
# (default = 0)
#
# stddev_init : Initial value of stddev.
# (default = 1)
#
my $lp = DSP::LinPred_XS->new;
# set filter
$lp->set_filter({
mu => 0.001,
filter_length => 500,
est_mode => 1
});
# defining signal x
my $x = [0,0.1,0.5, ... ]; # input signal
# Updating Filter
$lp->update($x);
my $current_error = $lp->current_error; # get error
# Prediction
my $pred_length = 10;
my $pred = $lp->predict($pred_length);
for( 0 .. $#$pred ){ print $pred->[$_], "\n"; }
DESCRIPTION
DSP::LinPred_XS is Linear Prediction by Least Mean Squared Algorithm. Implemented by XS.
This Linear Predicting method can estimate the standard deviation, direct current component, and predict future value of input.
METHODS
set_filter
set_filter method sets filter specifications to DSP::LinPred object.
$lp->set_filter(
{
mu => $step_size, # <Num>
filter_length => $filter_length, # <Int>
dc_init => $initial_dc_bias, # <Num>
stddev_init => $initial_stddev, # <Num>
est_mode => $estimation_mode # <Int>, enable when 1
});
update
update method updates filter state by source inputs are typed ArrayRef[Num].
my $x = [0.13,0.3,-0.2,0.5,-0.07];
$lp->update($x);
If you would like to extract the filter state, you can access member variable directly like below.
my $filter = $lp->h;
for( 0 .. $#$filter ){ print $filter->[$_], "\n"; }
predict
predict method generates predicted future values of inputs by filter.
my $predicted = $lp->predict(7);
for( 0 .. $#$predicted ){ print $predicted->[$_], "\n";}
filter_dc
This method can calculate mean value of current filter.
my $filter_dc = $lp->filter_dc;
filter_stddev
This method can calculate standard deviation of current filter.
my $filter_stddev = $lp->filter_stddev;
READING STATES
current_error
# It returns value of current prediction error
# error = Actual - Predicted
my $current_error = $lp->current_error;
print 'Current Error : '.$current_error, "\n";
h
# It returns filter state(ArrayRef)
my $filter = $lp->h;
print "Filter state\n";
for( 0 .. $#$filter ){ print $_.' : '.$filter->[$_],"\n"; }
x_count
# It returns value of input counter used in filter updating.
my $x_count = $lp->x_count;
print 'Input count : '.$x_count, "\n";
dc
# Get value of current Direct Current Components of inputs.
my $dc = $lp->dc;
print 'Current DC-Component : '.$dc, "\n";
stddev
# Get value of current standard deviation of inputs.
my $stddev = $lp->dc;
print 'Current STDDEV : '.$stddev, "\n";
LICENSE
Copyright (C) Toshiaki Yokoda.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Toshiaki Yokoda <>