【发布时间】:2018-05-26 14:19:01
【问题描述】:
假设我有一个这样的信号。我已经对其进行了几轮拟合,现在我可以更轻松地管理信号了。
但无论出于何种原因,我似乎无法消除一些微小的差异。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
a = [0.5]*20
b = [0.4]*20
c = [0.503]*20
d = [0.4]*20
signal = pd.Series(np.concatenate([a,b,c,d]))
plt.figure(figsize = (7,3))
plt.plot(signal, color = "firebrick")
plt.axhline(0.5, linestyle = ":")
plt.show()
# Identify the four different intensities, so they can be grouped
id = signal.transform(lambda x: (abs(x.diff()) > 0).cumsum())
我认为解决方案可能是将所有信号从低到高排列
[0.4, 0.4, 0.5, 0.503]
然后遍历它们,同时忽略微小的差异,例如0.010,所以
id = signal.transform(lambda x: (abs(x.diff()) > 0.010).cumsum())
然后我会正确识别只有 2 种不同的强度。对于微小的差异,我可以取平均值或中位数。这并没有什么不同。重要的是我不计算超过 2 种不同的强度。
我该怎么做?
【问题讨论】:
-
不清楚你在问什么。你的问题是什么?你想要的输出是什么?
-
@pault 基本上我想纠正拟合的过冲,以便 0.503 和 0.5 的均值对齐到相同的值(均值、中值、最小,无关紧要),在与原始数据相同的索引。这有意义吗?
-
对系列进行阈值处理怎么样?例如,按平均值设置阈值并计算大于平均值和小于平均值的值的中值:
med_high = signal[signal > signal.mean()].median()和med_low = signal[signal < signal.mean()].median()
标签: python python-3.x signal-processing