同步来自不同来源的多个信号。

Jointl的Python项目详细描述


联合:信号同步器

同步过程

为了使两个信号源相互同步,它们需要在两个共同的时间点上同时记录一个具有特征信号的信号。这可能是加速度计的大小,例如,如果多个设备一起震动。

选择公共段

脚本可以使用ShakeExtractor自动检测显著的震动。这是通过检测特定threshold上的峰值来完成的。如果两个峰值之间的距离不超过指定的distance(以毫秒为单位),则它们将合并到序列中。小于min_length峰的序列被过滤掉。在第二步中,从信号的开始和结束开始到结束的时间不在window秒内开始或结束的序列被过滤。从这些过滤序列中,选择具有最高权重(序列的平均值+中值)的序列作为对应的片段。

计算时移

为了补偿不同源的系统时间差异,将计算使所选段彼此同步的时间偏移。为了自动计算两个信号之间的时移,计算每个段与参考信号的互相关。信号被移位,使得所选择的段之间的相关性最大化。

调整频率

由于时钟漂移表示时钟没有以与指定参考时钟完全相同的频率运行,因此可以在一个时间点同步的信号会随着时间的推移逐渐失去同步。为了补偿这种影响,计算了拉伸因子,使得基于第一和第二段的同步的时间偏移之间的差分别为零。拉伸信号后,必须再次计算校准信号的时移。

示例

同步数据

数据必须用pandasDataFrameDateTimeIndex提供。

importjointlysources={'Faros':{'data':faros.data,'ref_column':'acc_mag',},'Empatica':{'data':empatica.data,'ref_column':'acc_mag',},'Everion':{'data':everion.data,'ref_column':'acc_mag',}}ref_source_name='Empatica'extractor=jointly.ShakeExtractor()synchronizer=jointly.Synchronizer(sources,ref_source_name,extractor)synced_data=synchronizer.get_synced_data()

保存数据

要定义应该保存的表,请创建字典。根级别的每个键都定义了相应文件的名称。第二级的字典为每个源定义一个列列表,这些列应该保存在此文件中。save_data()方法还将自动将来自所有源的所有数据保存在名为TOTAL.csv的文件中。这可以通过添加参数save_total_table = False来停用。

tables={'ACC':{'Faros':['Accelerometer_X','Accelerometer_Y','Accelerometer_Z'],'Empatica':['acc_x','acc_y','acc_z'],'Everion':['accx_data','accy_data','accz_data'],},'PPG':{'Empatica':['bvp'],'Everion':['blood_pulse_wave','led2_data','led3_data'],},'EDA':{'Empatica':['eda'],'Everion':['gsr_electrode'],},'ECG':{'Faros':['ECG'],},'TEMP':{'Empatica':['temp'],'Everion':['temperature_object'],},'HR':{'Empatica':['hr'],'Everion':['heart_rate','heart_rate_quality'],},'IBI':{'Faros':['HRV'],'Empatica':['ibi'],'Everion':['inter_pulse_interval','inter_pulse_interval_deviation'],}}synchronizer.save_data(sync_dir_path,tables=tables)

日志记录

要激活日志记录,只需在代码中添加以下行:

fromjointly.logimportloggerlogger.setLevel(10)

这将使您深入了解震动检测、时移和拉伸因子的计算以及分段的输出图。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java IntelliJ找不到依赖项选项卡   java向字符串数组string[]添加元素并在Junit中测试结果   如何在eclipse中获取活动java项目的名称   如何使用java在mysql中插入时间   java ArrayList更新了插入一行,但Jtable仍然没有刷新   如何在JavaSwing中命名坐标(点)   java Matcher/模式不打印   java错误地设置了arraylist   使用UsernamePasswordCredential提供程序的java列表Azure AD   java在HTTP请求中设置UTC时间   未加载事件:jquery完整日历Java集成   java Maven插件依赖项无法从内部repo解析依赖项   Maven更新重置Java版本   java如何向中添加图片。带有Apache POI XWPF的docx,但不指定其大小   Java最大函数递归