由于float64值不正确,将倍频程代码转换为python/pandas时出现错误的信号处理问题

2024-09-30 06:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我并没有找到所有关于我的问题的答案,或者每个问题都只是其中的一部分。经过几天的努力,我决定发一个问题

我在做生物力学研究,包括计算踢的最大速度。每个文件中捕获了三个kick(简单地查找最大值是行不通的)。我需要找出那些踢腿的最大值。在一些帮助下,我设法用matlab/octave实现了这一点,但为了将来的工作,我决定继续使用python进行数据处理

关键是我有一个特定标记的时间,x,y,z数据,我需要计算每个注册帧的速度,并从每次踢中选取最大速度

这是一个八度的代码:

pkg load signal

txyz=importdata('295ltoe.txt',',',8); % read the text file 
txyz=txyz.data; % all data in array time,x,y,z 
dxyz=diff(txyz); % first differences of all columns 
vxyz=dxyz(:,2:end)./dxyz(:,1)/1000; % compute velocity components 
v=sqrt(sum(vxyz.^2,2)); % and the total velocity 

[pks,locs]=findpeaks(v,'minpeakheight',6 ) 

我尝试用以下代码将其转换为熊猫:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
data1 = pd.read_csv("B0264_dollyo_air_P_T01 rtoe.txt") #examle of txt 
imported from c3d file

df = data1.diff()
dfx = (df['X'] /1000) / df['T']
dfy = (df['Y'] /1000) / df['T']
dfz = (df['Z'] /1000) / df['T']
dfx1 = dfx**2
dfy1 = dfy**2
dfz1 = dfz**2
v = (dfx1 + dfy1 + dfz1)**1/2
peaks, _ = find_peaks(v, height=6)
plt.plot(v)
plt.plot(peaks, v[peaks], "x")
plt.show()

问题是速度的值是这样的:

0                NaN
1       6.450000e-07
2       8.237500e-07
3       1.159062e-06
4       1.250312e-06
5       1.657500e-06

不是正常的正确值,它给我的值超过60。我附加的绘图,我收到与excel正确polot(excel计算是耗时的,因为不断的复制粘贴)

enter image description hereenter image description here

我的总目标是得到3个最大峰值和3个最小峰值来计算井涌执行时间,但我不知道如何获得它

要知道,如果有人愿意帮助我,我可以提供我用过的文件


Tags: 文件the代码importtxtdfreadsignal

热门问题