hsignal-0.2.4: Signal processing and EEG data analysis

Portability uses FFI provisional haskell.vivian.mcphail gmail com Safe-Infered

Numeric.Signal

Description

Signal processing functions

Synopsis

# Documentation

class Convolvable a whereSource

Methods

convolve :: a -> a -> aSource

convolve two containers, output is the size of the second argument, no zero padding

Instances

 Convolvable (Vector Double) Convolvable (Vector Float) Convolvable (Vector (Complex Double)) Convolvable (Vector (Complex Float))

class (Storable a, Container Vector a, Num (Vector a), Convert a, Floating (Vector a), RealElement a, Num a) => Filterable a Source

Instances

 Filterable Double Filterable Float

# 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 aSource

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

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

# Analytic Signal

an analytic signal is the original signal with Hilbert-transformed signal as imaginary component

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 aSource

the phase of an analytic signal

unwrap :: Filterable a => Vector a -> Vector aSource

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

Arguments

 :: Int window size -> Vector Double data to be detrended -> Vector Double detrended data

remove a linear trend from data

resize :: Filterable a => Int -> Vector a -> Vector aSource

resize the vector to length n by resampling

downsample :: Filterable a => Int -> Vector a -> Vector aSource

resample, take one sample every n samples in the original

deriv :: Filterable a => Vector a -> Vector aSource

the difference between consecutive elements of a vector

cumulative_sum :: Filterable a => Vector a -> Vector aSource

cumulative sum of a series