 OVERVIEW
 NAME
 SYNOPSIS
 DESCRIPTION
 FUNCTIONS
 AUTHOR
 ACKNOWLEDGEMENTS
 LICENSE AND COPYRIGHT
 NAME
 SYNOPSIS
 DESCRIPTION
 FUNCTIONS
 AUTHOR
 LICENSE AND COPYRIGHT
OVERVIEW
Two modules for PDL providing some fir filtering. These are not yet on CPAN.
NAME
PDL::DSP::Fir  Finite impulse response filter kernels.
SYNOPSIS
use PDL;
use PDL::DSP::Fir qw( firwin );
# return a 10 sample lowpass filter kernel
# with a cutoff at 90% of the Nyquist frequency.
$kernel = firwin( N => 10, fc => 0.9 );
# Equivalent way of calling.
$kernel = firwin( { N => 10, fc => 0.9 } );
DESCRIPTION
This module provides routines to create onedimensional finite impulse response (FIR) filter kernels. This distribution inlcudes a simple interface for filtering in PDL::DSP::Fir::Simple.
The routine "firwin" returns a filter kernel constructed from windowed sinc functions. Available filters are lowpass, highpass, bandpass, and bandreject. The window functions are in the module PDL::DSP::Windows.
Below, the word order refers to the number of elements in the filter kernel.
No functions are exported be default.
FUNCTIONS
firwin
Usage
$kern = firwin({OPTIONS});
$kern = firwin(OPTIONS);
Returns a filter kernel (a finite impulse response function) to be convolved with data.
The kernel is built from windowed sinc functions. With the option type => 'window'
no sinc is used, rather the kernel is just the window. The options may be passed as a list of keyvalue pairs, or as an anonymous hash.
OPTIONS
 N

order of filter. This is the number of elements in the returned kernel pdl.
 type

Filter type. One of
lowpass
,highpass
,bandpass
,bandstop
,window
. Aliases forbandstop
arebandreject
andnotch
. Default islowpass
. Forbandpass
andbandstop
the number of samples "N" must be odd. If type iswindow
, then the kernel returned is just the window function.  fc

Cutoff frequency for low and highpass filters as a fraction of the Nyquist frequency. Must be a number between
0
and1
. No default value.  fclo, fchi

Lower and upper cutoff frequencies for bandpass and bandstop filters. No default values.
All other options to "firwin" are passed to the function "window" in PDL::DSP::Windows.
The following three functions are called by the firwin
, but may also be useful by themselves, for instance, to construct more complicated filters.
ir_sinc
$sinc = ir_sinc($f_cut, $N);
Return an $N
point sinc function representing a lowpass filter with cutoff frequency $f_cut
.
$f_cut
must be between 0 and 1, with 1 being Nyquist freq. The output pdl is the function sin( $f_cut * $x ) / $x
where $x is pdl of $N
uniformly spaced values ranging from  PI * ($N1)/2
through PI * ($N1)/2
. For what it's worth, a bit of efficiency is gained by computing the index at which $x
is zero, rather than searching for it.
spectral_inverse
$fir_inv = spectral_inverse($fir);
Return output kernel whose spectrum is the inverse of the spectrum of the input kernel.
The number of samples in the input kernel must be odd. Input $fir
and output $fir_inv
are realspace fir filter kernels. The spectrum of the output kernel is the additive inverse with respect to 1 of the spectrum of the input kernel.
spectral_reverse
$fir_rev = spectral_reverse($fir);
Return output kernel whose spectrum is the reverse of the spectrum of the input kernel.
That is, the spectrum is mirrored about the center frequency.
AUTHOR
John Lapeyre, <jlapeyre at cpan.org>
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
Copyright 2012 John Lapeyre.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
NAME
PDL::DSP::Simple  Simple interface to windowed sinc filters.
SYNOPSIS
use PDL::LiteF;
use PDL::DSP::Fir::Simple;
DESCRIPTION
At present, this module provides one filtering routine. The main purpose is to provide an easytouse lowpass filter that only requires the user to provide the data and the cutoff frequency. However, the routines take options to give the user more control over the filtering. The module implements the filters via convolution with a kernel representing a finite impulse response function, either directly or with fft. The filter kernel is constructed from windowed sinc functions. Available filters are lowpass, highpass, bandpass, and bandreject. All window functions in PDL::DSP::Windows are available.
See "moving_average" in PDL::DSP::Iir for a moving average filter.
Some of this functionality is already available in the PDL core. The modules PDL::Audio and PDL::Stats:TS (time series) also have filtering functions.
Below, the word order refers to the number of elements in the filter kernel. The default value is equal to the number of elements in the data to be filtered.
No functions are exported by default.
FUNCTIONS
filter
$dataf = filter($data, {OPTIONS});
or
$dataf = filter($data, $kern);
Examples
Apply lowpass filter to signal $x with a cutoff frequency of 90% of the Nyquist frequency (i.e. 45% of the sample frequency).
$xf = filter($x, { fc => 0.9 });
Apply a highpass filter rather than the default lowpass filter
$xf = filter($x, {fc => 0.9 , type => 'highpass' });
Apply a lowpass filter of order 20 with a blackman window rather than the default hamming window.
$xf = filter($x, {fc => 0.9 , window => 'blackman' , N => 20 });
Apply a 10 point moving average. Note that this moving averaging is implemented via convolution. This is a relatively inefficient implementation.
$xf = filter($x, {window => 'rectangular', type => 'window', N => 10 });
Return the kernel used in the convolution.
($xf, $kern) = filter($x, { fc => 0.9 });
Apply a lowpass filter of order 20 with a tukey window with parameter alpha = 0.5.
$xf = filter($x, {fc => 0.9 ,
window => { name => 'tukey', params => 0.5 } , N => 20 });
OPTIONS
 N

Order of filter. I.e. the number of points in the filter kernel. Default: number of points in $data.
 kern

A kernel to use for convolution rather than calculating a kernel from other parameters.
 boundary

Boundary condition passed to
convolveND
. Must be one of 'extend', 'truncate', 'periodic'. See PDL::ImageND.
All other options to filter
are passed to the function "firwin" in PDL::DSP::Fir which creates the filter kernel. "firwin" in PDL::DSP::Fir in turn passes options to PDL::DSP::Windows:window. The option window
is either a string giving the name of the window function, or an anonymous hash of options to pass to PDL::DSP::Windows:window. For example { name => 'window_name', ... }
.
If the second argument is not a hash of options then it is interpreted as a kernel $kern
to be convolved with the $data
.
If called in a list context, the filtered data and kernel ($dataf,$kern) are returned.
testdata
$x = testdata($Npts, $freqs, $amps)
For example:
$x = testdata(1000, [5,100], [1, .1] );
Generate a signal by summing sine functions of differing frequencies. The signal has $Npts elements. $freqs is an array of frequencies, and $amps an array of amplitudes for each frequency. The frequencies should be between 0 and 1, with 1 representing the nyquist frequency.
AUTHOR
John Lapeyre, <jlapeyre at cpan.org>
LICENSE AND COPYRIGHT
Copyright 2012 John Lapeyre.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.