• 基于miu小波变换的人体步态数据检测和识别算法matlab仿真


    目录

    一、理论基础

    3.2.1加速度计

    3.2.2陀螺仪  

    3.3基于IMU设备的人体步态数据的采集

    二、MATLAB仿真程序

    三、仿真结果


    一、理论基础

          在进行数据采集的过程中,需要根据实际情况选择合适的采集设备,现有的采集设备一般都是由多个传感器模块、显示模块、电源模块以及通信模块构成。在本课题中,我们选择了BWT61CL无线蓝牙版带电池陀螺仪姿态传感器作为本文的数据采集设备。该设备的主要参数指标如下表所示:

    表1陀螺仪姿态传感器参数指标

    参数名称

    参数值

    1

    电压

    3.3V~5V

    2

    电流

    <10mA

    3

    尺寸

    51.3mm*36mm*15mm

    4

    测量精度

    0.05

    5

    量程

    加速度16g,角速度2000度/s,角度180度

    6

    分辨率

    加速度6.1e-5g,角速度7.6e-3度/s

    7

    测量维度

    三维

    8

    输出频率

    100Hz

            BWT61CL姿态传感器其主要构架包括了传感器模块、信号处理单元、信号收发接口等模块,其具有低功耗、低成本、轻便等优势[19]。该设备广泛应用于手机,GPS导航、计步器以及智能儿童手表等电子产品中,下面对该IMU设备的各个模块进行介绍。

    3.2.1加速度计

        加速度计是BWT61CL姿态传感器的一个重要组成部分,其属于惯性传感器的一种,通过加速度计可以采集人体的加速度信息,包括x轴加速度,y轴加速度以及z轴加速度。当人体在行走或者奔跑过程中,其加速度将表现为周期性的波动,那么通过加速度计则可以实时监测这种周期性变化,并根据这种周期特征来计算人体的步态和步伐数量。当人体处于静止状态或者匀速状态,此时加速度计只有垂直方向有数据,且近似为重力加速度。

    3.2.2陀螺仪  

        陀螺仪同样是BWT61CL姿态传感器的一个重要组成部分,通过陀螺仪可以实时监测出人体在行走过程中的角速度。BWT61CL中的陀螺仪,其转轴方向将不随着支架的转动而变化,当设备收到外部角度变化的时候,其上下金属之间的电容会发生变化,根据电压值的改变大小来判断角度的变化大小。

    3.3基于IMU设备的人体步态数据的采集

        数据采集环节是人体步行识别和步伐统计研究的第一环节,在本课题中,我们主要通过BWT61CL姿态传感器进行采集行人的xyz三个方向的加速度,xyz三个方向的角速度以及xyz三个方向的角度(如图3.1所示),为课题的研究提供最原始的分析数据。

    图1数据采集示意图

        通过采集得到的数据主要包括人体沿着x轴、y轴、z轴的加速度,即ax,ay,az;沿着x轴、y轴、z轴的姿态角,即横滚角anglex,俯仰角angley,偏航角anglez,沿着x轴、y轴、z轴的角速度,即wx,wy,wz;一共九组特征数据。由图3.1可知,横滚角以x轴作为旋转轴,俯仰角以y轴作为旋转轴,航偏角以z轴为旋转轴。通过IMU设备对数据进行实时的采集,可以记录行人不同的行走状态。最终采集的数据结构如下所示:

    图2数据样本图

    二、MATLAB仿真程序

    1. clc;
    2. clear;
    3. close all;
    4. warning off;
    5. sel = 2;
    6. load R1.mat
    7. [locsy1,indxy1]=func_peak(ay1);
    8. [locsz1,indxz1]=func_peak(az1);
    9. [locsy2,indxy2]=func_peak(ay2);
    10. [locsz2,indxz2]=func_peak(az2);
    11. [locsy3,indxy3]=func_peak(ay3);
    12. [locsz3,indxz3]=func_peak(az3);
    13. if sel == 1
    14. figure;
    15. subplot(211);
    16. plot(Timesa,ay1,'b');
    17. hold on
    18. plot(Timesa(locsy1),ay1(locsy1),'ro');
    19. hold on
    20. plot(Timesa(indxy1),ay1(indxy1),'k*');
    21. hold on
    22. stem(Timesa(locsy1),ay1(locsy1),'ro')
    23. xlabel('time');
    24. ylabel('ay');
    25. subplot(212);
    26. plot(Timesa,az1,'b');;
    27. hold on
    28. plot(Timesa(locsz1),az1(locsz1),'ro');
    29. hold on
    30. plot(Timesa(indxz1),az1(indxz1),'k*');
    31. hold on
    32. stem(Timesa(locsz1),az1(locsz1),'ro')
    33. xlabel('time');
    34. ylabel('az');
    35. Tay1 =[Timesa(locsy1)]';
    36. Tby1 =[Timesa(indxy1)]';
    37. Ay1 =[ay1(locsy1)]';
    38. Taz1 =[Timesa(locsz1)]';
    39. Tbz1 =[Timesa(indxz1)]';
    40. Az1 =[az1(locsz1)]';
    41. ptime1 = [67.574,68.031,68.602,69.235,69.775,70.352,70.922,71.636,72.201,72.66,73.212];
    42. ptime2 = [67.407,68.12,68.762,69.347,69.881,70.448,70.998,71.567,72.20,72.755,73.307];
    43. for i = 1:length(ptime1)-1
    44. diff1(1,i)=ptime1(i+1)-ptime1(i);
    45. diff2(1,i)=ptime2(i+1)-ptime2(i);
    46. end
    47. 2*mean(diff1)
    48. 2*mean(diff2)
    49. figure;
    50. plot(ptime1-ptime2);
    51. p1=[66.2,66.402,66.519,66.746,66.951,67.05,67.198,67.343,67.499,67.615,67.913,68.201,68.531,68.868,69.155,69.393,69.698,69.991,70.235,70.559,70.802,71.145,71.381,71.687,71.972,72.288,72.53,72.844,73.104,73.431,73.707,73.858];
    52. p2=[66.936,67.170,67.360,67.499,68.021,68.333,68.531, 68.554,68.629,68.951,69.222,69.56,69.798,70.021,70.378,70.596,70.611,70.661,70.667,70.671,70.979,71.197,71.553,71.794,72.1,72.321,72.678,72.911,73.245,73.423,73.493,73.847,73.994];
    53. for i = 1:length(p1)-1
    54. diff1(1,i)=p1(i+1)-p1(i);
    55. diff2(1,i)=p2(i+1)-p2(i);
    56. end
    57. 5*mean(diff1)
    58. 5*mean(diff2)
    59. ay=mean(sqrt(ax1(locsz1).^2 + ay1(locsz1).^2 + az1(locsz1).^2))
    60. end
    61. if sel == 2
    62. figure;
    63. subplot(211);
    64. plot(Times2,ay2,'b');
    65. hold on
    66. plot(Times2(locsy2),ay2(locsy2),'ro');
    67. hold on
    68. plot(Times2(indxy2),ay2(indxy2),'k*');
    69. hold on
    70. stem(Times2(locsy2),ay2(locsy2),'ro')
    71. xlabel('time');
    72. ylabel('ay');
    73. subplot(212);
    74. plot(Times2,az2,'b');;
    75. hold on
    76. plot(Times2(locsz2),az2(locsz2),'ro');
    77. hold on
    78. plot(Times2(indxz2),az2(indxz2),'k*');
    79. hold on
    80. stem(Times2(locsz2),az2(locsz2),'ro')
    81. xlabel('time');
    82. ylabel('az');
    83. ptime1 = Times2(locsy2);
    84. ptime2 = Times2(indxz2);
    85. for i = 1:length(ptime1)-1
    86. diff1(1,i)=ptime1(i+1)-ptime1(i);
    87. diff2(1,i)=ptime2(i+1)-ptime2(i);
    88. end
    89. 2*mean(diff1)
    90. 2*mean(diff2)
    91. % figure;
    92. % plot(ptime1-ptime2);
    93. p1=Times2(indxy2(4:end));
    94. p2=Times2(indxz2);
    95. for i = 1:length(p1)-1
    96. diff1(1,i)=p1(i+1)-p1(i);
    97. diff2(1,i)=p2(i+1)-p2(i);
    98. end
    99. 5*mean(diff1)
    100. 5*mean(diff2)
    101. ay=mean(sqrt(ax2(locsz2).^2 + ay2(locsz2).^2 + az2(locsz2).^2))
    102. end
    103. if sel == 3
    104. figure;
    105. subplot(211);
    106. plot(Times3,ay3,'b');
    107. hold on
    108. plot(Times3(locsy3),ay3(locsy3),'ro');
    109. hold on
    110. plot(Times3(indxy3),ay3(indxy3),'k*');
    111. hold on
    112. stem(Times3(locsy3),ay3(locsy3),'ro')
    113. xlabel('time');
    114. ylabel('ay');
    115. subplot(212);
    116. plot(Times3,az3,'b');;
    117. hold on
    118. plot(Times3(locsz3),az3(locsz3),'ro');
    119. hold on
    120. plot(Times3(indxz3),az3(indxz3),'k*');
    121. hold on
    122. stem(Times3(locsz3),az3(locsz3),'ro')
    123. xlabel('time');
    124. ylabel('az');
    125. ptime1 = [100.685;101.31;101.89;102.666;103.198;103.794;104.343;104.918;105.308;105.865;106.536;] ;
    126. ptime2 = [100.885;101.47;102.039;102.589;103.143;103.707;104.281;104.823;105.387;105.952;106.536;];
    127. for i = 1:length(ptime1)-1
    128. diff1(1,i)=ptime1(i+1)-ptime1(i);
    129. diff2(1,i)=ptime2(i+1)-ptime2(i);
    130. end
    131. 2*mean(diff1)
    132. 2*mean(diff2)
    133. figure;
    134. plot(ptime1-ptime2);
    135. p1=Times2(indxy2(4:end));
    136. p2=Times2(indxz2);
    137. for i = 1:length(p1)-1
    138. diff1(1,i)=p1(i+1)-p1(i);
    139. diff2(1,i)=p2(i+1)-p2(i);
    140. end
    141. 5*mean(diff1)
    142. 5*mean(diff2)
    143. ay=mean(sqrt(ax3(locsz3).^2 + ay3(locsz3).^2 + az3(locsz3).^2))
    144. end

    三、仿真结果

           从图的仿真结果可知,通过峰值检测和过零检测算法,我们可以得到各个峰值以及过零点值,其具体数值结论如下:

          对于峰值时刻,y轴的峰值检测时刻为:100.6850,101.3100,101.8900,102.6660,103.1980,103.7940,104.3430,104.9180,105.3080,105.8650,106.5360。z轴的峰值检测时刻为:100.8850101.4700102.0390102.5890103.1430103.7070104.2810104.8230105.3870105.9520106.5360两个轴上峰值的检测时刻误差为:   -0.2000,-0.1600,-0.1490,0.0770,0.0550,0.0870,0.0620,0.0950,-0.0790,-0.0870,0。那么由y轴加速度数据和z轴加速度数据,我们分别得到的步伐周期为1.1302s和1.1702s。由此可见,通过y轴和z轴计算的步伐周期之间存在一定的差异性。同理,根据过零点时刻数据,由y轴加速度数据和z轴加速度数据,我们分别得到的步伐周期为1.1091s和1.1629s。由此可见,通过y轴和z轴计算的步伐周期之间存在一定的差异性。

    A17-10

     

     

  • 相关阅读:
    网站文章被百度快速收录的工具
    安卓玩机----解锁system分区 可读写系统分区 magisk面具模块
    Leetcode 541.反转字符串 ‖
    异常校验处理
    Redis为何快_
    人工智能 PyTorch(一)
    Matlab对多个输入信号进行数值排序提取特定值
    类的内部工作机制就是原型操作
    Ubuntu 上卸载并重新安装 MySQL
    [动态规划] 斜率优化DP
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/126963355