我有雷达数据的车辆走得更远,雷达输出一个.csv文件。一旦雷达检测到什么,振幅列就从0切换到1,并开始输出值,并绘制横幅。例如,在这里:
当距离/振幅列从0到某个数时,可以推断雷达已经看到了目标。因此,绘制第一个实例的行会发出这个蓝波。
如果我们画出它下面的几行,我们得到了这个,
雷达被放在后面,所以目标离它很远。X轴表示距离乘以.077 m,因此,对于第一个蓝色波,雷达记录的距离为37*.077m。我想知道是否有一种方法可以从.csv文件中得到一个范围的值来考虑这两个峰值,例如:我想知道如何从蓝波中得到前两个峰值,得到它们的x轴坐标,然后为它们得到一个中值点,并跟踪它的橙色,这是第一列之下的第二行。
我已经附上了下面的.csv文件。https://drive.google.com/file/d/1IJOebiXuScjLPytemulcXph7ZB1X65wU/view?usp=sharing
我有一个算法,它获取第一次命中和最后一次命中的索引,例如,当从0切换到值和从值切换到0时,这些算法允许我在雷达检测到目标时捕捉到。当我使用雷达直接给出的值时,这是很有帮助的,比如距离和振幅值,但是现在我需要一整行,我不知道如何处理。我不知道Pandas或Numpy是否有办法处理这件事
发布于 2022-04-04 22:38:20
有几种方法可以得到峰值,从而得到两个峰值位置。获取数据集的导数。导数数据与x轴相交的点将是原始数据的峰值和低谷。在这样做的同时,你也可以获取那些高峰和山谷的指数。从这里,您可以迭代原始数据中的这些点,以获得两个最大值及其索引。
看起来会是这样的:
import matplotlib.pyplot as plt
import numpy as np
# My data set (example is a crazy cosine wave)
x = np.linspace(1, 100, 1000)
y = np.cos(x*0.5)*((x - 50)**3)
# Find first derivative:
m = np.diff(y)/np.diff(x)
# Get indicies of peaks and valleys
c = len(m)
indices = []
for i in range(1, c):
prev_val = m[i-1]
val = m[i]
if prev_val < 0 and val >= 0:
indices.append(i)
elif prev_val > 0 and val <= 0:
indices.append(i)
# Get the values, positions, and indicies of the two peaks
max_list = [0, 0]
index_list = [0, 0]
pos_list = [0, 0]
for index in indices:
val = y[index]
if val > max_list[0]:
max_list[0] = val
index_list[0] = index
pos_list[0] = x[index]
elif val > max_list[1]:
max_list[1] = val
index_list[1] = index
pos_list[1] = x[index]
print('Two peak indices:', index_list)
print('Two peak values:', max_list)
print('Two peak x-positions:', pos_list)
average_pos = (pos_list[0] + pos_list[1])/2
print('Average x-position:', average_pos)
plt.plot(x, y)
plt.show()
https://stackoverflow.com/questions/71744198
复制相似问题