NAME
DSP::LinPred - Linear Prediction
SYNOPSIS
use
DSP::LinPred;
# OPTIONS
# mu : Step size of filter. (default = 0.001)
#
# h_length : Filter size. (default = 100)
# dc_mode : Direct Current Component estimation.
# it challenges to estimating DC component when set 1.
# (default = 1 enable)
# dc_init : Initial DC bias.
# It *SHOULD* be set value *ACCURATELY* when dc_mode => 0.
# (default = 0)
#
# stddev_mode : Step size correction by stddev of input.
# (default = 1 enable)
# stddev_init : Initial value of stddev.
# (default = 1)
#
my
$lp
= DSP::LinPred->new;
# set filter
$lp
->set_filter({
mu
=> 0.001,
filter_length
=> 500,
dc_mode
=> 1,
stddev_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
){
$pred
->[
$_
],
"\n"
; }
DESCRIPTION
DSP::LinPred is Linear Prediction by Least Mean Squared Algorithm.
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>
dc_mode
=>
$dc_estimation
,
# <Int>, enable when 1
stddev_init
=>
$initial_stddev
,
# <Num>
stddev_mode
=>
$stddev_estimation
# <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
){
$filter
->[
$_
],
"\n"
; }
predict
predict method generates predicted future values of inputs by filter.
my
$predicted
=
$lp
->predict(7);
for
( 0 ..
$#$predicted
){
$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;
'Current Error : '
.
$current_error
,
"\n"
;
h
# It returns filter state(ArrayRef)
my
$filter
=
$lp
->h;
"Filter state\n"
;
for
( 0 ..
$#$filter
){
$_
.
' : '
.
$filter
->[
$_
],
"\n"
; }
x_count
# It returns value of input counter used in filter updating.
my
$x_count
=
$lp
->x_count;
'Input count : '
.
$x_count
,
"\n"
;
dc
# Get value of current Direct Current Components of inputs.
my
$dc
=
$lp
->dc;
'Current DC-Component : '
.
$dc
,
"\n"
;
stddev
# Get value of current standard deviation of inputs.
my
$stddev
=
$lp
->dc;
'Current STDDEV : '
.
$stddev
,
"\n"
;
EXPERIMENTAL OPTIONS
iir_mode and iir_a
In set_filter option. if set iir_mode to 1, and iir_a, it challenges to calculate DC value and stddev by using IIR filter.
IIR spec: next_dc = (current_input - iir_a * current_dc) / (1 - iir_a)
next_stddev = (abs(current_input - current_dc) - iir_a * current_stddev) / (1 - iir_a)
# set_filter with iir_mode on.
$lp
->set_filter({
mu
=> 0.001,
filter_length
=> 500,
dc_mode
=> 1,
stddev_mode
=> 1,
iir_mode
=> 1,
iir_a
=> 0.01
});
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 <>