An open API service indexing awesome lists of open source software.

https://github.com/cfrpg/nickelbirddataprocessor


https://github.com/cfrpg/nickelbirddataprocessor

Last synced: 4 days ago
JSON representation

Awesome Lists containing this project

README

          

# NickelBirdDataProcessor

[NickelBird](https://github.com/cfrpg/NickelBird)系列实验数据采集系统数据处理脚本合集。

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

## 使用方法和注意事项

### 实验中

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

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

假设试验中采集`Fx`,`Fy`,`Fz`,`Mx`,`My`,`Mz`,且都设置了滤波,但这些数据前后都有若干列辅助数据。

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

### 批量处理

#### 自动生成校准文件

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

#### 手动生成校准文件

首先使用`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`返回文件中数据的频率,若为非周期性数据则返回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'`

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