34 #ifndef AIMS_SIGNALFILTER_IIRFILTER_H 35 #define AIMS_SIGNALFILTER_IIRFILTER_H 96 virtual const std::vector<bool> &
directions()
const;
98 virtual void setDirections(
bool dirx,
bool diry,
bool dirz,
bool dirt );
140 int dir,
long fullsize,
int binf )
const;
142 virtual long mirrorCoeff(
long i,
long size )
const;
144 virtual long selectCoeff(
long i,
long fullsize,
int binf )
const;
146 virtual long computeK0(
double pole,
double tolerance = -1. )
const;
181 CausalIIRFilter(
const std::vector<double> & num_coeffs = std::vector<double>(),
182 const std::vector<double> & den_coeffs = std::vector<double>(),
184 CausalIIRFilter(
const CausalIIRFilter & other );
185 virtual ~CausalIIRFilter();
186 CausalIIRFilter &
operator=(
const CausalIIRFilter & other );
201 const double & b0()
const;
202 const std::vector<double> & numCoeffs()
const;
203 const std::vector<double> & denCoeffs()
const;
204 void setB0(
const double & gain );
205 void setNumCoeff(
const double & coeff );
206 void setNumCoeffs(
const std::vector<double> & coeff );
207 void setDenCoeff(
const double & coeff );
208 void setDenCoeffs(
const std::vector<double> & coeff );
217 long k,
int dir,
long fullsize,
int binf )
const;
221 std::vector<double> _num_coeff;
222 std::vector<double> _den_coeff;
245 CausalAllPoleIIRFilter(
const std::vector<double> & coeffs = std::vector<double>(),
246 double gain = 1.,
bool is_pole =
false );
249 CausalAllPoleIIRFilter(
double coeff,
double gain = 1.,
bool is_pole =
false );
250 CausalAllPoleIIRFilter(
const CausalAllPoleIIRFilter & other );
251 virtual ~CausalAllPoleIIRFilter();
252 CausalAllPoleIIRFilter &
operator=(
const CausalAllPoleIIRFilter & other );
267 const double & gain()
const;
268 const std::vector<double> & poles()
const;
269 const std::vector<double> & coeffs()
const;
270 void setGain(
const double & gain );
271 void setPole(
const double & pole,
bool is_pole =
true );
272 void setPoles(
const std::vector<double> & pole,
bool is_pole =
true );
273 void setCoeff(
const double & coeff,
bool is_pole =
false );
274 void setCoeffs(
const std::vector<double> & coeff,
bool is_pole =
false );
286 std::vector<double> _coeff;
287 std::vector<long> _k0;
326 const double & gain()
const;
327 const double & pole()
const;
328 void setPole(
const double & pole );
329 void setGain(
const double & gain );
357 template <
typename CausalFilter>
358 class AntiCausalWarperIIRFilter:
public CausalFilter
365 explicit AntiCausalWarperIIRFilter(
const CausalFilter & other = CausalFilter() );
366 AntiCausalWarperIIRFilter(
const AntiCausalWarperIIRFilter & other );
367 virtual ~AntiCausalWarperIIRFilter();
368 AntiCausalWarperIIRFilter &
operator=(
const AntiCausalWarperIIRFilter & other );
379 int dir,
long fullsize,
int binf )
const;
386 typedef AntiCausalWarperIIRFilter<CausalIIRFilter> AntiCausalIIRFilter;
387 typedef AntiCausalWarperIIRFilter<CausalAllPoleIIRFilter> AntiCausalAllPoleIIRFilter;
388 typedef AntiCausalWarperIIRFilter<CausalSinglePoleIIRFilter> AntiCausalSinglePoleIIRFilter;
425 const std::vector<double> & poles = std::vector<double>() );
437 int dir = -1 )
const;
444 const double & gain()
const;
445 const std::vector<double> & poles()
const;
446 void setPoles(
const std::vector<double> & poles );
447 void addPole(
const double & pole );
449 void setGain(
const double & gain );
454 void setModePreciseGain(
bool precise =
true );
463 void computePreciseGain();
475 #endif // AIMS_SIGNALFILTER_IIRFILTER_H
FilterType::CopyType _copy
virtual void setDirectionY(bool diry)
default: true
carto::VolumeRef< double > execute(const carto::VolumeRef< T > &in) const
Execution.
virtual void setDirectionZ(bool dirz)
default: true
virtual long computeK0(double pole, double tolerance=-1.) const
compute K0 so that pole^K0 < precision
Symmetric, all-pole, infinite impulse response Filter.
virtual double & at(carto::VolumeRef< double > &vector, long k, int dir) const
Fast access : k must be in [0, size-1].
virtual void setDirectionX(bool dirx)
default: true
virtual void setBoundary(const FilterType::Boundary &boundary)
FilterType::Boundary _boundary
Base class for separable infinite impulse response filters.
IIRFilterBase & operator=(const IIRFilterBase &other)
IIRFilterBase()
Constructor / Destructor / Copy.
virtual const FilterType::Boundary & boundary() const
Because the filter is infinite, the signal must be extended outisde the image domain.
virtual void filter(carto::VolumeRef< double > vol) const
Helpers.
virtual void setDirectionT(bool dirt)
default: false
virtual void filter1d(const carto::VolumeRef< double > in, carto::VolumeRef< double > out, int dir=-1) const =0
Actual 1d filter that should be implemented by derived classes.
Special case of Infinite Impulse Response filter.
virtual long selectCoeff(long i, long fullsize, int binf) const
If i is outside [binf, fullsize-1], it is mirrored to fall inside.
virtual void setQuiet()
Set verbosity level to 0 -> Remove all possible traces.
virtual void setVerbose(int verbose=1)
Verbosity level.
std::vector< double > _poles
virtual void setDirections(const std::vector< bool > &dir)
virtual const std::vector< bool > & directions() const
Parameters.
virtual long mirrorCoeff(long i, long size) const
If i is outside [0, size-1], it is mirrored to fall inside.