1*b7c941bbSAndroid Build Coastguard Worker# Copyright 2024 The Android Open Source Project 2*b7c941bbSAndroid Build Coastguard Worker# 3*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*b7c941bbSAndroid Build Coastguard Worker# 7*b7c941bbSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*b7c941bbSAndroid Build Coastguard Worker# 9*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*b7c941bbSAndroid Build Coastguard Worker# limitations under the License. 14*b7c941bbSAndroid Build Coastguard Worker"""Utility functions for IMU data processing.""" 15*b7c941bbSAndroid Build Coastguard Worker 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Workerdef calc_rv_drift(data): 18*b7c941bbSAndroid Build Coastguard Worker """Calculate data drift accounting for +/-180 degrees for stationary DUT. 19*b7c941bbSAndroid Build Coastguard Worker 20*b7c941bbSAndroid Build Coastguard Worker Args: 21*b7c941bbSAndroid Build Coastguard Worker data: list of +180/-180 rotation vector data 22*b7c941bbSAndroid Build Coastguard Worker 23*b7c941bbSAndroid Build Coastguard Worker Returns: 24*b7c941bbSAndroid Build Coastguard Worker list of data-data[0] drift 25*b7c941bbSAndroid Build Coastguard Worker """ 26*b7c941bbSAndroid Build Coastguard Worker data_360 = [i % 360 for i in data] 27*b7c941bbSAndroid Build Coastguard Worker drift = [] 28*b7c941bbSAndroid Build Coastguard Worker for d in data_360: 29*b7c941bbSAndroid Build Coastguard Worker if d - data_360[0] <= -180: 30*b7c941bbSAndroid Build Coastguard Worker drift.append(d - data_360[0] + 360) 31*b7c941bbSAndroid Build Coastguard Worker elif d - data_360[0] > 180: 32*b7c941bbSAndroid Build Coastguard Worker drift.append(d - data_360[0] - 360) 33*b7c941bbSAndroid Build Coastguard Worker else: 34*b7c941bbSAndroid Build Coastguard Worker drift.append(d - data_360[0]) 35*b7c941bbSAndroid Build Coastguard Worker return drift 36