Exemplo n.º 1
0
def simSuite(taus=[2.0],harms=[3],periods=[1.5e-3],snrs=[10],
             maxfun = 5):
  
    np.random.seed(42)  # seed the random number generator - Dan - 2012-11-18
    
    for tau in taus:
        for harm in harms:
            for period in periods:
                for snr in snrs:
                    prof = makeProfile(harm)
                    ht = makeht(tau, nlag=2048)
                    CS = initSim(ht,prof,ref_freq=1/period,bw=1.0,noise=snr,source = ('tau_%.1f_nharm_%d_period_%.2f_snr_%.3f' % (tau,harm,period*1000.,snr)))
                    CS.initProfile()
                    CS.pp_meas = CS.pp_ref.copy()
                    CS.pp_ref = prof
                    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
                    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
                    CS.ph_ref[0] = 0
                    CS.s0 = CS.ph_ref.copy()

                    CS.plotdir = '.'
                    CS.pharm = harm
                    CS.tau = tau
                    CS.noise = snr
                    CS.loop(make_plots=False,maxfun=maxfun)
                    CS.noise = snr
                    CS.saveState(os.path.join(CS.plotdir,'cs_' + CS.source + '.pkl'))
                    pycyc.plotSimulation(CS)
Exemplo n.º 2
0
def simSuite(taus=[2.0], harms=[3], periods=[1.5e-3], snrs=[10], maxfun=5):

    np.random.seed(42)  # seed the random number generator - Dan - 2012-11-18

    for tau in taus:
        for harm in harms:
            for period in periods:
                for snr in snrs:
                    prof = makeProfile(harm)
                    ht = makeht(tau, nlag=2048)
                    CS = initSim(
                        ht,
                        prof,
                        ref_freq=1 / period,
                        bw=1.0,
                        noise=snr,
                        source=('tau_%.1f_nharm_%d_period_%.2f_snr_%.3f' %
                                (tau, harm, period * 1000., snr)))
                    CS.initProfile()
                    CS.pp_meas = CS.pp_ref.copy()
                    CS.pp_ref = prof
                    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
                    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
                    CS.ph_ref[0] = 0
                    CS.s0 = CS.ph_ref.copy()

                    CS.plotdir = '.'
                    CS.pharm = harm
                    CS.tau = tau
                    CS.noise = snr
                    CS.loop(make_plots=False, maxfun=maxfun)
                    CS.noise = snr
                    CS.saveState(
                        os.path.join(CS.plotdir, 'cs_' + CS.source + '.pkl'))
                    pycyc.plotSimulation(CS)
Exemplo n.º 3
0
Arquivo: simcyc.py Projeto: gitj/pycyc
def simSuite(taus=[2.0,10.0,100.0],harms=[3,10],periods=[1.5e-3,4e-3,10e-3],snrs=[10,100],
             maxfun = 100):
    for tau in taus:
        for harm in harms:
            for period in periods:
                for snr in snrs:
                    prof = makeProfile(harm)
                    ht = makeht(tau, nlag=2048)
                    CS = initSim(ht,prof,ref_freq=1/period,bw=1.0,noise=snr,source = ('tau_%.1f_nharm_%d_period_%.2f_snr_%.3f' % (tau,harm,period*1000.,snr)))
                    CS.initProfile()
                    CS.pp_meas = CS.pp_ref.copy()
                    CS.pp_ref = prof
                    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
                    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
                    CS.ph_ref[0] = 0
                    CS.s0 = CS.ph_ref.copy()

                    CS.plotdir = '/home/gjones/workspace/pycyc/simsuite'
                    CS.pharm = harm
                    CS.tau = tau
                    CS.noise = snr
                    CS.loop(make_plots=False,maxfun=maxfun)
                    CS.noise = snr
                    CS.saveState(os.path.join(CS.plotdir,'cs_' + CS.source + '.pkl'))
                    pycyc.plotSimulation(CS)
Exemplo n.º 4
0
def initSim(ht,prof,ref_freq,bw,rf = None,filename= None,source='fake',noise = None):
    if rf is None:
        rf = np.abs(bw)/2.0
    if ht.ndim == 1:
        ht = ht[None,:]
    CS = pycyc.CyclicSolver()
    CS.ht0 = ht
    if filename:
        CS.filename = filename
    else:
        CS.filename = 'sim%s_%.1fMHz_%.1fms' % (source,bw,1000.0/ref_freq)   
    CS.nchan = ht.shape[1]
    CS.nlag = CS.nchan
    CS.nphase = prof.shape[0]
    CS.nbin = CS.nphase
    CS.nharm = CS.nphase/2 + 1
    CS.source = source
    CS.nspec = ht.shape[0]
    CS.dynamic_spectrum = np.zeros((CS.nspec,CS.nchan))
    CS.optimized_filters = np.zeros((CS.nspec,CS.nchan),dtype='complex')
    CS.intrinsic_profiles = np.zeros((CS.nspec,CS.nbin))
    CS.nopt = 0
    CS.nloop = 0        

    CS.nopt = 0
    
    CS.ref_freq = ref_freq
    CS.bw = bw
    CS.ref_phase = 0
    CS.rf = rf
    
    CS.hf_prev = np.ones((CS.nchan,),dtype='complex')
    CS.pp_int = np.zeros((CS.nphase)) #intrinsic profile
    
    CS.pp_ref = prof.copy()
    
    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
    CS.ph_ref[0] = 0
    CS.s0 = CS.ph_ref.copy()
    
    CS.data = np.empty((CS.nspec,1,CS.nchan,CS.nphase), dtype='complex')
    for k in range(CS.nspec):
        CS.data[k,0,:,:] = pycyc.cs2ps(CS.modelCS(ht[k,:]))
    if noise is not None:
        signal = np.abs(CS.data).sum()
        CS.noise = noise
        rn = (np.random.randn(CS.data.shape[0],CS.data.shape[1],CS.data.shape[2],CS.data.shape[3]).astype('complex')
              +1j*np.random.randn(CS.data.shape[0],CS.data.shape[1],CS.data.shape[2],CS.data.shape[3]))
        rnpow = np.abs(rn).sum()
        fact = signal/rnpow
        CS.data = CS.data + rn*(fact/noise)
    return CS
Exemplo n.º 5
0
def initSim(ht,prof=std_prof,ref_freq=ref_freq,bw=bw,noise = None):
    CS = pycyc.CyclicSolver()
    CS.ht0 = ht
    CS.filename = 'sim1643'
    CS.nchan = ht.shape[0]
    CS.nlag = CS.nchan
    CS.nphase = prof.shape[0]
    CS.nharm = CS.nphase/2 + 1
    CS.source = 'J1643-1224sim'
    CS.nspec = 1
    CS.dynamic_spectrum = np.zeros((CS.nspec,CS.nchan))
    CS.optimized_filters = np.zeros((CS.nspec,CS.nchan),dtype='complex')
    CS.nopt = 0
    
    CS.ref_freq = ref_freq
    CS.bw = bw
    CS.ref_phase = 0
    CS.rf = rf
    
    CS.hf_prev = np.ones((CS.nchan,),dtype='complex')
    CS.pp_int = np.zeros((CS.nphase)) #intrinsic profile
    
    CS.pp_ref = prof.copy()
    
    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
    CS.ph_ref[0] = 0
    CS.s0 = CS.ph_ref.copy()
    
    csm = CS.modelCS(ht)
    CS.data = pycyc.cs2ps(csm)[None,None,:,:]
    CS.cs = csm.copy()
    if noise is not None:
        fact = CS.data.std()*noise
        CS.data += (np.random.randn(CS.data.shape[2],CS.data.shape[3]).astype('complex')+1j*np.random.randn(CS.data.shape[2],CS.data.shape[3]))*fact
    return CS
Exemplo n.º 6
0
Arquivo: tests.py Projeto: gitj/pycyc
hf = np.loadtxt(os.path.join(dirname,'hf.tst'), delimiter=',').view('complex').squeeze()
hf_prev = np.loadtxt(os.path.join(dirname,'hf_prev.tst'), delimiter=',').view('complex').squeeze()
pp = np.loadtxt(os.path.join(dirname,'pp.tst'), delimiter=',')
pp2 = np.loadtxt(os.path.join(dirname,'pp2pp.tst'), delimiter=',')
pp_ref = np.loadtxt(os.path.join(dirname,'pp_ref.tst'), delimiter=',')
ph = np.loadtxt(os.path.join(dirname,'ph.tst'), delimiter=',').view('complex').squeeze()
ph_ref = np.loadtxt(os.path.join(dirname,'ph_ref.tst'), delimiter=',').view('complex').squeeze()
ph_recon = np.loadtxt(os.path.join(dirname,'ph_reconstructed.tst'), delimiter=',').view('complex').squeeze()
grad1 = np.loadtxt(os.path.join(dirname,'grad1.tst'), delimiter=',')
grad2 = np.loadtxt(os.path.join(dirname,'grad2.tst'), delimiter=',')

ntests = 0
nfail = 0

ntests += 1
phpperr = np.abs(ph - pycyc.phase2harm(pp)).mean()
print "(Cyclic-Modelling vs pycyc) phase2harm error:", phpperr
if phpperr > 1e-7:
    print "phase2harm does not agree"
    nfail += 1

ntests += 1
pp2pperr = np.abs(pp-pp2).mean()
print "(Cyclic-Modelling) test of harm2phase(phase2harm) == identity: ", pp2pperr
if pp2pperr > 1e-7:
    print "error in cyclic_utils.c: harm2phase is not exact inverse of phase2harm"
    nfail +=1

ntests += 1
phreconerr = np.abs(ph[1:]-ph_recon[1:]).mean() #skip zeroth harmonic since it's zeroed in ph
print "(Cyclic-Modelling) test if ph reconstructed from model cs and given hf matches original ph: ", phreconerr
Exemplo n.º 7
0
Arquivo: ursi.py Projeto: gitj/pycyc
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 05 15:08:30 2013

@author: Glenn
"""

import simcyc
import pycyc
import numpy as np

from matplotlib import pyplot as plt

pp = np.fft.fftshift(simcyc.makeProfile(20))
ph = pycyc.phase2harm(pp)
"""
f = plt.figure()
ax = f.add_subplot(111)


ax.semilogx(20*np.log10(np.abs(ph)/np.abs(ph).max()))
ax.set_ylim(-55,5)
ax.set_xlim(1,300)
ax.grid(True)
ax.set_ylabel('20*log10(|p|)')
ax.set_xlabel('Harmonic')

f = plt.figure()
ax = f.add_subplot(111)

ax.plot(pp)
Exemplo n.º 8
0
def initSim(ht,
            prof,
            ref_freq,
            bw,
            rf=None,
            filename=None,
            source='fake',
            noise=None):
    if rf is None:
        rf = np.abs(bw) / 2.0
    if ht.ndim == 1:
        ht = ht[None, :]
    CS = pycyc.CyclicSolver()
    CS.ht0 = ht
    if filename:
        CS.filename = filename
    else:
        CS.filename = 'sim%s_%.1fMHz_%.1fms' % (source, bw, 1000.0 / ref_freq)
    CS.nchan = ht.shape[1]
    CS.nlag = CS.nchan
    CS.nphase = prof.shape[0]
    CS.nbin = CS.nphase
    CS.nharm = CS.nphase / 2 + 1
    CS.source = source
    CS.nspec = ht.shape[0]
    CS.dynamic_spectrum = np.zeros((CS.nspec, CS.nchan))
    CS.optimized_filters = np.zeros((CS.nspec, CS.nchan), dtype='complex')
    CS.intrinsic_profiles = np.zeros((CS.nspec, CS.nbin))
    CS.nopt = 0
    CS.nloop = 0

    CS.nopt = 0

    CS.ref_freq = ref_freq
    CS.bw = bw
    CS.ref_phase = 0
    CS.rf = rf

    CS.hf_prev = np.ones((CS.nchan, ), dtype='complex')
    CS.pp_int = np.zeros((CS.nphase))  #intrinsic profile

    CS.pp_ref = prof.copy()

    CS.ph_ref = pycyc.phase2harm(CS.pp_ref)
    CS.ph_ref = pycyc.normalize_profile(CS.ph_ref)
    CS.ph_ref[0] = 0
    CS.s0 = CS.ph_ref.copy()

    CS.data = np.empty((CS.nspec, 1, CS.nchan, CS.nphase), dtype='complex')
    for k in range(CS.nspec):
        CS.data[k, 0, :, :] = pycyc.cs2ps(CS.modelCS(ht[k, :]))
    if noise is not None:
        signal = np.abs(CS.data).sum()
        CS.noise = noise
        rn = (np.random.randn(CS.data.shape[0], CS.data.shape[1],
                              CS.data.shape[2],
                              CS.data.shape[3]).astype('complex') +
              1j * np.random.randn(CS.data.shape[0], CS.data.shape[1],
                                   CS.data.shape[2], CS.data.shape[3]))
        rnpow = np.abs(rn).sum()
        fact = signal / rnpow
        CS.data = CS.data + rn * (fact / noise)
    return CS