用于分析结构循环加载试验中力-位移滞回曲线
本应用程序专为从事结构试验数据分析的研究人员、工程师和学生设计。它提供了循环加载试验中力-位移滞回曲线的自动化分析,广泛应用于地震工程、结构动力学和材料测试领域。
- 自动滞回环检测:识别并提取单个加载循环
- 骨架曲线提取:使用两种不同方法推导骨架曲线
- 高级平滑处理:七种插值算法
- 综合指标计算:计算结构性能指标
- 延性分析:七种不同的延性系数计算方法
| 功能 | 描述 |
|---|---|
| 滞回环提取 | 从连续试验数据中自动识别和分离单个加载循环 |
| 骨架曲线生成 | 两种方法:(1) 外包络线追踪,(2) 峰值点连接 |
| 方向特定分析 | 分析正向、负向或同时分析两个方向 |
| 数据过滤 | 可选择仅保留每个位移水平的第一个循环(用于重复循环) |
| 峰值检测 | 自动识别局部最大值和最小值 |
| 起始点识别 | 智能检测骨架曲线的原点 |
-
双绘图模式:
- 点线图:原始数据点用线连接
- 平滑曲线图:使用高级算法插值的平滑曲线
-
交互式控制:
- 鼠标滚轮缩放(以光标位置为中心)
- 平移和拖动导航
- 完整的matplotlib工具栏集成
- 重置视图到原始范围
- 导出高分辨率图形
-
可自定义显示:
- 切换原始数据点显示/隐藏
- 可调整插值点密度(100-1000点)
- 正负曲线颜色编码
- 标注峰值点和起始点
- 专业网格和坐标轴格式
-
PCHIP(分段三次埃尔米特插值多项式)
- 保形插值
- 无过冲或振荡
- 最适合:保持数据趋势
-
Akima(Akima样条插值)
- 自然平滑曲线
- 相比三次样条减少振荡
- 最适合:在保持形状的同时减少波动
-
贝塞尔曲线
- 超平滑的演示级曲线
- 可调整控制点密度(10-100%)
- 最适合:可视化和演示
-
B样条(基样条)
- 具有可调参数的超平滑曲线
- 为了平滑性可能偏离原始点
- 最适合:当精确性不重要时的最大平滑度
-
Savitzky-Golay滤波器
- 在平滑的同时保留峰值等特征
- 可调窗口大小(奇数)
- 最适合:在保持重要特征的同时降噪
-
UnivariateSpline(单变量样条)
- 通用型,具有可调平滑因子
- s=0强制精确插值,较大的s增加平滑度
- 最适合:灵活的平滑需求
-
CubicSpline(三次样条)
- 精确通过所有数据点
- 节点处二阶导数连续
- 最适合:具有平滑过渡的精确插值
七种国际公认的方法:
| 方法 | 描述 | 应用 |
|---|---|---|
| 几何法 | 基于峰值荷载的75% | 一般结构分析 |
| 能量法 | 基于能量耗散 | 基于能量的设计 |
| Park法 | 基于刚度的退化准则 | 抗震设计(Park & Ang) |
| 最远点法 | 距峰值线最大距离 | 保守估计 |
| ASCE法 | 峰值荷载60%准则 | 美国抗震规范 |
| EEEP(等效能量法) | 能量等效原则 | 基于性能的设计 |
| 弹性屈服法 | 初始刚度交点 | 传统屈服点定义 |
三个详细的输出选项卡:
-
图形显示:
- 带颜色编码循环的滞回曲线
- 骨架曲线(正向和负向)
- 用星号标记的峰值点
- 高亮显示的起始点
- 交互式图例
-
性能指标报告:
- 文件信息
- 位移相关指标
- 力学性能
- 能量耗散指标
- 阻尼系数
- 退化指标
- 延性系数
-
逐循环详情:
- 单个循环属性表
- 每个循环的峰值位移和力
- 循环面积(能量耗散)
- 统计摘要
-
操作系统:
- Windows 10/11(64位)
- macOS 10.14或更高版本
- Linux(Ubuntu 18.04+、Fedora 30+或同等版本)
-
Python:版本3.7或更高
| 包 | 版本 | 用途 |
|---|---|---|
| numpy | ≥1.19.0 | 数值计算 |
| pandas | ≥1.1.0 | 数据处理 |
| PySide6 | ≥6.0.0 | GUI框架 |
| matplotlib | ≥3.3.0 | 绘图和可视化 |
| scipy | ≥1.5.0 | 科学计算和插值 |
| openpyxl | ≥3.0.0 | Excel文件支持 |
从python.org下载并安装Python 3.7+
重要:安装时勾选"Add Python to PATH"
打开终端/命令提示符并验证:
python --version
# 应显示:Python 3.7.x或更高版本# 导航到项目目录
cd path/to/HysAnalysis_MultiLang
# 安装所有必需的包
pip install numpy pandas PySide6 matplotlib scipy openpyxl或使用requirements文件:
pip install -r requirements.txtpython HysAnalysis_MultiLang.py# 创建新环境
conda create -n hys_analysis python=3.9
# 激活环境
conda activate hys_analysis
# 安装包
conda install numpy pandas matplotlib scipy openpyxl
pip install PySide6
# 运行应用程序
python HysAnalysis_MultiLang.pyWindows用户:可从发布页面下载独立可执行文件。
Mac/Linux的独立可执行版本将在未来版本中提供。
| 格式 | 扩展名 | 备注 |
|---|---|---|
| 文本 | .txt |
空格或制表符分隔 |
| CSV | .csv |
逗号分隔值 |
| Excel | .xls, .xlsx |
使用第一个工作表 |
第1列:位移(mm)
第2列:力(N或kN)
0.00 0.00
0.12 1.23
0.24 2.45
0.36 3.67
-0.15 -1.89
-0.30 -3.78
...
0.00 0.00
0.12 1.23
0.24 2.45
0.36 3.67
-0.15 -1.89
-0.30 -3.78
...
0.00,0.00
0.12,1.23
0.24,2.45
0.36,3.67
-0.15,-1.89
-0.30,-3.78
...
位移_mm,力_kN
0.00,0.00
0.12,1.23
0.24,2.45
...
A B
1 0.00 0.00
2 0.12 1.23
3 0.24 2.45
4 0.36 3.67
5 -0.15 -1.89
6 -0.30 -3.78
...
✅ 必需:
- 至少10个数据点(最好100+)
- 至少两列
- 仅数值(除可选标题外无文本)
- 按时间顺序排列(试验时间序列)
✅ 推荐:
- 200+数据点以获得平滑曲线
- 一致的采样率
- 完整的加载循环(返回到接近零)
- 正向和负向位移
❌ 不支持:
- 多个标题或注释行
- 数据中的非数字字符
- 缺失值(NaN、空单元格)
- 数据列中的日期/时间戳
-
单位:
- 位移通常以mm为单位
- 力以N(或kN)为单位
- 混合单位会影响指标计算
-
零点:
- 第一个点应接近(0, 0)
- 如果不是,工具会自动调整位移偏移
-
噪声:
- 可接受小的测量噪声
- 如需要可使用平滑算法
- Savitzky-Golay滤波器适用于噪声数据
-
采样:
- 采样率越高=曲线细节越好
- 推荐:每个循环>100个点
- 最小值:每个循环约20个点
工具会自动:
- 删除重复的位移值(保留最大力)
- 调整零点到第一次加载
- 过滤接近零的值(<范围的0.1%)
- 如需要按位移排序
算法:
- 从原点(0, 0)开始
- 对于正向:
- 找到位移开始增加的第一个点
- 跟踪迄今为止看到的最大位移
- 如果位移>之前最大值+阈值,则添加点
- 对负向重复
特点:
- 创建平滑的单调递增曲线
- 代表绝对最大承载力
- 大多数规范中的标准方法
- 对单个循环变化不太敏感
最适合:
- 标准抗震分析
- 基于规范的评估
- 比较不同试件
- 报告极限承载力
算法:
- 识别力-位移数据中的所有局部最大值(峰值)
- 对于正峰值:
- 找到第1个负峰值和第2个正峰值之间在y轴上的交点
- 将此起始点连接到每个后续正峰值
- 对负峰值重复
特点:
- 捕获单个循环行为
- 可能显示非单调变化
- 更详细的表示
- 对测试协议敏感
最适合:
- 详细的逐循环分析
- 退化模式研究
- 循环行为研究
- 非标准加载协议
延性(μ)=极限位移/屈服位移
关键区别在于如何定义"屈服位移":
定义:峰值荷载的75%处屈服
计算:
其中,
优点:
- 简单直观
- 实践中广泛使用
- 易于重现
缺点:
- 75%的选择是任意的
- 不考虑能量或刚度
典型范围:设计良好的结构为2-6
定义:基于等效能量耗散
计算:
其中,
优点:
- 基于能量(物理意义明确)
- 考虑整体行为
缺点:
- 可能给出比几何法更高的值
- 对曲线形状敏感
典型范围:3-8
定义:刚度退化到初始值的1/3
计算:
其中,
优点:
- 基于刚度退化
- 抗震研究中常用
- 与Park & Ang损伤模型兼容
缺点:
- 需要明确的初始线性区域
- 可能较为保守
参考文献:Park, Y., & Ang, A. H. ‐S. (1985). Mechanistic Seismic Damage Model for Reinforced Concrete. Journal of Structural Engineering, 111(4), 722–739. https://doi.org/10.1061/(asce)0733-9445(1985)111:4(722)
典型范围:2-5
定义:距原点到峰值连线最远的点
计算:
定义从原点$(0, 0)$到峰值点$(D_{peak}, F_{peak})$的直线
对于骨架曲线上的每个点$(D_i, F_i)$,计算垂直距离:
其中,
优点:
- 屈服的几何解释
- 识别明确的过渡点
- 独立于任意阈值
缺点:
- 可能受数据噪声影响
- 可能需要先平滑
典型范围:3-7
定义:峰值荷载的60%处屈服
计算:
其中,
优点:
- 基于美国抗震规范
- ASCE 41评估标准
- 比几何法更保守
缺点:
- 仍是任意阈值
- 与其他国际规范不同
参考文献:ASCE 41-17 (2017). Seismic Evaluation and Retrofit of Existing Buildings. American Society of Civil Engineers. https://doi.org/10.1061/9780784414859
典型范围:2-5
定义:具有等效能量的双线性曲线
计算:
构建具有以下特征的双线性曲线:
- 弹性段:$(0, 0) \to (D_{yield}, F_{peak})$
- 塑性平台:从$D_{yield}$到$D_{peak}$,$F = F_{peak}$
调整$D_{yield}$直到:$E_{bilinear} = E_{actual}$
其中,
优点:
- 能量等效(FEMA标准)
- 基于性能的设计中常用
- 考虑屈服后行为
缺点:
- 需要迭代
- 计算量较大
参考文献:FEMA 356, ATC-40
典型范围:3-6
定义:初始刚度线与峰值力的交点
计算:
其中,
优点:
- 最简单的方法
- 基于弹性假设
- 物理意义明确
缺点:
- 经常低估延性
- 忽略实际屈服行为
- 非常保守
典型范围:1.5-4
| 方法 | 复杂度 | 保守性 | 最佳应用 |
|---|---|---|---|
| 几何法 | 低 | 中等 | 一般分析 |
| 能量法 | 中等 | 低 | 设计优化 |
| Park法 | 中等 | 高 | 损伤评估 |
| 最远点法 | 中等 | 中等 | 研究 |
| ASCE法 | 低 | 高 | 规范合规性(美国) |
| EEEP法 | 高 | 中等 | 基于性能的设计 |
| 弹性法 | 低 | 非常高 | 快速估算 |
使用峰值点连接方法绘制曲线可以获得更好的平滑效果。
需要平滑?
├─ 是 → 主要目标?
│ ├─ 精确数据 → CubicSpline
│ ├─ 保持形状 → PCHIP或Akima
│ ├─ 最大平滑 → Bézier或BSpline
│ ├─ 减少噪声 → Savitzky-Golay
│ └─ 灵活性 → UnivariateSpline
└─ 否 → 使用点线图
数学基础:具有连续一阶导数的分段三次多项式
特性:
- 保形(保持单调性)
- 点之间无过冲
- 局部支持(改变一个点仅影响附近段)
何时使用:
- 具有单调段的数据
- 过冲不可接受时
- 结构测试数据(物理上真实)
数学基础:具有局部曲率估计的修正三次样条
特性:
- 比标准三次样条振荡更少
- 外观更自然的曲线
- 局部支持
何时使用:
- 具有平缓曲线的数据
- 想要自然平滑时
- 避免峰值附近振荡
数学基础:伯恩斯坦多项式参数曲线
特性:
- 极其平滑
- 不一定通过所有点
- 可通过控制点调整
何时使用:
- 演示图形
- 出版质量图表
- 美观的平滑度>准确性时
参数:
- 控制点密度(10-100%)
- 10%:超平滑,可能明显偏离
- 50%:平衡
- 100%:更接近原始数据
推荐设置:
- 演示:20-30%
- 技术报告:40-60%
- 数据验证:80-100%
数学基础:具有平滑参数的基样条
特性:
- 非常平滑的曲线
- 控制与点的偏差
- 可调平滑度
何时使用:
- 需要最大平滑度
- 可接受偏离精确点
- 艺术渲染
数学基础:移动窗口中的最小二乘多项式拟合
特性:
- 保留特征(峰值、谷值)
- 减少高频噪声
- 保持峰值位置
何时使用:
- 噪声数据
- 需要保留峰值位置
- 信号处理应用
数学基础:具有可调参数的平滑样条
特性:
- 平滑度和拟合之间的平衡
- 广泛适用
- 可调权衡
何时使用:
- 通用平滑
- 想要精细控制时
- 大多数情况的默认选择
数学基础:具有连续二阶导数的三次多项式
特性:
- 精确通过所有点
- 平滑过渡
- 点之间可能振荡
何时使用:
- 需要精确插值
- 信任所有数据点
- 想要平滑导数
定义:试验期间达到的最大绝对位移
定义:卸载后的永久位移
定义:试验期间的最大力
定义:初始线弹性区域的斜率
计算方法:
- 取前5-20个数据点(或数据的前10%)
- 排除接近零的点(噪声阈值)
- 线性回归找到斜率
定义:从原点到峰值点的斜率
关系:
比值$K_{sec}/K_{0}$表示退化程度
定义:所有滞回环围成的面积之和
公式:
其中,
定义:与总滞回环面积相同
定义:每个循环的平均能量
其中,
定义:单个最大循环面积
其中,
定义:耗散能量与弹性应变能的比值
其中,
单位:无量纲(通常以%表示)
参考:通常与5%阻尼(常见设计假设)比较
定义:承载力下降的百分比
其中,
定义:刚度下降的百分比
其中,
解释:
- 更高=更多损伤/屈服
- 更低=更多弹性行为
注意:对于延性设计,高刚度退化是预期的且可接受的
定义:极限位移与屈服位移的比值
单位:无量纲
方法:见延性方法部分
能量耗散 ↔ 等效阻尼
↕
延性 ↔ 力降低系数
↕
退化 ← 累积损伤
良好的抗震性能:
- ✓ 高延性
- ✓ 高能量耗散
- ✓ 高等效阻尼
- ✓ 适度的强度退化
- ✓ 可接受的残余变形
较差的性能:
- ✗ 低延性
- ✗ 低能量耗散
- ✗ 严重的强度退化
- ✗ 大的残余变形
- ✗ 突然破坏(骨架曲线无平台)
| 快捷键 | 操作 | 上下文 |
|---|---|---|
| Delete | 删除选定文件 | 在列表中选择文件时 |
| Ctrl + Z | 撤销上次操作 | 文件管理操作 |
| Ctrl + A | 全选文本 | 在文本结果面板中 |
| Ctrl + C | 复制文本 | 在文本结果面板中 |
| Ctrl + S | 保存图形 | 图形激活时(matplotlib) |
| Ctrl + Home | 重置图形视图 | 图形激活时 |
| 键 | 操作 |
|---|---|
| Home / H | 重置原始视图 |
| 左箭头 | 上一个视图 |
| 右箭头 | 下一个视图 |
| P | 平移/缩放模式 |
| O | 缩放到矩形 |
| S | 保存图形 |
| G | 切换网格 |
| L | 切换对数/线性Y轴 |
| K | 切换对数/线性X轴 |
Q1:此工具适合哪些类型的测试?
答:任何产生力-位移数据的循环加载测试:
- 准静态循环测试
- 拟动力测试
- 慢速循环测试(非高速动力测试)
- 结构构件:梁、柱、墙、连接
- 材料:混凝土、钢、木材、复合材料
- 装置:阻尼器、隔震器、能量耗散器
不适合:
- 高速冲击测试
- 真正的动力测试(频率相关)
- 非力学测试
Q2:我可以分析不同单位的力-变形数据吗?
答:可以,但是:
- 工具假设位移单位为mm,力单位为N
- 如果使用不同单位:
- 指标值将以您的输入单位为准
- 标签仍显示"mm"和"N"(仅外观)
- 您负责解释结果
- 推荐:导入前转换为mm和N
Q3:我需要多少个数据点?
答:
- 最少:总共约50个点,每个循环约10个
- 推荐:总共200+个点,每个循环30+个
- 理想:总共500+个点,每个循环50+个
点数越多=曲线越平滑,指标越准确
Q4:我可以分析单调(推覆)测试吗?
答:部分可以:
- 工具将加载数据并绘图
- 可以提取骨架曲线
- 计算峰值荷载和刚度
- 但是:无滞回环(需要循环加载)
- 能量指标将为零或不准确
- 最好使用专门的推覆分析工具
Q5:为什么不同的平滑算法给出不同的结果?
答:算法具有不同的数学特性:
- 有些保留峰值(SG滤波器、PCHIP)
- 有些优先考虑平滑度(Bézier、B样条)
- 有些精确通过点(Cubic)
- 权衡:平滑度↔准确性
用于分析:使用PCHIP或最小平滑 用于演示:使用适度设置的Bézier
Q6:我的延性值与手工计算不同。为什么?
答:常见原因:
- 不同的屈服点定义:您的方法vs软件方法
- 数据预处理:工具自动过滤接近零的值
- 骨架曲线提取:手动vs自动峰值检测
- 舍入:显示舍入到2-4位小数
验证:
- 检查中间值(屈服位移、极限位移)
- 尝试不同的延性方法
Q7:我可以导出数值数据(不仅仅是图形)吗?
答:目前:
- 图形:可以(通过工具栏导出PNG、PDF、SVG)
- 文本报告:从选项卡2和3复制(Ctrl+C)
- 数值数据:无直接CSV导出
变通方法:
- 复制文本报告
- 粘贴到Excel
- 使用"分列"功能
未来功能:计划直接CSV/Excel导出
Q8:工具是否考虑P-Delta效应?
答:不考虑。工具按原样分析数据。
- 如果您的测试数据包括P-Delta,结果反映总体行为
- 如果您想要纯构件响应,请在导入前应用P-Delta修正
- P-Delta与构件行为的分离是用户的责任
Q9:我可以分析非对称加载的测试吗?
答:可以:
- 工具独立处理正向和负向
- 适当时分别计算指标
- 如需要,使用"方向"设置聚焦一个方向
- 非对称性在单独的正/负指标中捕获
Q10:如果我的测试从预加载(而非零)开始怎么办?
答:工具自动调整:
- 检测第一个"加载"点
- 减去偏移以将位移移至零原点
- 如适当处理力偏移
- 在选项卡2报告中检查起始点
如果调整不正确:
- 导入前手动调整数据
- 确保第一个点在零或接近零
Q11:我的数据文件有3+列。使用哪些列?
答:仅前两列:
- 第1列:位移
- 第2列:力
- 第3+列:忽略
确保文件中列顺序正确
Q12:我可以从ABAQUS/ANSYS/SAP2000导入数据吗?
答:如果导出为CSV/TXT格式,可以:
ABAQUS:
1. Results → Field Output → Create XY Data
2. 选择位移和力
3. Save XY Data → ASCII格式
SAP2000:
1. Display → Show Tables
2. 选择节点位移和力
3. Export → CSV
ANSYS:
1. POST1 → List Results → Nodal Solution
2. Write to file → 位移、力
3. 格式化为空格分隔文本
然后导入导出的文件
Q13:我的测试是英寸和kip。我需要转换吗?
答:推荐:是的,转换为mm和N
如果不转换:
- 指标将以您的单位(kip、in)为准
- 标签将显示"N"和"mm"(误导)
- 无计算错误,只是单位标签不匹配
转换:
1 kip = 4448.22 N
1 inch = 25.4 mm
Q14:我得到"平滑插值失败"。怎么办?
答:这意味着算法无法处理您的数据
尝试:
- 切换算法:尝试PCHIP或Akima(最稳健)
- 减少点数:将插值点降至100
- 检查数据:删除重复的x值,确保排序
- 禁用平滑:使用点线图
如果仍然存在:您的数据可能具有与该算法不兼容的结构
Q15:为什么没有检测到滞回环?
答:环检测的要求:
- 数据必须有"峰值"(局部最大值)
- 位移必须反向
- 每个环至少3个点
- 足够的位移范围(>最大值的0.1%)
检查:
- 测试是循环的吗?(非单调)
- 是否有明显的峰值?
- 位移是否变化?
查看选项卡1图形以直观检查
Q16:我可以在论文/出版物中使用此工具吗?
答:可以!这是开源软件
请引用为:
[S. Xiao]. (2025). HysAnalysis. Force-Displacement Hysteresis Curve Analysis Tool.
GitHub repository: [https://github.com/GarGarfie/HysAnalysis]
还要提及:
- 软件版本
- 使用的分析方法
- 所做的任何自定义
Q17:我可以修改代码吗?
答:可以,它是开源的
常见修改:
- 添加新的延性方法
- 自定义指标计算
- 添加导出格式
- 与其他工具集成
如果您改进了它,请考虑回馈!
我们欢迎贡献!
-
报告错误:
- 开一个issue并详细描述
- 如可能包括示例数据
- 指定Python版本、操作系统
-
建议功能:
- 开一个带"功能请求"标签的issue
- 解释用例
- 提供示例
-
改进文档:
- 修正拼写错误
- 添加示例
- 翻译成新语言
-
代码贡献:
- Fork仓库
- 创建功能分支
- 进行更改
- 提交拉取请求
如果您在研究中使用此工具,请引用:
@software{HysAnalysis,
author = {[S. Xiao]},
title = {Force-Displacement Hysteresis Curve Analysis Tool},
year = {2025},
publisher = {GitHub},
url = {[https://github.com/GarGarfie/HysAnalysis]}
}您也可以使用开源参考文献管理器如Zotero直接从此页面捕获引用。
此工具使用以下开源库:
- NumPy:数值计算
- Pandas:数据处理
- PySide6:GUI框架(Python的Qt)
- Matplotlib:可视化
- SciPy:科学计算
用❤️发电