Python 下采样(时间、振幅)波形

Python 下采样(时间、振幅)波形,python,python-3.x,numpy,scipy,Python,Python 3.x,Numpy,Scipy,我正在尝试对.csv文件中描述为时间、振幅的数百万波形进行下采样: .csv文件示例 0.000e+00 0.000e+00 1.000e-12 7.052e-09 2.000e-12 2.253e-05 3.000e-12 5.915e-04 4.000e-12 2.229e-03 5.000e-12 3.059e-03 6.000e-12 3.467e-03 8.000e-12 4.035e-03 1.100e-11 4.172e-03 1.500e-11 5.274e-03 1.700e-

我正在尝试对.csv文件中描述为时间、振幅的数百万波形进行下采样:

.csv文件示例
0.000e+00 0.000e+00
1.000e-12 7.052e-09
2.000e-12 2.253e-05
3.000e-12 5.915e-04
4.000e-12 2.229e-03
5.000e-12 3.059e-03
6.000e-12 3.467e-03
8.000e-12 4.035e-03
1.100e-11 4.172e-03
1.500e-11 5.274e-03
1.700e-11 9.348e-03
1.800e-11 1.464e-02
1.900e-11 2.236e-02
2.200e-11 4.992e-02
3.100e-11 1.337e-01
4.000e-11 1.997e-01
4.400e-11 2.133e-01
4.700e-11 2.163e-01
5.100e-11 2.190e-01
5.400e-11 2.202e-01
6.000e-11 2.288e-01
6.700e-11 2.703e-01
7.100e-11 3.152e-01
7.400e-11 3.514e-01
8.200e-11 4.578e-01
8.900e-11 5.702e-01
9.500e-11 6.724e-01
1.000e-10 7.499e-01
1.060e-10 8.225e-01
1.140e-10 8.912e-01
1.250e-10 9.414e-01
1.460e-10 9.801e-01
2.000e-10 9.972e-01
4.710e-10 9.997e-01
1.401e-09 1.000e+00
2.175e-09 1.000e+00
2.180e-09 9.999e-01
2.189e-09 9.999e-01
2.199e-09 9.999e-01
2.208e-09 9.999e-01
2.214e-09 9.999e-01
2.228e-09 9.999e-01
2.247e-09 9.999e-01
4.169e-09 1.000e+00
8.058e-09 1.000e+00
8.062e-09 1.000e+00
8.063e-09 9.923e-01
8.064e-09 9.573e-01
8.066e-09 8.743e-01
8.068e-09 7.772e-01
8.070e-09 6.769e-01
8.071e-09 6.253e-01
8.072e-09 5.734e-01
8.073e-09 5.210e-01
8.074e-09 4.695e-01
8.075e-09 4.198e-01
8.077e-09 3.328e-01
8.079e-09 2.571e-01
8.081e-09 1.982e-01
8.084e-09 1.341e-01
8.088e-09 8.178e-02
8.095e-093.922e-02
8.111e-09 1.167e-02
8.165e-09 1.574e-03
8.375e-09 2.750e-04
8.792e-09 4.565e-05
1.115e-08 1.574e-05
2.753e-08 1.574e-05
3.000e-08 1.123e-05
Python代码 如果我打印.csv文件,它会给出:

导入csv
将matplotlib.pyplot作为plt导入
从scipy输入信号
打开(csv_文件,'r')作为f_读取:
csv\u reader=csv.reader(f\u read,delimiter=\u delimiter)
时间_ori,振幅_ori=[[x中i的浮点值(i)]对于zip中的x(*csv_读取器)]
plt.绘图(时间,振幅,'-o')
plt.show()

问题 我的目标是减少波形中的点数。不幸的是,时间步长不是恒定的,所以我尝试使用
reduced=signal.decimate(振幅,2)
,它确实减少了点数。但是,我不知道如何删除与已删除振幅值相关的
时间
值。
decimate()
能否返回已删除元素的索引?我不能比较,因为有时候振幅是一样的

我愿意接受其他建议。我使用了decimate(),因为它似乎适合我的情况

编辑: 时间精度可能因波形而异,因此我无法定义最小时间步长的阈值

import numpy as np

x = np.loadtxt('read.csv')
x = np.sort(x)
threshold = 1e-5
keep = abs(np.diff(x[:,1])) > threshold
keep = np.hstack(([True],keep))
out = [x[i] for i in range(len(x)) if keep[i]]
out = np.array(out)

将“阈值”设置为两点之间所需的最小时差

您只是想减少采样日期“每n个采样中取一个”还是想减少采样时间戳?在这种情况下,我想删除时间几乎相同的点(x轴)。对于
振幅
(y轴),当
振幅=0.0
时,数据已经相当粗糙。示例:在我的例子中,没有必要让所有靠近
t=0.0
的点来描述曲线的上升沿,也没有必要让靠近
0.81e-08
的点来描述下降沿。当然,如果我能减小y轴,那就最好了。理想情况下,此曲线将有5对点。Thx。问题是,时间精度可能因ps和us而异,因此在这种情况下,我无法定义阈值。那么,您的采样标准是什么?你想保留原始样本还是在同一条曲线上有值?在这种情况下,我想删除几乎具有相同时间(x轴)的点。对于振幅(y轴),数据已经相当粗糙,如振幅=0.0时的点所示。示例:在我的例子中,没有必要让t=0.0附近的所有点来描述曲线的上升沿,也没有必要让0.81e-08附近的点来描述下降沿。当然,如果我能减小y轴,那就最好了。理想情况下,此曲线将有5对点。我不在乎原始值。我将重写.csv文件以节省磁盘空间。关于原始值。我不理解你的问题。是的,我需要保留原始值,即使波形减少到5对点,这5对是5个原始值。我编辑了代码,所以阈值现在沿y值。这意味着,如果两个conceptive y值是两个相近的值“类似于零附近的值”,则将删除该值