|
@@ -84,7 +84,9 @@ def process(data, interval, args, insert_function, final): |
|
|
# Pull out sinefit data for the entire time range of this block |
|
|
# Pull out sinefit data for the entire time range of this block |
|
|
for sinefit_line in client.stream_extract(sinefit_path, |
|
|
for sinefit_line in client.stream_extract(sinefit_path, |
|
|
data[0, 0], data[rows-1, 0]): |
|
|
data[0, 0], data[rows-1, 0]): |
|
|
# Extract sinefit data to get zero crossing timestamps |
|
|
|
|
|
|
|
|
# Extract sinefit data to get zero crossing timestamps. |
|
|
|
|
|
# t_min = beginning of period |
|
|
|
|
|
# t_max = end of period |
|
|
(t_min, f0, A, C) = [ float(x) for x in sinefit_line.split() ] |
|
|
(t_min, f0, A, C) = [ float(x) for x in sinefit_line.split() ] |
|
|
t_max = t_min + 1e6 / f0 |
|
|
t_max = t_min + 1e6 / f0 |
|
|
|
|
|
|
|
@@ -102,20 +104,20 @@ def process(data, interval, args, insert_function, final): |
|
|
# Perform FFT over those indices |
|
|
# Perform FFT over those indices |
|
|
N = idx_max - idx_min |
|
|
N = idx_max - idx_min |
|
|
d = data[idx_min:idx_max, column] |
|
|
d = data[idx_min:idx_max, column] |
|
|
F = scipy.fftpack.fft(d) / N |
|
|
|
|
|
|
|
|
F = scipy.fftpack.fft(d) * 2.0 / N |
|
|
|
|
|
|
|
|
# If we wanted more harmonics than we have, pad with zeros |
|
|
|
|
|
|
|
|
# If we wanted more harmonics than the FFT gave us, pad with zeros |
|
|
if N < (nharm * 2): |
|
|
if N < (nharm * 2): |
|
|
F = r_[F, zeros(nharm * 2 - N)] |
|
|
F = r_[F, zeros(nharm * 2 - N)] |
|
|
|
|
|
|
|
|
# Fill output data |
|
|
|
|
|
|
|
|
# Fill output data. |
|
|
out[0, 0] = t_min |
|
|
out[0, 0] = t_min |
|
|
for k in range(nharm): |
|
|
for k in range(nharm): |
|
|
Fk = F[2 * k + 1] * e**(rotation * 1j * (k+1)) |
|
|
Fk = F[2 * k + 1] * e**(rotation * 1j * (k+1)) |
|
|
out[0, 2 * k + 1] = -imag(Fk) # Pk |
|
|
out[0, 2 * k + 1] = -imag(Fk) # Pk |
|
|
out[0, 2 * k + 2] = real(Fk) # Qk |
|
|
out[0, 2 * k + 2] = real(Fk) # Qk |
|
|
|
|
|
|
|
|
# Insert it and continue |
|
|
|
|
|
|
|
|
# Insert this point and continue |
|
|
insert_function(out) |
|
|
insert_function(out) |
|
|
processed = idx_max |
|
|
processed = idx_max |
|
|
|
|
|
|
|
|