hsignal-0.1.3.5: Signal processing and EEG data analysis

Portability uses FFI provisional haskell.vivian.mcphail gmail com

Numeric.Signal

Contents

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))

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

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

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)

# 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