|
|
@@ -28,12 +28,12 @@ def build_column_mapping(colinfo, streaminfo): |
|
|
|
pull out a dictionary mapping for the column names/numbers.""" |
|
|
|
columns = OrderedDict() |
|
|
|
for c in colinfo: |
|
|
|
if (c['name'] in columns.keys() or |
|
|
|
c['index'] in columns.values()): |
|
|
|
col_num = c['index'] + 1 # skip timestamp |
|
|
|
if (c['name'] in columns.keys() or col_num in columns.values()): |
|
|
|
raise DataError("duplicated columns") |
|
|
|
if (c['index'] < 0 or c['index'] >= streaminfo.layout_count): |
|
|
|
raise DataError("bad column number") |
|
|
|
columns[c['name']] = c['index'] |
|
|
|
columns[c['name']] = col_num |
|
|
|
if not len(columns): |
|
|
|
raise DataError("no columns") |
|
|
|
return columns |
|
|
@@ -79,10 +79,17 @@ class Exemplar(object): |
|
|
|
maxrows = self.count) |
|
|
|
self.data = list(datagen)[0] |
|
|
|
|
|
|
|
# Discard timestamp |
|
|
|
self.data = self.data[:,1:] |
|
|
|
# Extract just the columns that were specified in self.columns, |
|
|
|
# skipping the timestamp. |
|
|
|
extract_columns = [ value for (key, value) in self.columns.items() ] |
|
|
|
self.data = self.data[:,extract_columns] |
|
|
|
|
|
|
|
# Subtract the mean from each column |
|
|
|
# Fix the column indices in e.columns, since we removed/reordered |
|
|
|
# columns in self.data |
|
|
|
for n, k in enumerate(self.columns): |
|
|
|
self.columns[k] = n |
|
|
|
|
|
|
|
# Subtract the means from each column |
|
|
|
self.data = self.data - self.data.mean(axis=0) |
|
|
|
|
|
|
|
# Get scale factors for each column by computing dot product |
|
|
@@ -147,7 +154,7 @@ def trainola_matcher(data, interval, args, insert_func, final_chunk): |
|
|
|
|
|
|
|
# Compute cross-correlation for each column |
|
|
|
for col_name in e.columns: |
|
|
|
a = data[:, src_columns[col_name] + 1] |
|
|
|
a = data[:, src_columns[col_name]] |
|
|
|
b = e.data[:, e.columns[col_name]] |
|
|
|
corr = scipy.signal.fftconvolve(a, np.flipud(b), 'valid')[0:valid] |
|
|
|
|
|
|
|