Source code for spectrum.datasets

"""
.. topic:: The :mod:`datasets` module provides data sets to test the
    **Spectrum** functionalities.

    .. autosummary::

        data_cosine
        marple_data
        TimeSeries

    .. codeauthor:: Thomas Cokelaer 2011

    :Reference: [Marple]_
"""
import numpy
from numpy import arange, pi, cos, sin
from numpy.random import randn


#example marple app 3.A
A_cholesky = numpy.matrix([[2+0.j, .5-0.5j,-.2+.1j],
                           [.5+.5j,1,.3-0.2j],
                           [-.2-.1j,.3+.2j,.5]], dtype=complex)
a_cholesky = numpy.array([2+0.j, .5-0.5j, 1., -.2+.1j,.3-0.2j,.5],
                         dtype=complex)
B_cholesky = numpy.array([1+3j,2-1j,.5+.8j], dtype=complex)
#should return
sol_cholesky = numpy.array([ 0.95945946+5.25675676j,
                            4.41891892-7.04054054j,
                            -5.13513514+6.35135135j])


#: 64-complex data length from Marple reference [Marple]_
marple_data = [
  1.349839091+  2.011167288j,
 -2.117270231+  0.817693591j,
 -1.786421657-  1.291698933j,
  1.162236333-  1.482598066j,
  1.641072035+  0.372950256j,
  0.072213709+  1.828492761j,
 -1.564284801+  0.824533045j,
 -1.080565453-  1.869776845j,
  0.927129090-  1.743406534j,
  1.891979456+  0.972347319j,
 -0.105391249+  1.602209687j,
 -1.618367076+  0.637513280j,
 -0.945704579-  1.079569221j,
  1.135566235-  1.692269921j,
  1.855816245+  0.986030221j,
 -1.032083511+  1.414613724j,
 -1.571600199+  0.089229003j,
 -0.243143231-  1.444692016j,
  0.838980973-  0.985756695j,
  1.516003132+  0.928058863j,
  0.257979959+  1.170676708j,
 -2.057927608+  0.343388647j,
 -0.578682184-  1.441192508j,
  1.584011555-  1.011150956j,
  0.614114344+  1.508176208j,
 -0.710567117+  1.130144477j,
 -1.100205779-  0.584209621j,
  0.150702029-  1.217450142j,
  0.748856127-  0.804411888j,
  0.795235813+  1.114466429j,
 -0.071512341+  1.017092347j,
 -1.732939839-  0.283070654j,
  0.404945314-  0.781708360j,
  1.293794155-  0.352723092j,
 -0.119905084+  0.905150294j,
 -0.522588372+  0.437393665j,
 -0.974838495-  0.670074046j,
  0.275279552-  0.509659231j,
  0.854210198-  0.008278057j,
  0.289598197+  0.506233990j,
 -0.283553183+  0.250371397j,
 -0.359602571-  0.135261074j,
  0.102775671-  0.466086507j,
 -0.009722650+  0.030377999j,
  0.185930878+  0.808869600j,
 -0.243692726-  0.200126961j,
 -0.270986766-  0.460243553j,
  0.399368525+  0.249096692j,
 -0.250714004-  0.362990230j,
  0.419116348-  0.389185309j,
 -0.050458215+  0.702862442j,
 -0.395043731+  0.140808776j,
  0.746575892-  0.126762003j,
 -0.559076190+  0.523169816j,
 -0.344389260-  0.913451135j,
  0.733228028-  0.006237417j,
 -0.480273813+  0.509469569j,
  0.033316225+  0.087501869j,
 -0.321229130-  0.254548967j,
 -0.063007891-  0.499800682j,
  1.239739418-  0.013479125j,
  0.083303742+  0.673984587j,
 -0.762731433+  0.408971250j,
 -0.895898521-  0.364855707j]


[docs]def data_cosine(N=1024, A=0.1, sampling=1024., freq=200): r"""Return a noisy cosine at a given frequency. :param N: the final data size :param A: the strength of the noise :param float sampling: sampling frequency of the input :attr:`data`. :param float freq: the frequency :math:`f_0` of the cosine. .. math:: x[t] = cos(2\pi t * f_0) + A w[t] where w[t] is a white noise of variance 1. .. doctest:: >>> from spectrum import data_cosine >>> a = data_cosine(N=1024, sampling=1024, A=0.5, freq=100) """ t = arange(0, float(N)/sampling, 1./sampling) x = cos(2.*pi*t*freq) + A * randn(t.size) return x
[docs]def data_two_freqs(N=200): """A simple test example with two close frequencies """ nn = arange(N) xx = cos(0.257*pi*nn) + sin(0.2*pi*nn) + 0.01*randn(nn.size) return xx
[docs]def spectrum_data(filename): """Simple utilities to retrieve data sets from """ import os import pkg_resources info = pkg_resources.get_distribution('spectrum') location = info.location # first try develop mode share = os.sep.join([location, "spectrum", 'data']) filename2 = os.sep.join([share, filename]) if os.path.exists(filename2): return filename2 else: raise Exception('unknown file %s' % filename2)
#: filename of a WAV data file 150,000 data points dolphin_filename = spectrum_data("DOLPHINS.wav")
[docs]class TimeSeries(object): """A simple Base Class for various data sets. .. doctest:: >>> from spectrum import TimeSeries >>> data = [1, 2, 3, 4, 3, 2, 1, 0 ] >>> ts = TimeSeries(data, sampling=1) >>> ts.plot() >>> ts.dt 1.0 """ def __init__(self, data, sampling=1): """ :param array data: input data (list or numpy.array) :param sampling: the sampling frequency of the data (default 1Hz) """ self.data = data self.N = len(data) self.sampling = sampling self.dt = 1./sampling
[docs] def plot(self, **kargs): """Plot the data set, using the sampling information to set the x-axis correctly.""" from pylab import plot, linspace, xlabel, ylabel, grid time = linspace(1*self.dt, self.N*self.dt, self.N) plot(time, self.data, **kargs) xlabel('Time') ylabel('Amplitude') grid(True)