过滤由投诉元件引入的谐波干扰

2024-05-23 17:48:39 发布

您现在位置:Python中文网/ 问答频道 /正文

TL;DR我想从theta_2找到下面系统中的theta_1,而不知道其他参数。你知道吗

this question之后,我对下面的系统进行了建模

使用Modelica语言并通过OpenModelica生成CSV文件解决:

"time", "theta1", "theta2"
     0,        0,        0
  0.02, -6.40192, -7.79226
  0.04, -12.8038, -12.1422
  0.06, -19.2058, -18.1304
  0.08, -25.6077, -26.7809

您可以找到Modelica代码和CSVhere in this GitHub Gist。我想做的是过滤theta_2得到theta_1,而不知道tautheta_1、兼容元素k和角惯性J的采样率。我推测旋转弹簧会在角度数据的频域频谱中留下一个可分辨的足迹theta_2。你知道吗

到目前为止我所做的:

  1. 将数据作为数据帧导入:
import pandas as pd
df = pd.read_csv("exportedVariables.csv")
df.head()
  1. 绘制数据:
import matplotlib.pyplot as plt
plt.plot(df["time"], df["theta2"], df["time"], df["theta1"])
plt.xlabel("Time (sec)")
plt.ylabel("Angle (deg)")
  1. 计算theta_2数据的快速傅里叶变换(FFT):
import numpy as np
from scipy.fftpack import fft

theta2_scipy_fft = fft(df["theta2"])

N = len(df.index)
time = df["time"].values
dt = np.mean(np.diff(time))

frequency = np.linspace(0.0, 1.0 / (2.0 * dt), N // 2)

plt.plot(frequency, 2.0 / N * np.abs(theta2_scipy_fft[0: N // 2]))
plt.xscale("log")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude (dB)")

然而,我在这里看到的是,光谱图中的前两个主要振幅实际上是采样率,通过采样率生成tauomega_1的随机值,我找不到我要找的那一个。所以我不知道如何从这里开始。如果您能帮助我知道是否有可能在不知道系统和如何实现的情况下过滤掉由旋转弹簧引起的干扰,我将不胜感激。你知道吗


Tags: 数据importfftdftime系统asnp