python 如何计算采样窗口的均方根(rms)?

oyjwcjzk  于 2023-01-14  发布在  Python
关注(0)|答案(2)|浏览(203)

我有以下场景。我使用智能手机通过Edge Impulse平台从三相电机收集了一些加速度数据(accX,accY和accZ)。
在数据框中构造原始数据时,将保留以下值:values of a sample collected
绘制这些数据,我有以下子图:sampling subplots
因此,在这种情况下,我在构建包含样本均方根的向量(列表)时遇到的困难就开始发挥作用了。
我一直在尝试通过以下代码进行计算:

# calculate the average value of the accY column
media = dado['accY'].mean()

# calculate the RMS vector of the column
rms = np.sqrt(dado['accY'].apply(lambda x: (x - media)**2))

result this code in plot注意:均方根绿色线
我的顾问说,rms和媒体在accY子图中应该有以下行为:red rms and green media注:RMS红线和中绿色线。

那么你的意见是什么,代码中是否存在错误?

新的实现,我一直在开发加速度的移动均方根:

rms = (pd.DataFrame(abs(dado['accX'].values)**2).rolling(window).mean()) **0.5

有道理吗

jdzmm42g

jdzmm42g1#

RMSE是为两组值定义的,这里您使用的是一组'accY'来计算RMSE?这是不可能的,您正在计算标准偏差,即与平均值的偏差。这里是一个实现标准偏差的示例数据集。

df = pd.DataFrame({'col1': np.random.randint(low = 0,high=1000,size=100),'col2':np.random.randint(low = 0,high=120,size=100)})
aa = pd.date_range(start='1/1/2018', end='4/10/2018')
df.index = aa
df['std'] = df.rolling('5D')['col1'].std()
df = df.fillna(0)
plt.plot(df.index.values, df.col1.values)
plt.plot(df.index.values, df['std'].values)

我创建了一个5天的窗口,计算了这5天的标准差,并将其与原始值进行了标绘。

wmomyfyw

wmomyfyw2#

我成功解决了

这里n是大小为n的窗口,假设你有一个数组[1,2,3,4,5]和大小为n = 2的窗口,那么要计算每个窗口(x_i)或数组中元素的移动RMS,你应该计算x_i和数组中n-1个右移值(在这种情况下是1个右移值)的平方和。
比如说

moving RMS = √( 1/n Σ x_i^2 ), where i = i to i+n-1,

moving RMS for window 1 = np.sqrt((1/2) * np.sum([1^2, 2^2])) = 1.58

moving RMS for window 2 = np.sqrt((1/2) * np.sum([2^2, 3^2])) = 2.54

moving RMS for window 3 = np.sqrt((1/2) * np.sum([3^2, 4^2])) = 3.53

moving RMS for window 4 = np.sqrt((1/2) * np.sum([4^2, 5^2])) = 4.52

moving RMS for window 5 can not be calculated.

使用下面的代码:

for i in range(len(dado['accX'])):
  rms[i] = (i+window-1 < len(dado['accX'])) * np.sqrt( (1/window) * np.sum( dado['accX'].loc[i:i+window-1]**2 ) )

[![移动均方根][3]][3]

相关问题