我有一个关于一个点的距离和角度的信号强度数据样本列表。数据样本如下所示:
0.5,0,-21
0.5,0,-23
1.0,0,-29
1.0,0,-30
0.5,45,-22
0.5,45,-23
其中数据组织半径、角度、rssi(信号强度)。
如您所见,我对信号强度进行了多次测量,但是有些具有共同的半径,而另一些具有共同的角度。我试图找到一种简单的方法来遍历列表,找到所有具有共同半径和角度的行,平均 rssi 并将半径、角度和平均 rssi 附加到新列表中。
我试图这样做的方式是:
import numpy as np
import math
#create 3 lists
original_data=[] # list to import the original data to
interim_data=[] # list to group rows with common radii and angles
R=[]
P=[]
Z=[]
#import data
original_data=np.genfromtxt('bot1.csv', delimiter=',')
#convert rssi to linear
for b in original_data:
b[2]=math.pow(10,b[2]/10)
for item in original_data:
if item[0] and item[1] not in R and P: #check if the common r and theta have been searched for already
for a in original_data:
if a[0] == item[0] and a[1] == item[1]:
interim_data.append(a)
#Once all rows in orginal data have been checked, average the result in interim data and place in averaged lists R, P and Z
Z.append(10*math.log10(sum(interim_data[3])/len(interim_data)))
R.append(item[0])
P.append(item[1])
但是,当我运行此代码 Z 时,R 和 P 仍然为空。我尝试了一些带有更多 for 循环的变体,但我想知道是否有更简单的方法来做我想做的事情。
我在转换为线性值 = 10^(rssi dBm 值/10) 时也遇到了问题,我似乎无法让索引工作。
b[2]=math.pow(10,b[2]/10)
影响 b 中的所有列表,而不仅仅是 b[2]。有谁知道这是为什么?