Automated time constant (tau) fitting tool with decoupled window search and manual fitting support
Project description
AutoTau
AutoTau 是一个用于拟合指数上升/下降过程时间常数 τ 的 Python 工具,面向瞬态或周期信号的 τ 提取与分析。
模型形式:
- 上升(turn-on):
y = A * (1 - exp(-t/τ)) + C - 下降(turn-off):
y = A * exp(-t/τ) + C
主要功能
- 指定窗口的 τ 拟合(
TauFitter),输出 τ、R²、调整后 R²,并支持绘图。 - 滑动窗口自动搜索最佳拟合区间(
AutoTauFitter),可选并行执行。 - 多周期自动拟合(
CyclesAutoTauFitter),自动从前两个周期推断窗口并应用到全部周期。 - 窗口搜索与拟合解耦:
WindowFinder只找窗口;CyclesTauFitter/ParallelCyclesTauFitter使用手动窗口拟合。 - 多进程并行周期拟合(
ParallelCyclesTauFitter),默认返回pandas.DataFrame。 - PyQt5 图形界面(v0.5.0 新增):支持从 Excel 粘贴数据、自动/手动拟合、可视化结果、导出 CSV/Excel。
安装
pip install autotau
安装 GUI 版本(包含 PyQt5):
pip install autotau[gui]
本地开发安装:
pip install -e .
# 或带 GUI
pip install -e ".[gui]"
Python 版本要求:>=3.6。
快速开始
1) 单窗口拟合(TauFitter)
import numpy as np
from autotau import TauFitter
time = np.linspace(0, 0.4, 400)
signal = np.where(
time <= 0.2,
1 - np.exp(-time / 0.05),
np.exp(-(time - 0.2) / 0.05),
)
fitter = TauFitter(
time,
signal,
t_on_idx=[0.0, 0.2],
t_off_idx=[0.2, 0.4],
normalize=False,
language="en",
)
fitter.fit_tau_on(interp=True, points_after_interp=200)
fitter.fit_tau_off(interp=True, points_after_interp=200)
print("tau_on:", fitter.get_tau_on())
print("tau_off:", fitter.get_tau_off())
print("R2_on:", fitter.tau_on_r_squared, "R2_adj_on:", fitter.tau_on_r_squared_adj)
2) 自动窗口搜索(AutoTauFitter)
假设已有 time、signal(同采样、按时间升序),且包含一个完整周期。
from autotau import AutoTauFitter
auto_fitter = AutoTauFitter(
time,
signal,
sample_step=time[1] - time[0],
period=0.4,
window_scalar_min=0.2,
window_scalar_max=1/3,
window_points_step=10,
window_start_idx_step=1,
normalize=False,
language="en",
show_progress=True,
)
auto_fitter.fit_tau_on_and_off()
print("best tau_on:", auto_fitter.best_tau_on_fitter.get_tau_on())
print("best tau_off:", auto_fitter.best_tau_off_fitter.get_tau_off())
print("on window:", auto_fitter.best_tau_on_window_start_time, auto_fitter.best_tau_on_window_end_time)
3) 多周期自动拟合(CyclesAutoTauFitter)
假设 time、signal 为多周期数据,period 为单周期长度。
from autotau import CyclesAutoTauFitter
period = 0.4
sample_rate = 1000
cycles_fitter = CyclesAutoTauFitter(
time,
signal,
period=period,
sample_rate=sample_rate,
window_scalar_min=0.2,
window_scalar_max=1/3,
window_points_step=10,
window_start_idx_step=1,
normalize=False,
language="en",
)
results = cycles_fitter.fit_all_cycles(r_squared_threshold=0.95)
summary = cycles_fitter.get_summary_data()
print(summary.head())
4) 手动窗口 + 并行多周期拟合
先在前两个周期搜索窗口,再并行拟合全部周期。
from autotau import WindowFinder, ParallelCyclesTauFitter
two_period_mask = time <= time[0] + 2 * period
time_subset = time[two_period_mask]
signal_subset = signal[two_period_mask]
finder = WindowFinder(
time_subset,
signal_subset,
sample_step=1 / sample_rate,
period=period,
window_scalar_min=0.2,
window_scalar_max=1/3,
show_progress=True,
max_workers=4,
)
windows = finder.find_best_windows()
fitter = ParallelCyclesTauFitter(
time,
signal,
period=period,
sample_rate=sample_rate,
window_on_offset=windows["on"]["offset"],
window_on_size=windows["on"]["size"],
window_off_offset=windows["off"]["offset"],
window_off_size=windows["off"]["size"],
show_progress=True,
max_workers=4,
)
df = fitter.fit_all_cycles() # 默认返回 DataFrame
并行使用建议
AutoTauFitter可通过注入executor并行化窗口搜索:from concurrent.futures import ProcessPoolExecutor from autotau import AutoTauFitter with ProcessPoolExecutor(max_workers=8) as executor: fitter = AutoTauFitter(time, signal, sample_step=..., period=..., executor=executor) fitter.fit_tau_on_and_off()
CyclesAutoTauFitter可通过fitter_factory传入自定义AutoTauFitter(例如带并行的版本)。ParallelCyclesTauFitter已内置多进程“分块并行”,适合周期数较多的场景。- Windows 下使用多进程时,请将并行入口放在
if __name__ == "__main__":中。
API 概览
TauFitter:指定窗口拟合 τ,输出拟合参数与 R²。AutoTauFitter:滑动窗口搜索最佳拟合区间(可选并行)。CyclesAutoTauFitter:多周期自动拟合,支持低 R² 周期的再拟合。WindowFinder:只搜索窗口,不做拟合。CyclesTauFitter:使用手动窗口拟合多个周期(串行)。ParallelCyclesTauFitter:使用手动窗口拟合多个周期(并行,默认返回 DataFrame)。ParallelAutoTauFitter/ParallelCyclesAutoTauFitter:保留兼容但已废弃,建议改用AutoTauFitter(..., executor=...)与CyclesAutoTauFitter(..., fitter_factory=...)。
图形界面(GUI)
v0.5.0 新增 PyQt5 图形界面,支持:
- 从 Excel 复制粘贴两列数据(时间、信号)
- 自动模式:自动搜索最佳拟合窗口
- 手动模式:手动指定窗口参数
- 可视化:原始数据、τ 演化图、R² 质量图
- 导出结果到 CSV/Excel
启动 GUI
# 方式 1:模块启动
python -m autotau.gui
# 方式 2:命令行(安装后)
autotau-gui
使用流程
- 从 Excel 复制两列数据(时间 + 信号)
- 点击"Parse Clipboard"解析数据
- 设置周期(Period)和采样率(Sample Rate)
- 选择拟合模式(Auto/Manual)
- 点击"Fit Data"开始拟合
- 查看结果图表,导出 CSV/Excel
示例与数据
- 示例脚本:
examples/basic_examples.py - 示例数据:
autotau/transient.csv
更新日志
v0.6.0
- GUI 完全解耦:GUI 现在使用独立的拟合模块,不再依赖 core 模块的实现
- 修复 GUI 卡死问题:使用正确的 QThread 信号机制,确保拟合操作真正在后台线程执行
- 新增
autotau.gui.fitters模块:包含ExponentialFitter、WindowSearcher、CyclesFitter、AutoCyclesFitter - 避免 multiprocessing 和 matplotlib 与 GUI 的冲突
v0.5.0
- 新增 PyQt5 图形界面(GUI)
- 支持从 Excel 粘贴数据、自动/手动拟合、可视化、导出
v0.4.5
- 优化分块并行策略
- 修复窗口偏移量计算问题
许可证
MIT License,见 LICENSE。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autotau-0.6.0.tar.gz.
File metadata
- Download URL: autotau-0.6.0.tar.gz
- Upload date:
- Size: 64.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ff25fc90057ef978d5113f7425c3d506192d7ab1cc4c6cc0fb21188b4859c80
|
|
| MD5 |
e489b71a5f7c0e2e3bf2e91c9cccf91c
|
|
| BLAKE2b-256 |
7f545d8653a3eaddd78e03afc2516fec419805ccb30668686c1f9d6086713a7f
|
File details
Details for the file autotau-0.6.0-py3-none-any.whl.
File metadata
- Download URL: autotau-0.6.0-py3-none-any.whl
- Upload date:
- Size: 74.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bab9880a9b7a21179e3438b88813ed85c254ddcabdfae422d4c2752d940addd4
|
|
| MD5 |
6d7c7731034d75d13cb0a46a7a5800b3
|
|
| BLAKE2b-256 |
ebcc443959322a6208a49549608c1ac83fdd0368ee5d18a0f3ec743c1563a1e3
|