本應用筆記介紹了367軸數字加速度計ADXL3的計步器算法實現。該算法基于對預定義時間窗口內步進產生的加速度的峰值檢測分析。腕戴式用例的經驗結果表明,在不同情況下,平均準確率約為 97%。
使用慣性傳感器計步
計步是任何健身可穿戴設備中最常見的功能之一,通常利用數字慣性傳感器(如加速度計和陀螺儀)來實現。
計算步數的兩種主要方法在分析手臂的擺動運動部分和測量步數沖擊加速度部分中進行了討論。
分析手臂的擺動運動
一只手臂自然會隨著對方腿的動作擺動,關系是每兩步擺動一只手臂。一般來說,陀螺儀更適合分析手臂的擺動運動。
測量臺階沖擊加速度
步行或跑步時,臺階會產生向前和垂直的加速度,其幅度和頻率因人而異。垂直加速度的幅度往往高于前向加速度,它發生在步行循環的階段,前腳的腳跟與地面接觸,如圖1所示。該特性通常用于使用加速度計進行步進計數,這也是本應用筆記的重點。
圖1.步行階段和加速模式(趙,2010)
加速度計消耗最小的功率和較小的占地面積非常重要,因為一般來說,健身追蹤器是電池供電的緊湊型設備。此外,這些設備通常戴在手腕上,這給步進沖擊加速度檢測帶來了兩個挑戰,如下所示:
與身體的其他位置(如臀部或腳踝)相比,加速度信號可能會有些減弱。
還有其他動作,例如手臂擺動,在跑步時跳過障礙物時,或向朋友揮手問好,通常在步進信號帶寬內具有頻率分量。這樣的動作很難從一步中區分出來。
第一個挑戰可以通過選擇低噪聲加速度計來克服,這樣即使衰減也可以拾取加速度信號。加速度計還需要體積小,功耗低,以適合可穿戴設備。ADXL367滿足所有這些要求。
ADXL367是一款超低功耗、3軸數字加速度計,測量模式下的典型功耗僅為0.89 μA,喚醒模式下的典型功耗低至180 nA。它具有 ±2 g 至 ±8 g 的可配置測量范圍和高達 14 Hz 輸出數據速率 (ODR) 的 400 位分辨率。它還包括深度多模輸出先進先出 (FIFO)、內置溫度傳感器以及單擊或雙擊檢測。該器件采用 1.1 V 至 3.6 V 電源供電,采用 2.2 mm × 2.3 mm × 0.87 mm 封裝。所有這些特性使ADXL367非常適合功耗和尺寸受限的應用。
解決第二個挑戰與計步算法如何處理加速度信號有關。三種最常見的計步算法方法是(Xiaomin Kang,2018),如下所示:
時域分析
頻域分析
在本應用筆記中,之所以使用時域分析方法,是因為它比其他兩種方法需要更少的計算能力,同時在使用窗口峰值檢測方法時,計數步驟的準確度也超過97%(Agata Brajdic,2013)。
計步算法
開發的算法檢測給定時間窗口內的加速度峰值,并通過分析相對于動態閾值的峰值以及這些峰值的重復或重復來確定這些是否被視為步驟。該算法采用三個輸入:x、y 和 z 軸加速度數據,采樣率為 50 Hz(作為 14 位整數),并返回到目前為止計數的總步數。接下來將介紹算法實現。有關計步器算法流程圖,請參見圖 4。
首先,計算三個軸上加速度絕對值的總和。步行或跑步時,無論傳感器的方向如何,至少有一個軸具有相對較大的周期性加速度變化(請參閱《模擬對話》文章“使用 3 軸數字加速度計實現的全功能計步器設計”(第 44 卷,2010 年 <> 月))。因此,絕對值的總和仍必須反映步行循環曲線。
接下來是低通濾波級。絕對值的總和與四樣本循環緩沖區中的前三個值取平均值。然后使用平均信號來檢測一步產生的最大和最小加速度峰值。該算法最初在時間窗口內查找最大峰值,當檢測到最大峰值時,它開始查找最小峰值。
要使樣品被視為峰值,它還必須位于窗口的中心,并且是該窗口內的最高樣品(尋找最大值時)或最低樣品(查找最小值時)。窗口大小必須允許算法準確捕獲峰值。如果窗口太窄,由于噪音或其他運動引起的波動可能會被錯誤地解釋為臺階。如果窗口太寬,則會在窗口中捕獲兩個或多個步驟,從而導致缺少步驟,因為算法在該窗口中僅檢測到一個最大值或最小值。
一般來說,一個人可以跑到每秒五步,每 2 秒走一步。這意味著窗口必須至少寬 0.2 秒才能捕獲最快的步長,并且窄于 0.4 秒,以便窗口中包含的最快步長不超過一個。檢測到最大峰值后,該算法將搜索最小值長達 1 秒。如果沒有找到最小值,算法認為沒有步驟,它丟棄最大值,并開始尋找新的步驟。
接下來,確定是否可以將一對最大和最小峰值視為可能的步驟。為此,引入了動態閾值和靈敏度的概念。
動態閾值是一個四樣本循環緩沖器,其工作方式與低通濾波級相同,但在這種情況下,輸入數據是最大值和最小值的平均值。每當最大值和最小值之間的差異大于靈敏度時,動態閾值都會更新。
靈敏度定義了動態閾值幅度附近的區域,有助于消除最有可能由不希望的運動引起的波動。要將一對最大和最小峰值視為可能的步驟,需要滿足以下條件:
最大峰值>(動態閾值 + 靈敏度/2)
最小峰值<(動態閾值 – 靈敏度/2)
最后,如果至少出現八個連續的可能步驟,該算法會認為一個人正在走路或跑步,這是算法的額外措施,以避免由于孤立事件(例如揮手打招呼或喝酒)而導致誤報。在下一次迭代中,軟件將驗證之前所有八個可能的步驟是否有效,并進入調節模式。在此模式下,每個連續步驟都計為有效。
圖 2 顯示了一個人行走時的加速度曲線示例,而圖 3 以圖形方式顯示了計步算法如何解釋和分析加速度數據。在圖 3 中,顯示首先采取一個步驟,然后將人放在原地。在檢測到的第一個最小值之后,可能的步驟計數增加到 1,但由于第二個最大值不滿足被視為可能步驟的算法條件,因此可能的步驟計數將重置為零。此人 大約 4.6 秒后再次開始行走。在大約 5.<> 秒時,可能的步數達到 <>,軟件進入調節模式。
圖2.將傳感器放在手腕上行走的人的加速度曲線
圖3.算法加速信號處理
圖4.計步器算法流程圖
驗證結果
原型電路的原理圖如圖5所示。
圖5.原型原理圖和硬件
EVAL-ADXL367Z 板與 Arduino Nano 33 低功耗藍牙 (BLE) 一起用于設置測試平臺。ADXL367配置為單電源供電。電源由 3.3 V Arduino 穩壓器提供。Arduino使用兩個串聯的3 V紐扣電池供電。有關詳細信息,請參閱圖 7 和將原型與 Arduino IDE 配合使用部分。?
計步器算法針對 50 Hz 采樣率進行了優化。因此,ADXL367 ODR需要相應地配置。加速度范圍設置為 ±2 g,FIFO 設置為流模式,INT1 中斷引腳配置為在發生 FIFO 水印事件時觸發。當FIFO中存儲的樣本數量等于或超過FIFO_SAMPLES寄存器中指定的數量時,將設置FIFO水印。FIFO_SAMPLES寄存器設置為 24,相當于八組 x、y 和 z 軸數據。
用戶必須根據特定用例調整算法參數以獲得最佳性能。跑步時佩戴腕部可能需要與行走時髖部佩戴不同的參數值。這些參數如下:
窗口大小:定義觀察窗口的緩沖區大小。
靈敏度:確定觸發動態閾值更新的最小加速度。
篩選順序:定義平均循環緩沖區的大小。
閾值順序:定義動態閾值循環緩沖區的大小。
表1總結了發現的參數值,對于腕戴式應用來說是一個很好的折衷方案。
參數 | 價值 |
篩選順序 | 4 |
閾值順序 | 4 |
窗口大小 | 篩選順序 × 4 + 1 |
敏感性 | 0.1 克 |
在圖 6 的示例中,一個人朝一個方向走 10 步,停止走路,轉身,然后向后走 10 步。ADXL367測量的加速度以藍色、紅色和綠色顯示,算法計算的總步數以黑色顯示。
圖6.一個人向一個方向行走10步,然后轉身再走10步的加速度曲線;算法步數以黑線顯示
使用表1參數的驗證結果如表2所示。原型PCB用鉤環帶纏繞在測試人員的手腕上。這個人穿著普通的跑鞋。
測試 | 測試說明 | 計步器步驟 計數 | 實際數量 步驟 |
1 | 走 | 99 | 100 |
2 | 走路,忙碌的雙手 | 101 | 100 |
3 | 步行,每10步停下來,改變 方向 | 53 | 50 |
4 | 跑 | 103 | 100 |
5 | 上下樓梯 | 98 | 96 |
對于測試 1(步行),該人以每秒 1.6 步的平均速度行走。對于測試 2(走路,忙碌的手),測試人員一邊走路,一邊用雙手拿著手機。測試5(上下樓梯)在硬木地板樓梯上進行,有12個臺階。在這個測試中,這個人上下樓梯四次。除測試5(上下樓梯)外,所有測試均在混凝土地板上進行。從所有這些測試中獲得的平均步數計數準確率為 97.4%。測試3(步行,每10步停止,改變方向)顯示94.3%的準確率,這是性能最低的測試。
為了估計算法的平均處理時間,在表 2 中執行的每個測試期間監控其執行時間。獲得的平均時間為24 μs。
圖7.Arduino 代碼流程圖
將原型與ARDUINO IDE一起使用
用于驗證測試的計步器算法源代碼可從ADXL367產品頁面的工具和仿真部分下載。
要將原型PCB與Arduino IDE一起使用,請執行以下步驟:
從 Arduino 網站安裝 Arduino 集成開發環境 (IDE) 應用軟件。
打開 Arduino IDE,然后轉到“工具》管理庫”。
圖8.Arduino IDE 管理庫
在“庫管理器”窗口中,從“類型”列表中選擇“Arduino”,從“主題”列表中選擇“通信”,然后鍵入“ArduinoBLE”。單擊安裝。
圖9.安裝 ArduinoBLE 庫
將通用串行總線 (USB) 電纜連接到 Arduino 和 PC。
打開 ADXL367 計步器算法項目,方法是轉到“打開文件”》然后選擇 ADXL367_pedometer.ino 文件。
轉到工具》板:Arduino Nano 33 BLE 》 Arduino Mbed OS Nano Boards,然后選擇 Arduino Nano 33 BLE。
圖 10.Arduino IDE 板選擇
轉到“工具》端口”,然后選擇相應的端口。
圖 11.Arduino IDE COM 端口選擇
點擊 上傳 按鈕將程序上傳到 Arduino。
圖 12.上傳軟件
完成的上傳顯示為 Done,如圖 13 所示。
圖 13.完成上傳消息
轉到“工具”,然后選擇“串行監視器”。
圖 14.打開 Arduino IDE 串行監視器
在打開的窗口中,從波特率列表中選擇 115200 波特。圖 15 顯示了當前步驟計數。
圖 15.計步監控
審核編輯:郭婷
-
加速度計
+關注
關注
6文章
711瀏覽量
46570 -
計步器
+關注
關注
4文章
76瀏覽量
20215 -
Arduino
+關注
關注
188文章
6490瀏覽量
190046
發布評論請先 登錄
ADI公司為醫療健康和工業應用提供超低功耗MEMS加速度計

DC2554A-KIT DC2554A-KIT評估板
ADI推出三軸MEMS加速度計ADXL367
介紹三款最新發布的三軸MEMS加速度計產品
ADXL367: Micropower, 3-Axis, ±2 <em>g</em>/±4 <em>g</em>/±8 <em>g</em> Digital Output MEMS Accelerometer

評論