Пример #1
0
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==============="
Пример #2
0
#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
Пример #3
0
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==============="