cfrpg / NickelBirdDataProcessor

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NickelBirdDataProcessor

NickelBird系列实验数据采集系统数据处理脚本合集。

由于某些函数的兼容性问题,请使用R2016b及以后的版本。

使用方法和注意事项

实验中

  • 设定好tag,如需校准和坐标变换,tag中必须包含单位为deg的迎角
  • tag设好就不要换顺序了
  • 首先采集一组不同迎角下的无风静态数据,单独保存用于校准,每个迎角保存一个文件
  • 正常进行实验数据采集操作
  • 记录的数据可以不一样,但批处理用到的数据必须每个文件里都有记录

假设tag分别设定为 模型空速迎角油门

假设试验中采集FxFyFzMxMyMz,且都设置了滤波,但这些数据前后都有若干列辅助数据。

假设数据保存在\WindTunnel文件夹,校准数据位于\WindTunnel\cali子文件夹。

批量处理

自动生成校准文件

如果生成校准文件使用的数据位于数据文件夹的一个子文件夹中,如本例中校准数据位于\cali文件夹,则可以使用NBAuto自动生成校准文件,参考这里

手动生成校准文件

首先使用NBProcessCaliFile(dirpath,cols,alpha)生成校准文件。

  • dirpath指定数据所在的目录:'\WindTunnel\cali'
  • cols指定需要校准的列,通常只有纵向数据会受俯仰角变化影响,即:{'Fx_LPF','Fz_LPF','My_LPF'}
  • alpha指定迎角是第几个tag,从1开始数:3

运行

NBProcessCaliFile('\WindTunnel\cali',{'Fx_LPF','Fz_LPF','My_LPF'},3)

得到校准文件\WindTunnel\cali\rescali.csv

批处理实验数据文件

使用NBAuto(dirpath,cols,p[,alpha,transcol,califile,calicol])自动处理一个文件夹中的数据

  • dirpath指定数据所在的目录,子目录会被忽略:'\WindTunnel'
  • cols指定要处理的列:{'Fx_LPF','Fy_LPF','Fz_LPF','Mx_LPF','My_LPF','Mz_LPF'}
  • p指定是否是周期性信号,如果全都不是周期性信号则设置为0,有周期性信号则设置为1,脚本会试图识别出其中的非周期性信号

如果不用坐标变换和校准就不要输后面的参数了,直接运行

NBAuto('\WindTunnel',{'Fx_LPF','Fy_LPF','Fz_LPF','Mx_LPF','My_LPF','Mz_LPF'},1)

如果要坐标变换的话

  • alpha指定迎角是第几个tag,跟上面类似:3
  • transcol指定坐标变换的列在结果中是第几个,把每两个写一行构成n*2的矩阵,这里变换Fx,FzMx,Mz[1,3;4,6]

如果不需要校准就不要输后面的参数了,直接运行

NBAuto('\WindTunnel',{'Fx_LPF','Fy_LPF','Fz_LPF','Mx_LPF','My_LPF','Mz_LPF'},1,3,[1,3;4,6])

如果要手动指定校准文件进行校准的话

  • califile指定校准文件,用前一步生成的:'\WindTunnel\cali\rescali.csv'

直接运行

NBAuto('\WindTunnel',{'Fx_LPF','Fy_LPF','Fz_LPF','Mx_LPF','My_LPF','Mz_LPF'},1,3,[1,3;4,6],'\WindTunnel\cali\rescali.csv')

如果要自动生成校准文件的话

  • califile指定校准数据子目录名,前面加[auto]标记:'[auto]cali'
  • calicol指定要校准的列,与手动生成校准文件中的cols相同:{'Fx_LPF','Fz_LPF','My_LPF'}

直接运行

NBAuto('\WindTunnel',{'Fx_LPF','Fy_LPF','Fz_LPF','Mx_LPF','My_LPF','Mz_LPF'},1,3,[1,3;4,6],'[auto]cali',{'Fx_LPF','Fz_LPF','My_LPF'})

脚本会处理所有csv文件,但会跳过开头是res的文件,最终生成res.csv

处理单个文件

使用[header,data,freq,ps]=NBLoadFile(path,cols,p)载入文件

  • path指定文件路径
  • cols指定需要处理的列,与批处理相同
  • p指定是否是周期性数据,与批处理相同
  • header返回被处理的列的表头
  • data返回每一列的平均值或周期平均值
  • freq返回文件中数据的频率,若为非周期性数据则返回0
  • ps返回每一列中的平均周期,每一行为一列的平均周期

注意处理单个文件时不会自动进行坐标变换和校准,也不会画出曲线图,需要手动进行后续处理。

高级功能

列号和表头

指定列时可以使用列号或表头,假设Fx,Fy,Fz分别是第12,15,18列,则传递cols参数时以下两种方式等价

  • 使用列号:[12,15,18]
  • 使用表头:{'Fx','Fy','Fz'}

脚本会在处理每一个文件时分别将表头翻译成列号,对于表头固定但列号不固定的数据集推荐使用表头指定。

触发器

对于周期性数据,如果其中一列数据全为0,但在每个周期开始时有一个数据是1,则可以将这一列设定为触发器列。 脚本将根据触发器列中1的位置划分数据的周期。

假设触发器列为第10列,表头为Trig,可以使用以下方式指定触发器列:

  • 使用列号:负列号表示这一列是触发器列:-10
  • 使用表头:名称前加*表示这一列是触发器列:'*Trig'

触发器列不会被处理,也不会输出在结果文件中,在使用坐标变换指定要变换的列号时要注意跳过触发器列。

一个数据中只能指定一个触发器列,若指定了多个触发器列,这些数据都不会被处理,只有最后一个触发器标识生效。

参考数据

对于周期性数据,可以指定一列数据作为参考,其他列数据将根据参考数据划分出与参考数据相同的周期。

假设触发器列为第10列,表头为Ref,可以使用以下方式指定参考数据列:

  • 使用列号:列号+10000表示这一列是参考数据列:10010
  • 使用表头:名称前加#表示这一列是参考数据列:'#Ref'

这个功能暂时没有实装,请不要指定参考数据列。

About

License:MIT License


Languages

Language:MATLAB 99.2%Language:M 0.8%