python筛选处理天线暗室数据,得到1. 增益随频率变化 2.指定频点E面H面的主极化,交叉极化 的数据

应用场景

从天线暗室中获取的数据一次完整测试约有44万行数据,手动筛选出需要数据较为困难。暗室中的软件可以选择需要数据进行拷贝,但是一是在暗室的时间非常宝贵(学校其他课题组资源,5元/分钟收费)二是在暗室中筛选后的数据是不完整数据,后续处理中如果发现有遗漏数据后续补数据非常麻烦。所以不如一次性拷走所有数据通过代码筛选出所需要的数据,再用origin画图。

其他说明

本代码主要考虑实用性,实现相似功能的代码重复率较高(未将重复代码抽出复用)

所需数据材料格式

从天线暗室导出的初始数据即可。格式为.csv文件(如果是.xlsx或者.xls文件另存为.csv即可)。表头如下:
在这里插入图片描述

  • 第一行的表头固定为’Frequency’ ,‘Phi’ ,‘Theta’ ,‘Gain Phi. dB’,‘Gain Theta. dB’(后续数据处理的识别中使用)
  • 本文中暗室所用数据的Phi和Theta的单位为弧度

处理数据步骤

一、Python目录结构

示例中该项目名为antenna,需要处理的初始文件(xx.csv)放在antenna下的files文件夹中

--antenna
    --files
        --xx.csv
        --xx
            --筛选后的文件.csv
    --set.py
    --selectphi0.py
    --selectphi90.py
    --selectallgain.py
    --selectfrequencyphi0.py
    --selectfrequencyphi90.py
    --selectfrequencytheta0.py
    --selectfrequencytheta90.py
    

二、设置待处理文件名和需筛选的频点的集合

"set.py"文件设置需要处理的文件名和需要被筛选的频点

#需要处理的原始文件
origincsv = 'files/xx.csv'
#需要输出的采样频点 单位:GHz
used_frequency = ['2.15','2.45','2.9','3.45','3.85']

三、分别筛选出所有phi=0 theta=0的数据和phi=90 theta=90的数据

数据初处理:分别筛选出所有phi=0和phi=90的数据,方便后续筛选出所需要频点的方向图所需数据,每次从44万行数据中筛选时间较久,故做一次初筛。
其对应的文件分别为:selectphi0.py 和 selectphi90.py

  • 需要安装pandas扩展
    selectphi0.py代码如下
import pandas as pd
import math
import os
from set import *

#初始数据表格
print(os.path.exists(origincsv))
#显示当前工作目录
originfilename = os.path.splitext(origincsv)[0]
#df = pd.concat(map(pd.read_csv,  ['wlj11.csv', 'gainphi.csv','gaintheta.csv']))
df1 = pd.read_csv(origincsv)
contents1 = [['Frequency','Phi','Theta','Gain Phi. dB']]
contents2 = [['Frequency','Phi','Theta','Gain Theta. dB']]
for index, row in df1.iterrows():
    frequency, phi, theta, gainphi, gaintheta = row['Frequency'], row['Phi'], row['Theta'], row['Gain Phi. dB'], row['Gain Theta. dB'] 
    if(phi != 0):
        print(index)
    else:
        #print(gainphi)
        contents1.append([frequency,phi,theta,gainphi])
        contents2.append([frequency,phi,theta,gaintheta])
folder = os.path.exists('./'+ originfilename)
if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹
		os.makedirs('./'+ originfilename) 
gainphi = pd.DataFrame(contents1)
gainphi.to_csv(originfilename + "/gainphi0.csv",index=False,header=False)
gaintheta = pd.DataFrame(contents2)
gaintheta.to_csv(originfilename + "/gaintheta0.csv", index=False,header=False)

phi90与phi0代码相似。上述代码中的if判断改为:

if(round(phi,2) != 1.57):
        print(index)
  • 90度对应的弧度值为1.57

四、筛选出增益随频率变化曲线所需的数据

  • 默认所需增益数据为phi=0和theta=0。其他需要数据可以按照自己需求做更改。
    对应文件为:selectallgain.py
import pandas as pd
import math
import os
from set import *

#初始数据表格

print(os.path.exists(origincsv))
#显示当前工作目录
#print("current working directory",os.getcwd())
originfilename = os.path.splitext(origincsv)[0]
df1 = pd.read_csv(origincsv)
contents = [['Frequency','Phi','Theta','Gain Theta. dB']]
for index, row in df1.iterrows():
    frequency, phi, theta, gainphi, gaintheta = row['Frequency'], row['Phi'], row['Theta'], row['Gain Phi. dB'], row['Gain Theta. dB'] 
    if(phi == 0 and int(math.degrees(theta)) == 0 ):
        contents.append([frequency,phi,theta,gaintheta])
    else:
        print(index)
folder = os.path.exists('./'+ originfilename)
if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹
		os.makedirs('./'+ originfilename) 
gaintheta = pd.DataFrame(contents)
gaintheta.to_csv(originfilename + "/allgain.csv", index=False,header=False)

五、筛选所需频点方向图需要数据

  • 需要被筛选的频点配置在set.py
    对应文件为:
    --selectfrequencyphi0.py
    --selectfrequencyphi90.py
    --selectfrequencytheta0.py
    --selectfrequencytheta90.py

代码相似,筛选条件不同。以selectfrequencyphi0.py为例:


import pandas as pd
import math
import os
import numpy as np
from set import *

#初始数据表格
#origincsv = 'files/w12.csv'

#显示当前工作目录
#print("current working directory",os.getcwd())

originfilename = os.path.splitext(origincsv)[0]
dealcsv = originfilename+ "/gainphi0.csv"
print(os.path.exists(originfilename+ "/gainphi0.csv"))
print(used_frequency)
#df = pd.concat(map(pd.read_csv,  ['wlj11.csv', 'gainphi.csv','gaintheta.csv']))
df1 = pd.read_csv(dealcsv)
contents1 = [['Frequency','Phi','Theta','Gain Phi. dB']]

#判断是否存在文件夹如果不存在则创建为文件夹
folder = os.path.exists('./'+ originfilename)
if not folder:                   
		os.makedirs('./'+ originfilename) 

for item in used_frequency:
    itemdata = []
    for index, row in df1.iterrows():
        frequency, phi, theta, gainphi = row['Frequency'], row['Phi'], row['Theta'], row['Gain Phi. dB']
        dealfre = frequency/10E8
        if(str(dealfre) == item):
            itemdata.append([frequency,phi,theta,gainphi])
        else:
            print(dealfre)
    #print(itemdata)
    #sys.exit()
    gain_data = pd.DataFrame(itemdata)
    gain_data.to_csv(originfilename + "/"+ item + "gainphi0.csv",index=False,header=['Frequency','Phi','Theta','Gain Phi. dB'])
    

该筛选数据对应的论文中的频点方向图为这种:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值