calc_model_frequency 函数说明文档

功能描述

该函数用于估计模型的“Psi”振荡频率。通过分析历史数据中的角度变化和速度信息,计算出模型在指定区间内的振荡频率。

参数说明

参数名 类型 描述
V0 float 模型的速度,单位为米每秒(m/s)。
Xmin float 分析区间的最小X值,单位为米(m)。
Xmax float 分析区间的最大X值,单位为米(m)。
Khis int 历史数据的采样间隔系数,无量纲。
HX float 计算步长,单位为米(m)。
Lm float 模型的长度,单位为米(m)。
Xhis ndarray 历史数据中的X坐标数组,单位为米(m)。
Phis ndarray 历史数据中的角度Psi数组,单位为弧度(rad)。
Vx ndarray 历史数据中的X方向速度数组,单位为米每秒(m/s)。

返回值

返回值名 类型 描述
mFpsi float 估计的“Psi”振荡频率,单位为千赫兹(KHz)。
FlagFrequency bool 是否成功估计频率的标志。True 表示成功,False 表示失败。

数学公式

零点交叉检测

在历史数据中,找到角度 Phis 的零点交叉点。零点交叉点的条件为:

Phis[i]×Phis[i+1]0\text{Phis}[i] \times \text{Phis}[i+1] \leq 0

对于每个满足条件的索引 i,记录对应的X坐标和速度:

Xnul[j]=Xhis[i]×LmX_{\text{nul}}[j] = \text{Xhis}[i] \times Lm
Vnul[j]=Vx[i]V_{\text{nul}}[j] = \text{Vx}[i]

频率计算

计算相邻零点交叉点之间的频率:

Fpsi[i]=0.0005×V0Lm×Vnul[i]Xnul[i+1]Xnul[i]F_{\text{psi}}[i] = \frac{0.0005 \times V0}{Lm} \times \frac{V_{\text{nul}}[i]}{X_{\text{nul}}[i+1] - X_{\text{nul}}[i]}

频率估计

根据零点交叉点的数量 j 判断是否成功估计频率:

  • 如果 j < 2,无法估计频率,FlagFrequency = False
  • 如果 j == 2,频率为第一个计算的频率值,mFpsi = F_{\text{psi}}[1]
  • 如果 j > 2,频率为所有计算频率值的平均值:

mFpsi=i=1j1Fpsi[i]j2mFpsi = \frac{\sum_{i=1}^{j-1} F_{\text{psi}}[i]}{j - 2}

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np

# 示例数据
V0 = 10.0 # 模型速度
Xmin = 0.0 # 分析区间的最小X值
Xmax = 10.0 # 分析区间的最大X值
Khis = 1 # 历史数据的采样间隔系数
HX = 0.1 # 计算步长
Lm = 1.0 # 模型长度
Xhis = np.linspace(0, 10, 100) # 历史数据中的X坐标数组
Phis = np.sin(Xhis) # 示例角度数据
Vx = np.ones_like(Xhis) * 10.0 # 示例速度数据

# 调用函数
mFpsi, FlagFrequency = calc_model_frequency(V0, Xmin, Xmax, Khis, HX, Lm, Xhis, Phis, Vx)

# 输出结果
if FlagFrequency:
print(f"估计的'Psi'振荡频率为: {mFpsi} KHz")
else:
print("无法估计'Psi'振荡频率")

备注

该函数假设输入的历史数据数组 XhisPhisVx 的长度相同,并且按时间顺序排列。函数通过零点交叉法估计频率,适用于周期性变化的角度数据。

1