拟合衰减振动模型,估算阻尼比和阻尼系数

拟合衰减振动模型,估算阻尼比和阻尼系数

flyfish

衰减振动模型

在自由振动系统中,阻尼振动可以用以下公式描述:
x ( t ) = x 0 e − ζ ω n t cos ⁡ ( ω d t + ϕ ) x(t) = x_0 e^{-\zeta \omega_n t} \cos(\omega_d t + \phi) x(t)=x0eζωntcos(ωdt+ϕ)
其中:

x ( t ) x(t) x(t) 是时间 t t t 时的位移(Displacement at time t t t

x 0 x_0 x0 是初始位移(Initial displacement)

ζ \zeta ζ 是阻尼比(Damping ratio)
希腊字母 ζ \zeta ζ,英文表示为 “zeta”

ω n \omega_n ωn 是无阻尼固有频率(Undamped natural frequency)
希腊字母 ω \omega ω,英文表示为 “omega”

t t t 是时间(Time)

ω d \omega_d ωd 是阻尼振动频率(Damped natural frequency),其公式为:
ω d = ω n 1 − ζ 2 \omega_d = \omega_n \sqrt{1 - \zeta^2} ωd=ωn1ζ2

ϕ \phi ϕ 是相位角(Phase angle)
希腊字母 ϕ \phi ϕ,英文表示为 “phi”

公式说明

  1. 初始位移 x 0 x_0 x0 (Initial displacement) :
    系统开始自由振动时的位移。

  2. 阻尼比 ζ \zeta ζ (Damping ratio) :
    衡量系统阻尼程度的无量纲参数。
    ζ \zeta ζ 越大,阻尼越强。

  3. 无阻尼固有频率 ω n \omega_n ωn (Undamped natural frequency) :
    系统在没有阻尼情况下的固有振动频率。
    单位:弧度每秒(radians per second, rad/s)。

  4. 阻尼振动频率 ω d \omega_d ωd (Damped natural frequency) :
    系统在有阻尼情况下的实际振动频率。

计算公式: ω d = ω n 1 − ζ 2 \omega_d = \omega_n \sqrt{1 - \zeta^2} ωd=ωn1ζ2

ζ < 1 \zeta < 1 ζ<1 时,系统会振荡, ω d \omega_d ωd 表示振荡频率。

  1. 相位角 ϕ \phi ϕ (Phase angle) :
    描述系统初始位移和初始速度之间的关系。

衰减振动的描述

在阻尼系统中,振动会逐渐衰减,幅度随着时间指数下降。振动系统的运动可以分解为以下几个部分:

  1. 指数衰减部分 e − ζ ω n t e^{-\zeta \omega_n t} eζωnt :
    描述振幅随时间的衰减。

  2. 余弦振荡部分 cos ⁡ ( ω d t + ϕ ) \cos(\omega_d t + \phi) cos(ωdt+ϕ) :
    描述系统的振荡行为,频率为 ω d \omega_d ωd,初始相位为 ϕ \phi ϕ

在这里插入图片描述
代码实现

import numpy as np
import scipy.optimize as opt
import matplotlib.pyplot as plt# 定义衰减振动函数
def damped_vibration(t, x0, zeta, omega_n, phi):omega_d = omega_n * np.sqrt(1 - zeta**2)return x0 * np.exp(-zeta * omega_n * t) * np.cos(omega_d * t + phi)# 合成实验数据
t_data = np.linspace(0, 10, 1000)  # 时间数据
x0_true = 1.0  # 初始位移
zeta_true = 0.1  # 真正的阻尼比
omega_n_true = 2 * np.pi  # 真正的无阻尼固有频率
phi_true = 0  # 真正的相位角
x_data = damped_vibration(t_data, x0_true, zeta_true, omega_n_true, phi_true)  # 生成理想数据# 加入噪声
x_data_noisy = x_data + 0.05 * np.random.normal(size=t_data.shape)  # 加入随机噪声# 拟合数据
initial_guess = [x0_true, zeta_true, omega_n_true, phi_true]  # 初始猜测
params, params_covariance = opt.curve_fit(damped_vibration, t_data, x_data_noisy, p0=initial_guess)  # 拟合模型# 提取拟合参数
x0_est, zeta_est, omega_n_est, phi_est = params# 假设质量为1 kg
m = 1.0
gamma_est = 2 * zeta_est * omega_n_est * m# 输出结果
print(f"Estimated Initial Displacement (x0): {x0_est}")
print(f"Estimated Damping Ratio (zeta): {zeta_est}")
print(f"Estimated Natural Frequency (omega_n): {omega_n_est}")
print(f"Estimated Damping Coefficient (gamma): {gamma_est} N·s/m")# 绘图比较
plt.figure(figsize=(10, 6))
plt.plot(t_data, x_data_noisy, label='Noisy Data', alpha=0.5)
plt.plot(t_data, damped_vibration(t_data, *params), label='Fitted Curve', color='red')
plt.xlabel('Time (s)')
plt.ylabel('Displacement (m)')
plt.legend()
plt.show()

t_data: 时间数据,生成一个从0到10秒的1000个时间点的数组。
x0_true: 初始位移(True initial displacement),设定为1.0米。
zeta_true: 真正的阻尼比(True damping ratio),设定为0.1。
omega_n_true: 真正的无阻尼固有频率(True undamped natural frequency),设定为 2π(即每秒一个完整的振动周期)。
phi_true: 真正的相位角(True phase angle),设定为0。

Estimated Initial Displacement (x0): 0.9969144391835894
Estimated Damping Ratio (zeta): 0.09975574475118448
Estimated Natural Frequency (omega_n): 6.2712971489170615
Estimated Damping Coefficient (gamma): 1.2511958352924026 N·s/m

每个结果的单位及其读法:

  1. Estimated Initial Displacement (x0) :
    单位 : 米 (meters, m)

读法 : “Estimated Initial Displacement is value meters”

  1. Estimated Damping Ratio (zeta) :
    单位 : 无单位(damping ratio 是一个无量纲参数)

读法 : “Estimated Damping Ratio is value

  1. Estimated Natural Frequency (omega_n) :
    单位 : 弧度每秒 (radians per second, rad/s)

读法 : “Estimated Natural Frequency is value radians per second”

  1. Estimated Damping Coefficient (gamma) :
    单位 : 牛顿·秒每米 (Newton-seconds per meter, N·s/m)

读法 : “Estimated Damping Coefficient is value Newton-seconds per meter”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3227366.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

一天搞定软件测试基础!——包含Web测试、App测试

以下&#x1f447;是2024新版黑马程序员软件测试零基础入门到精通全套视频教程的所有笔记&#xff01; 有一些缺点&#xff0c;就是我是在7月份的时候进行该课程学习的&#xff0c;所以网课老师准备的一些网盘资源都已经失去连接了&#xff0c;所以我无法在我的电脑里进行测试&…

【代码随想录】【算法训练营】【第64天】 [卡码117]软件构建 [卡码47]参加科学大会

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 64&#xff0c;周三&#xff0c;继续ding~ 题目详情 [卡码117] 软件构建 题目描述 卡码117 软件构建 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 [卡码…

错位情缘悬疑升级

✨&#x1f525;【错位情缘&#xff0c;悬疑升级&#xff01;关芝芝与黄牡丹的惊世婚约】&#x1f525;✨在这个迷雾重重的剧场&#xff0c;一场前所未有的错位大戏正悄然上演&#xff01;&#x1f440; 你没看错&#xff0c;昔日兄弟的前女友关芝芝&#xff0c;竟摇身一变成了…

用Python玩转Excel的五大功能!

在日常的数据处理工作中&#xff0c;Excel无疑是一个强大的工具。然而&#xff0c;当数据量较大或需要自动化处理时&#xff0c;Python凭借其强大的库支持&#xff0c;如pandas和openpyxl&#xff0c;能够更高效地处理Excel文件。 本文将介绍Python中常用的五种Excel操作**&am…

单链表--续(C语言详细版)

2.6 在指定位置之前插入数据 // 在指定位置之前插入数据 void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x); 分为两种情况&#xff1a;1. 插入的数据在链表中间&#xff1b;2. 插入的数据在链表的前面。 // 在指定位置之前插入数据 void SLTInsert(SLTNode** …

快团团团长如何获得物流查询码以及如何查询呢?

快团团团长如何获得物流查询码以及如何查询呢&#xff1f; 一、功能说明 团长可自行生成物流查询码&#xff0c;直接将码发给顾客&#xff0c;顾客扫码可查询自己订单的物流状态&#xff01; 用户扫码后&#xff0c;会出现用户在该团长处下单的所有快递订单。团员可查看该订…

基于Booth乘法和Wallace树的乘法器优化思想

基于Booth乘法和Wallace树的快速乘法器 为了理解Booth乘法和Wallace数如何让乘法器变得更快&#xff1a; 先考虑不优化的8位乘法器实现&#xff0c;即8个16位数字累积共进行7次加法运算&#xff0c;可以认为一次16位加法用到16个全加器&#xff0c;则共需要112个全加器件&…

【Vscode】显示多个文件 打开多个文件时实现标签栏多行显示

Vscode显示多个文件&VSCode打开多个文件时实现标签栏多行显示 写在最前面一、解决打开文件的时候只显示一个tab的办法解决办法如下&#xff1a; 二、文件标签栏多行显示设置步骤&#xff1a; &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…

C++的介绍与认识

目录 前言 1.什么是C 2.C的发展历史 3.C参考文档 4.C重要性 4.1C特点 4.2编程语言排行榜 4.3 C的应用领域 5.C学习指南 1. 基础知识 2. 面向对象编程&#xff08;OOP&#xff09; 3. 泛型编程 4. 标准库&#xff08;STL&#xff09; 结束语 前言 学习了C语言的知识…

Day06-角色管理-员工管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.编辑角色-进入行内编辑2.角色管理-行内编辑-数据缓存3.角色管理-编辑角色-确定取消4.角色管理-删除角色员工管理-页面结构6.员工管理-左侧树7.员工管理-选中首个节…

算法的复杂度

文章目录 一、算法的效率1、复杂度的概念2、复杂度的重要性 二、时间复杂度三、空间复杂度四、大O的渐进表示发五、计算复杂度案例1、计算Func1函数的复杂度2、计算Fun2的时间复杂度3、计算Func3的时间复杂度4、计算Func4的时间复杂度5、计算strchr的时间复杂度6、计算Func5的时…

SuperCLUE最新测评发布,360智脑大模型稳居大模型第一梯队

7月9日&#xff0c;国内权威大模型评测机构SuperCLUE发布《中文大模型基准测评2024上半年报告》&#xff0c;360智脑大模型&#xff08;360gpt2-pro&#xff09;在SuperCLUE基准6月测评中&#xff0c;取得总分72分&#xff0c;超过GPT-3.5-Turbo-0125&#xff0c;位列国内大模型…

[GICv3] 3. 物理中断处理(Physical Interrupt Handling)

中断生命周期 ​​ 外设通过中断信号线生成中断&#xff0c;或者软件生成中断&#xff08;SGI&#xff09;。Distributor 和 ReDistributor 配合按照中断分组和中断优先级仲裁后将最高优先级的中断分发到 CPU interface。cpu interface 向中断发送到 PEPE 读取 IAR 寄存器&am…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里&#xff0c;地理信息系统&#xff08;GIS&#xff09;如同一把利器&#xff0c;帮助我们剖析、理解和改造这个世界。而在众多GIS软件中&#xff0c;Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序&#xff0c;Global M…

【服务器】在Linux查看运行的Python程序,并找到特定的Python程序

在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…

InstructPix2Pix Learning to Follow Image Editing Instructions

InstructPix2Pix: Learning to Follow Image Editing Instructions TL; DR&#xff1a;核心是使用 GPT3 SD P2P 来机造指令编辑训练数据。 数据 本文要做的事情是教会模型根据指令来进行图像编辑。样例如下图所示&#xff0c;给定一张向日葵的图片和指令 “将向日葵换为玫…

zynq使用简单I/O对Flash进行读写测试

硬件环境&#xff1a;ALINX 7020 ZYNQ的QSPI Flash 控制器有以下三种模式&#xff1a;I/O 模式、线性地址模式&#xff0c;以及传统 SPI 模式。 I/O模式 操作特点&#xff1a;在I/O模式下&#xff0c;软件模拟去实现 Flash 器件的通信协议。软件需要将 Flash 命令和数据写到控…

【深度学习入门篇 ②】Pytorch完成线性回归!

&#x1f34a;嗨&#xff0c;大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; )&#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙&#xff1a;一个帮助编程小…

二四、3d人脸构建

一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…