Copyright | (c) Alexander Vivian Hugh McPhail 2010 |
---|---|
License | GPL-style |
Maintainer | haskell.vivian.mcphail <at> gmail <dot> com |
Stability | provisional |
Portability | uses FFI |
Safe Haskell | None |
Language | Haskell98 |
Numeric.Signal
Description
Signal processing functions
- class Convolvable a where
- convolve :: a -> a -> a
- class (Storable a, Container Vector a, Num (Vector a), Convert a, Floating (Vector a), RealElement a, Num a) => Filterable a
- hamming :: Filterable a => Int -> Vector a
- pwelch :: Int -> Int -> Vector Double -> (Vector Double, Vector Double)
- fir :: (Filterable a, Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf a) => Int -> [(a, a)] -> Int -> Int -> Vector a -> Vector a
- standard_fir :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> [(a, a)] -> Vector a
- broadband_fir :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> (Int, Int) -> Vector a
- freqzF :: (Filterable a, Double ~ DoubleOf a, Filterable (DoubleOf a)) => Vector a -> Vector a -> Int -> Vector a -> Vector a
- freqzN :: (Filterable a, Enum a, Double ~ DoubleOf a) => Vector a -> Vector a -> Int -> Int -> (Vector a, Vector a)
- filter :: Filterable a => Vector a -> Vector a -> Int -> Vector a -> Vector a
- broadband_filter :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> (Int, Int) -> Vector a -> Vector a
- analytic_signal :: Vector Double -> Vector (Complex Double)
- analytic_power :: Filterable a => Vector (Complex Double) -> Vector a
- analytic_phase :: (Filterable a, Container Vector a, Double ~ DoubleOf a) => Vector (Complex a) -> Vector a
- unwrap :: Filterable a => Vector a -> Vector a
- cross_covariance :: Filterable a => Int -> Vector a -> Vector a -> (a, a, Vector a)
- cross_correlation :: Filterable a => Int -> Vector a -> Vector a -> Vector a
- cross_spectrum :: (Filterable a, Double ~ DoubleOf a) => Int -> Vector a -> Vector a -> Vector (Complex Double)
- auto_covariance :: Filterable a => Int -> Vector a -> (a, Vector a)
- auto_correlation :: Filterable a => Int -> Vector a -> Vector a
- detrend :: Int -> Vector Double -> Vector Double
- resize :: Filterable a => Int -> Vector a -> Vector a
- downsample :: Filterable a => Int -> Vector a -> Vector a
- deriv :: Filterable a => Vector a -> Vector a
- cumulative_sum :: Filterable a => Vector a -> Vector a
Documentation
class Convolvable a where Source
Methods
convolve :: a -> a -> a Source
convolve two containers, output is the size of the second argument, no zero padding
Instances
class (Storable a, Container Vector a, Num (Vector a), Convert a, Floating (Vector a), RealElement a, Num a) => Filterable a Source
Minimal complete definition
fromDouble, filter_, hamming_, complex_power_, downsample_, deriv_, unwrap_, polyEval_, cross_covariance_, cumulative_sum_
Instances
Filtering
Arguments
:: Filterable a | |
=> Int | length |
-> Vector a | the Hamming coeffficents |
coefficients of a Hamming window
Arguments
:: Int | sampling rate |
-> Int | window size |
-> Vector Double | input signal |
-> (Vector Double, Vector Double) | (frequency index,power density) |
Welch (1967) power spectrum density using periodogram/FFT method
Arguments
:: (Filterable a, Container Vector (Complex a), Convert (Complex a), Double ~ DoubleOf a) | |
=> Int | order (one less than the length of the filter) |
-> [(a, a)] | band edge frequency, nondecreasing, [0, f1, ..., f(n-1), 1] ^ band edge magnitude |
-> Int | grid spacing |
-> Int | transition width |
-> Vector a | smoothing window (size is order + 1) |
-> Vector a | the filter coefficients |
produce an FIR filter
standard_fir :: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) => Int -> [(a, a)] -> Vector a Source
standard FIR filter | FIR filter with grid a power of 2 greater than the order, ramp = grid/16, hamming window
Arguments
:: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) | |
=> Int | sampling rate |
-> (Int, Int) | (lower,upper) frequency cutoff |
-> Vector a | filter coefficients |
a broadband FIR
Arguments
:: (Filterable a, Double ~ DoubleOf a, Filterable (DoubleOf a)) | |
=> Vector a | zero coefficients |
-> Vector a | pole coefficients |
-> Int | sampling rate |
-> Vector a | frequencies |
-> Vector a | frequency response |
determine the frequency response of a filter, given a vector of frequencies
Arguments
:: (Filterable a, Enum a, Double ~ DoubleOf a) | |
=> Vector a | zero coefficients |
-> Vector a | pole coefficients |
-> Int | sampling rate |
-> Int | number of points |
-> (Vector a, Vector a) | (frequencies,response) |
determine the frequency response of a filter, given a number of points and sampling rate
Arguments
:: Filterable a | |
=> Vector a | zero coefficients |
-> Vector a | pole coefficients |
-> Int | sampling rate |
-> Vector a | input signal |
-> Vector a | output signal |
filters the signal
Arguments
:: (Filterable a, Double ~ DoubleOf a, Container Vector (Complex a), Convert (Complex a)) | |
=> Int | sampling rate |
-> (Int, Int) | (lower,upper) frequency cutoff |
-> Vector a | input signal |
-> Vector a | output signal |
a broadband filter
Analytic Signal
analytic_signal :: Vector Double -> Vector (Complex Double) Source
an analytic signal is the original signal with Hilbert-transformed signal as imaginary component
analytic_power :: Filterable a => Vector (Complex Double) -> Vector a Source
the power (amplitude^2 = v * (conj c)) of an analytic signal
analytic_phase :: (Filterable a, Container Vector a, Double ~ DoubleOf a) => Vector (Complex a) -> Vector a Source
the phase of an analytic signal
unwrap :: Filterable a => Vector a -> Vector a Source
unwrap the phase of signal (input expected to be within (-pi,pi))
Statistics
Arguments
:: Filterable a | |
=> Int | maximum delay |
-> Vector a | time series |
-> Vector a | time series |
-> (a, a, Vector a) | (sd_x,sd_y,cov_xy) |
cross covariance of two signals the cross correlation is computed by dividing the result by the product of the two standard deviations
Arguments
:: Filterable a | |
=> Int | maximum delay |
-> Vector a | time series |
-> Vector a | time series |
-> Vector a | result |
cross correlation of two signals
Arguments
:: (Filterable a, Double ~ DoubleOf a) | |
=> Int | maximum delay |
-> Vector a | time series |
-> Vector a | time series |
-> Vector (Complex Double) | result |
compute the cross spectrum
Arguments
:: Filterable a | |
=> Int | maximum delay |
-> Vector a | time series |
-> (a, Vector a) | (var,cov_xx) |
auto covariance of two signals the auto correlation is computed by dividing the result by the variance
Arguments
:: Filterable a | |
=> Int | maximum delay |
-> Vector a | time series |
-> Vector a | result |
auto correlation of two signals
Preprocessing
remove a linear trend from data
resize :: Filterable a => Int -> Vector a -> Vector a Source
resize the vector to length n by resampling
downsample :: Filterable a => Int -> Vector a -> Vector a Source
resample, take one sample every n samples in the original
deriv :: Filterable a => Vector a -> Vector a Source
the difference between consecutive elements of a vector
cumulative_sum :: Filterable a => Vector a -> Vector a Source
cumulative sum of a series