----------------------------------------------------------------------------- -- | -- Module : DSP.Pisarenko -- Copyright : (c) Matthew Donadio 2003 -- License : GPL -- -- Maintainer : m.p.donadio@ieee.org -- Stability : experimental -- Portability : portable -- -- This module contains an implementation of Pisarenko Harmonic -- Decomposition for a single real sinusoid. For this case, eigenvalues -- do not need to be computed. -- ----------------------------------------------------------------------------- -- This implmentation is based off of a Matlab version by Peter -- Kootsookos (p.kootsookos@ieee.org). module DSP.Estimation.Frequency.Pisarenko (pisarenko) where import Data.Array rss x k = sum [ x!(i+k) * x!i | i <- [0..(n-1-k)] ] where n = snd (bounds x) + 1 -- | Pisarenko's method for a single sinusoid pisarenko :: (Ix a, Integral a, Floating b) => Array a b -- ^ x -> b -- ^ w pisarenko x = acos (alpha / 2) where alpha = (rss2 + sqrt (rss2^2 + 8*rss1^2)) / (rss1 + eps) / 2 rss1 = rss x 1 rss2 = rss x 2 eps = 1.0e-15