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,跟上面类似:3
transcol
指定坐标变换的列在结果中是第几个,把每两个写一行构成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'
这个功能暂时没有实装,请不要指定参考数据列。