Python 用numpy平均周期信号的单个周期

Python 用numpy平均周期信号的单个周期,python,numpy,scipy,scientific-computing,Python,Numpy,Scipy,Scientific Computing,我在大学里做过一次测量。信号有很多噪声,但是周期性的 我知道信号的起始点(x=36400)以及频率(1Hz)和采样频率(48000)。所以我可以每48000点“减少”一个周期。我可以生成这样的数组[[period1]、[period2]、…、[period100]],其中每个周期都包含测量值 我现在想平均每一个周期,以得到一个噪声较小的信号。我知道如何使用for循环执行此操作,但是有没有快速的方法可以使用numpy执行此操作?首先,您需要对数组进行切片以获得有意义的部分 n_periods =

我在大学里做过一次测量。信号有很多噪声,但是周期性的

我知道信号的起始点(x=36400)以及频率(1Hz)和采样频率(48000)。所以我可以每48000点“减少”一个周期。我可以生成这样的数组
[[period1]、[period2]、…、[period100]]
,其中每个周期都包含测量值


我现在想平均每一个周期,以得到一个噪声较小的信号。我知道如何使用for循环执行此操作,但是有没有快速的方法可以使用numpy执行此操作?

首先,您需要对数组进行切片以获得有意义的部分

n_periods = 10  # or however man
beginning_idx = 1000  # or whever the good data begins

raw_signal = ...  # this is the data you read in
good_signal = raw_signal[beginning_idx:beginning_idx + n_periods * 48000]
periodic = good_signal.reshape(n_periods, 48000)
avg_signal = periodic.mean(axis=0)

没有一些样本数据很难知道,但如果周期与数组索引相称,则应该能够对其进行重塑。假设有10个周期,那么len=10*48000。您可以重塑:arr2=arr.reforme(-148000),这将为每个周期提供一行,为周期中的每个点提供一列,然后您可以使用arr2.mean(axis=0)沿行进行平均,并获得平均周期。如果数据不完全相称,你可能不得不做些别的事情。它应该与指数相称。正如你所看到的,我在信号的前面和结尾有一些平面测量。我用反复试验来切断开头。但是如果我找到了正确的开始索引,重塑(句点*48000,48000)是否有效?重塑(-148000)将适用于任何具有n个句点*48000个元素的一维数组。-1要求numpy自动处理这个问题。如果出于某种原因,你想对它进行明确的描述,那么就按照我告诉你的那样重新塑造(n_周期,48000),我的数组末尾没有信号。这只是一条直线,我不想把它加到平均数上。谢谢你应该把这个写进答案里,这样我就可以把它标记为完成了。