| from statsmodels.tsa.stattools import acf |
| from scipy.signal import argrelextrema |
| import numpy as np |
| from statsmodels.graphics.tsaplots import plot_acf |
|
|
|
|
| |
| def find_length_rank(data, rank=1): |
| data = data.squeeze() |
| if len(data.shape) > 1: return 0 |
| if rank == 0: return 1 |
| data = data[:min(20000, len(data))] |
|
|
| base = 3 |
| auto_corr = acf(data, nlags=400, fft=True)[base:] |
|
|
| |
| |
| |
| |
| |
|
|
| local_max = argrelextrema(auto_corr, np.greater)[0] |
|
|
| |
| |
|
|
| try: |
| |
| sorted_local_max = np.argsort([auto_corr[lcm] for lcm in local_max])[::-1] |
| max_local_max = sorted_local_max[0] |
| if rank == 1: max_local_max = sorted_local_max[0] |
| if rank == 2: |
| for i in sorted_local_max[1:]: |
| if i > sorted_local_max[0]: |
| max_local_max = i |
| break |
| if rank == 3: |
| for i in sorted_local_max[1:]: |
| if i > sorted_local_max[0]: |
| id_tmp = i |
| break |
| for i in sorted_local_max[id_tmp:]: |
| if i > sorted_local_max[id_tmp]: |
| max_local_max = i |
| break |
| |
| |
| if local_max[max_local_max] < 3 or local_max[max_local_max] > 300: |
| return 125 |
| return local_max[max_local_max] + base |
| except: |
| return 125 |
|
|
|
|
| |
| def find_length(data): |
| if len(data.shape) > 1: |
| return 0 |
| data = data[:min(20000, len(data))] |
|
|
| base = 3 |
| auto_corr = acf(data, nlags=400, fft=True)[base:] |
|
|
| local_max = argrelextrema(auto_corr, np.greater)[0] |
| try: |
| max_local_max = np.argmax([auto_corr[lcm] for lcm in local_max]) |
| if local_max[max_local_max] < 3 or local_max[max_local_max] > 300: |
| return 125 |
| return local_max[max_local_max] + base |
| except: |
| return 125 |
|
|