from scipy import * from USTimeSeries import USTimeSeries import bhacalc # Specify the parameters for the underlying signal & sampling. dt = 1/48000. f = 984.3750 # The value near 1k for 1024 samples f = 1007.8125 # The value near 1k for 2048 samples (1/2 way between for 1024) #f = 1031.25 #f = 1017. # A value between grid pts #f = 1000. A1 = 1000. phi1 = 0. A2 = 0.01*A1 phi2 = pi/2. A3 = 0.0001*A1 phi3 = pi/4. sig = 1. N_s = 1024 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s)*dt data = A1*cos(2*pi*f*times - phi1) + A2*cos(4*pi*f*times - phi2) + \ A3*cos(6*pi*f*times - phi3) + random.normal(0.,sig,(N_s)) usts = USTimeSeries(data, dt) usts.transform(8) print 'f range: ', usts.f_range() m = 3 prjxns = zeros((2*m)) fund, rl, im, p_fund = usts.f_info(f) for i in range(1,m+1): fh = i*f
def test_multiplet(): from USTimeSeries import USTimeSeries from numpy.random import normal # Specify the parameters for the underlying signal & sampling. dt = 1 / 48000.0 f1 = 984.3750 # The value near 1k for 1024 samples f1 = 1007.8125 # The value near 1k for 2048 samples (1/2 way between for 1024) # fs = 1031.25 # fs = 1017. # A value between grid pts # fs = 1000. A1 = 100.0 phi1 = 0.0 f2 = f1 - 30.0 A2 = 0.01 * A1 phi2 = pi / 2.0 sig = 1.0 N_s = 1024 nf = 2 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s) * dt data = A1 * cos(2 * pi * f1 * times - phi1) + A2 * cos(2 * pi * f2 * times - phi2) + 0 * normal(0.0, sig, (N_s)) usts = USTimeSeries(data, dt) usts.transform() print "unpadded f range: ", usts.f_range() usts.transform(16) print "padded f range: ", usts.f_range() # Try it with multiplet. print "... Multiplet version:" mult = Multiplet(usts, sig, exact=1) flist = (f1, f2) print "flist: ", flist mult.analyze(flist) print "used: ", mult.flist print "Jac: ", mult.jac print "Suff. stat: ", mult.suf amps = mult.amplitudes() print "Amps: ", amps print "Sigs: ", mult.sigmas() print "Ratio: ", amps / mult.sigmas() # Now estimate the amplitudes using a nonpadded FFT. usts.transform() fund, rl, im, p_fund = usts.f_info(flist[0]) for i in range(nf): f, rl, im, p = usts.f_info(flist[i]) print i, flist[i], mult.flist[i], amps[i] / amps[0], f, sqrt(p / p_fund) print "Done!\n==============="
def test_harmonics(m): from USTimeSeries import USTimeSeries from numpy.random import normal # Specify the parameters for the underlying signal & sampling. dt = 1 / 48000.0 f = 984.3750 # The value near 1k for 1024 samples f = 1007.8125 # The value near 1k for 2048 samples (1/2 way between for 1024) # f = 1031.25 # f = 1017. # A value between grid pts # f = 1000. A1 = 1000.0 phi1 = 0.0 A2 = 0.01 * A1 phi2 = pi / 2.0 A3 = 0.0001 * A1 phi3 = pi / 4.0 sig = 1.0 N_s = 1024 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s) * dt data = ( A1 * cos(2 * pi * f * times - phi1) + A2 * cos(4 * pi * f * times - phi2) + A3 * cos(6 * pi * f * times - phi3) + normal(0.0, sig, (N_s)) ) usts = USTimeSeries(data, dt) usts.transform(8) print "f range: ", usts.f_range() harm = Harmonics(m, usts, sig) harm.analyze(f) print "prjxns: ", harm.prjxns # print "metric: \n", harm.metric # print "Lower triangle:\n", harm.L print "Jac: ", harm.jac print "Suff. stat: ", harm.suf amps = harm.amplitudes() print "Amps: ", amps print "Sigs: ", harm.sigmas() print "Ratio: ", amps / harm.sigmas() # Now try it with multiplet. print "... Multiplet version:" mult = Multiplet(usts, sig) flist = [] for i in range(m): flist.append((i + 1) * f) print "flist: ", flist mult.analyze(flist) print "Jac: ", mult.jac print "Suff. stat: ", mult.suf amps = mult.amplitudes() print "Amps: ", amps print "Sigs: ", mult.sigmas() print "Ratio: ", amps / mult.sigmas() # Now estimate the amplitudes using a nonpadded FFT. usts.transform() fund, rl, im, p_fund = usts.f_info(f) A_fund = sqrt(amps[0] ** 2 + amps[1] ** 2) for i in range(1, m + 1): f, rl, im, p = usts.f_info(i * fund) print i, i * harm.f, amps[i - 1] / amps[0], f, sqrt(p / p_fund) print "Done!\n==============="
#f = 1000. A1 = 1000. phi1 = 0. A2 = 0.01 * A1 phi2 = pi / 2. A3 = 0.0001 * A1 phi3 = pi / 4. sig = 1. N_s = 1024 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s) * dt data = A1*cos(2*pi*f*times - phi1) + A2*cos(4*pi*f*times - phi2) + \ A3*cos(6*pi*f*times - phi3) + random.normal(0.,sig,(N_s)) usts = USTimeSeries(data, dt) usts.transform(8) print 'f range: ', usts.f_range() m = 3 prjxns = zeros((2 * m)) fund, rl, im, p_fund = usts.f_info(f) for i in range(1, m + 1): fh = i * f fh, rl, im, p = usts.f_info(fh) print fh, i, 2 * i - 2, 2 * i - 1 prjxns[2 * i - 2] = rl prjxns[2 * i - 1] = -im print 'Prjxns: ', prjxns gamma = 2 * pi * fund * dt
def test_multiplet(): from USTimeSeries import USTimeSeries from numpy.random import normal # Specify the parameters for the underlying signal & sampling. dt = 1/48000. f1 = 984.3750 # The value near 1k for 1024 samples f1 = 1007.8125 # The value near 1k for 2048 samples (1/2 way between for 1024) #fs = 1031.25 #fs = 1017. # A value between grid pts #fs = 1000. A1 = 100. phi1 = 0. f2 = f1 - 30. A2 = 0.01*A1 phi2 = pi/2. sig = 1. N_s = 1024 nf = 2 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s)*dt data = A1*cos(2*pi*f1*times - phi1) + A2*cos(2*pi*f2*times - phi2) \ + 0*normal(0.,sig,(N_s)) usts = USTimeSeries(data, dt) usts.transform() print 'unpadded f range: ', usts.f_range() usts.transform(16) print 'padded f range: ', usts.f_range() # Try it with multiplet. print '... Multiplet version:' mult = Multiplet(usts, sig, exact=1) flist = (f1, f2) print 'flist: ', flist mult.analyze(flist) print 'used: ', mult.flist print "Jac: ", mult.jac print 'Suff. stat: ', mult.suf amps = mult.amplitudes() print 'Amps: ', amps print 'Sigs: ', mult.sigmas() print 'Ratio: ', amps/mult.sigmas() # Now estimate the amplitudes using a nonpadded FFT. usts.transform() fund, rl, im, p_fund = usts.f_info(flist[0]) for i in range(nf): f, rl, im, p = usts.f_info(flist[i]) print i, flist[i], mult.flist[i], amps[i]/amps[0], f, sqrt(p/p_fund) print "Done!\n==============="
def test_harmonics(m): from USTimeSeries import USTimeSeries from numpy.random import normal # Specify the parameters for the underlying signal & sampling. dt = 1/48000. f = 984.3750 # The value near 1k for 1024 samples f = 1007.8125 # The value near 1k for 2048 samples (1/2 way between for 1024) #f = 1031.25 #f = 1017. # A value between grid pts #f = 1000. A1 = 1000. phi1 = 0. A2 = 0.01*A1 phi2 = pi/2. A3 = 0.0001*A1 phi3 = pi/4. sig = 1. N_s = 1024 # Simulate some real-valued data from a sinusoid with white noise. times = arange(N_s)*dt data = A1*cos(2*pi*f*times - phi1) + A2*cos(4*pi*f*times - phi2) + \ A3*cos(6*pi*f*times - phi3) + normal(0.,sig,(N_s)) usts = USTimeSeries(data, dt) usts.transform(8) print 'f range: ', usts.f_range() harm = Harmonics(m, usts, sig) harm.analyze(f) print 'prjxns: ', harm.prjxns #print "metric: \n", harm.metric #print "Lower triangle:\n", harm.L print "Jac: ", harm.jac print 'Suff. stat: ', harm.suf amps = harm.amplitudes() print 'Amps: ', amps print 'Sigs: ', harm.sigmas() print 'Ratio: ', amps/harm.sigmas() # Now try it with multiplet. print '... Multiplet version:' mult = Multiplet(usts, sig) flist = [] for i in range(m): flist.append((i+1)*f) print 'flist: ', flist mult.analyze(flist) print "Jac: ", mult.jac print 'Suff. stat: ', mult.suf amps = mult.amplitudes() print 'Amps: ', amps print 'Sigs: ', mult.sigmas() print 'Ratio: ', amps/mult.sigmas() # Now estimate the amplitudes using a nonpadded FFT. usts.transform() fund, rl, im, p_fund = usts.f_info(f) A_fund = sqrt( amps[0]**2 + amps[1]**2 ) for i in range(1,m+1): f, rl, im, p = usts.f_info(i*fund) print i, i*harm.f, amps[i-1]/amps[0], f, sqrt(p/p_fund) print "Done!\n==============="