NickelBird系列实验数据采集系统数据处理脚本合集。
由于某些函数的兼容性问题,请使用R2016b及以后的版本。
- 设定好tag,如需校准和坐标变换,tag中必须包含单位为deg的迎角
- tag设好就不要换顺序了
- 首先采集一组不同迎角下的无风静态数据,单独保存用于校准,每个迎角保存一个文件
- 正常进行实验数据采集操作
- 记录的数据可以不一样,但批处理用到的数据必须每个文件里都有记录
假设tag分别设定为 模型,空速,迎角,油门。
假设试验中采集Fx,Fy,Fz,Mx,My,Mz,且都设置了滤波,但这些数据前后都有若干列辅助数据。
假设数据保存在\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,跟上面类似:3transcol指定坐标变换的列在结果中是第几个,把每两个写一行构成n*2的矩阵,这里变换Fx,Fz和Mx,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返回文件中数据的频率,若为非周期性数据则返回0ps返回每一列中的平均周期,每一行为一列的平均周期
注意处理单个文件时不会自动进行坐标变换和校准,也不会画出曲线图,需要手动进行后续处理。
指定列时可以使用列号或表头,假设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'
这个功能暂时没有实装,请不要指定参考数据列。