雖然慣性運動感測器的整合已經存在一段時間,但行動App的最新發展才是使消費者和工業設備感測器整合的演算法、處理器及基礎結構等獲得關注的推手。
從遊戲機到智慧型電視遙控器,再到最近的智慧型手機、感測器的整合,已成為消費者電子產品直觀且引人互動的基礎。如Hillcrest首先開發出訊號處理技術,用MEMS慣性和磁性感測器將使用者的動作,轉化為高品質、App隨時可用的動作資訊。
隨著9軸感測器套件在新款智慧型手機和平板電腦越來越普遍,使用者一直想倚重Hillcrest的經驗,藉由發揮這些感測器的性能及產生讓人心動的新款動作相關App,使自己的產品能夠脫穎而出。所需的App必須涵蓋情境感知、室內導航、手勢控制幾個項目。這類App需要感測器持續不斷進行資料抽樣,以「隨時」感知、發掘有意義的動作。「隨時」這個概念代表對架構的顛覆:意即從應用處理器(AP)為核心的感測器管理,轉為專用的低功耗感測器中樞核心。
功耗和性能面的明顯優勢,促使感測器中樞快速普及。其成功取決於確保高性能和低功耗的優化演算法和處理器。本文將說明感測器整合演算法(如Hillcrest的Freespace軟體)和處理器(如ArmCortex-M系列)如何攜手打造低功耗的感測組合。
App「即時」驅動情境感知
在討論感測器中樞的整合技術基礎之前,先回顧一下這種發展背後的驅動力:App為何需要在這樣的技術基礎上,以提升行動使用者的體驗。 「情境感知」正是這類App的一環。這些App基本上用手機的感測器來感測周遭的變化,並用這些資訊來改變手機的動作。某些手機現在配備多達20個實體感測器(如加速計、GPS、Wi-Fi、氣壓計、照相機),每個感測器都會感測手機、使用者和環境的變化。還有行事曆、當地路況等虛擬感測器。就像人腦解讀來自觸覺、視覺和聽覺等感覺(意即受器)的資訊,手機也可類比為人腦來確認手機和使用者的情境,同時利用這些情境為使用者帶來更直觀的體驗。
但情境會隨時間變化,也會因手機是面朝下放在桌上一秒或一天而不同;還會因使用者只偶爾不看螢幕一秒或好幾分鐘也不看螢幕一眼而有所差異。為正確判斷情境,因此必須持續不斷進行抽樣。只靠零星的情境抽樣會曲解情境,而導致手機動作的改變,不但對使用者無益,甚至對使用者體驗有害。因此感測器的「隨時」抽樣對於這些App的正常運作至關重要。
只要能夠為這些App「隨時」提供智慧型情境感知資訊,則對使用者體驗的價值將難以估計。情境感知功能常見的實例,包括感測到使用者正在駕駛,若手眼不能並用以操作手機時,則啟用音訊通知和語音指令;下班之前提醒使用者返家之路的路況不佳;在圖書館時自動切換為振動模式;自動記錄一天的活動量和消耗的熱量。
精確度為系統可靠/準確性基礎
如果感測器的精確度只有12-bit,那麼16-bit數值精確度應該就足以進行良好的演算法—再怎麼說,都還有多出來的4-bit,對吧?
演算法端
不見得。實際上演算法設計者最關注的是全系統的數值精確度。雖然感測器解析度事關重大,但絕非決定需求的唯一因素。許多用於校準、解譯、整合和其他功能的內部變量,需要各種不同等級的精確度和範圍。舉例來說,在Kalman篩選器進行變異估計時,同一個變量有時數值需要大一點才能處理主要調整,有時數值需要小一點來處理微調。事實上有些甚至可能需要浮點運算。
如果演算法設計者無法提供足夠的解析度,結果將使演算法效能欠佳;若演算法設計者隨時隨地都使用完整的浮點運算,將導致平台效能欠佳,包括成本偏高、運作速度偏慢、功耗偏大。正確的解決方案是將演算法和平台合而為一。
由於變量範圍是固定的,定點數學需要更高的精確度以避免溢位和嚴重的欠位。複雜的定點演算法在整個演算法中,通常還需要(Q格式)二進制小數點位於不同位置。
對於演算法設計者而言,最好的平台應該對字長具有相當大的彈性,以便在不同的演算法設計需求之間,達成與底層處理器的函數級,甚至變量級自定義擬合。這是Hillcrest用Freespace所達成的功能,而像廠商Arm則是使演算程序更順暢。
Cortex-M系列處理器具備大量功能,以確保高效的演算法表現。
Cortex-M0+和Cortex-M23採用兩級管線設計,能為感測器整合應用提供同級較佳的能效。除配備Armv6-M指令集外,也支援選配的32-bit乘積(MULS)1-cycle乘法。這是感測器處理演算法的關鍵性指令。
Cortex-M0+還支援選配的周邊專用、獨立於儲存器子系統的單週期I/O匯流排。
Cortex-Message配備Armv7-M指令集,此一指令集另加數個功能,能夠用定點算術有效進行複雜的演算法。
・長乘法指令(SMULL)
將兩個32-bit整數相乘,然後將乘積儲存為64-bit整數。SMULL指令對實現32-bit定點數乘法至關重要,因為只需要乘積後32-bit的情況極為罕見,乘積為32-bit的32-bit乘法意義不大。
・長乘法及累加指令(SMLAL)
SMLAL指令可提高定點矩陣乘法內部循環,和FIR篩選功能的效率。
・Flexible Operand 2
可讓大多數運算以常數或暫存器進行移位。定點演算法有多個必要的移位。例如,在具有不同Q格式的定點變量間進行運算或轉換。由於Q格式是固定且通常是編譯器所已知,因此可被嵌入單一指令而大幅提高效能。
・計算前導零的指令(CLZ)
CLZ指令可計算前導零的個數、進行快速正規化、使本演算法具有浮點演算法的某些優點。
・整數除法(UDIV和SDIV)
用硬體執行的除運算,比用軟體執行的相同運算,較有可衡量的性能優勢。但這僅限於32-bit的除法。對於定點數學,通常是用32-bit的除數除64-bit的被除數,得到32-bit的商數。(長乘法指令的相反)。雖然未提供長除法指令,但可用UDIV指令進行更有效的除法。
Cortex-M4對選配浮點運算單元的支援,能大幅加速不易適應定點計算的演算法,例如非此不得不採用軟體浮點運算的矩陣分解。
此外,藉由將多個DSP擴展加入SIMD和具有飽和演算法的多個指令,進一步改善定點數學。
Cortex-M4處理器的浮點單元(FPU)提供:
・用於單精確度(C浮點)數據處理運算的32-bit指令。
・提高精確度(整合MAC)的乘法和累加指令組合。
・支援轉換、加法、減法、搭配選配累加的乘法、除法和平方根運算的硬體。
・對次正規和IEEE各種四捨五入模式的硬體支援。
・32個專用的32-bit單精確度暫存區,也可尋址的16個雙字暫存區。
・解耦的三級指令管線。
Cortex-M33處理器的TrustZone安全性,使開發人員能夠使用熟悉的編程模型,輕鬆實現軟體隔離,以奠定IoT和嵌入式設備所需的安全性基礎。
智慧功能架構使效能最佳化
像Arm提供的字長選項和跨產品的智慧型功能安排,可為所要的平台彈性訂製演算法。對於Freespace,有針對Cortex-M0+、Cortex-M23、Cortex-M3和Cortex-M4的不同版本。各平台的具體配備互不相同,但Arm設備的智慧型架構可較易遷移。由於該公司的演算法內部採用全模組化設計,在結構和流程上都具有自適應性,因此Freespace與Arm平台的配對不但較容易,而且還可在給定的功耗、成本和尺寸限制下,獲得較佳效能。
系統介面需整合/管理
感測器整合本質上是讀取多個感測器,然後計算並輸出一個整合的判斷,以供系統其他環節使用。
處理器如果沒有良好的I/O和任務管理功能,則演算法效能會大打折扣。較好的演算法至少會想要有抽樣丟失檢測、低延遲和抖動、可靠的鏈接、以及合併輸入和輸出數據的能力。
Cortex-M處理器支援將App與系統資源正確隔離的線程和處置器模式、在任務之間進行時間截分的SysTick計時器、以及具有複雜中斷管理方案且軟體負擔極低的巢套式向量型中斷控制器。
Arm Cortex-M處理器系列配備一組介面、I/O管理和任務管理技術,以便對Freespace感測器進行整合軟體等複雜任務的支援。複雜的演算法需要全方位的硬體,才能在高效率、低功耗下執行運算。
感測器解譯/校準維繫系統效能
感測器數據包括雜訊、非線性、和偏置等多種減損。對於許多感測器而言,即使辨認0點這類的小事,實際上極其困難,以下舉個例子。
根據加速度計讀數計算出的重力向量估算值,會用於將校準後的磁力計感測器讀數轉換為航向測量值。但航向運算非常敏感。即使區區17mg的零重力偏移(ZGO)估算誤差,也會產生1度的傾角誤差,進而導致高達2度的航向誤差。但加速度計不提供絕對零點或ZGO值。ZGO值隨個別感測器而異,甚至對單一感測器也會隨時間變化。
而值得留意的是,此一ZGO實例只是眾多加速度計數據雜訊之一,更是各種感測器數據雜訊的滄海一粟。每一種感測器都有自身獨特的各種雜訊挑戰,但磁力計很可能較具挑戰性(因為除了通常的偏置和非線性問題以外,還需要考慮硬鐵和軟鐵的作用)。由於Freespace這類的高端演算法,因此需要隨著時間的推移及環境的變化,以自動學習並追蹤這些減損,才能消除感測器雜訊。
如果感測器整合演算法將這些雜訊也當作輸入,則生成的整合數據也將成為雜訊。Freespace感測器的整合軟體效能,絕大部分是從原始、魚龍混雜的感測器數據中,剔出真實感測器資訊。
從魚龍混雜的感測器數據剔出真實資訊的關鍵,在於具有所要的平台功能。首先,系統需要有效的持久儲存方法,以便在會談期內和會談期間累積學習經驗。
Cortex-M處理器藉由快閃記憶體和EEPROM支援,以提供持久性的儲存。處理器可以在快閃記憶體或RAM運作。對快閃記憶體的提取,藉由指令管線和使用Thumb-2指令集進行優化。
這個演算法模組特別針對磁力計提供多個複雜的自適應篩選、模式識別和矩陣管理組件。這些都需要支援性的運算和分支指令集,以及高階記憶體管理技術,包括上述的除法支援、前導零個數計算、立即數據指令等。
Arm處理器的多種功能,賦予Hillcrest兼顧自訂感測器解譯和校準模組、維持演算法與系統效能穩定的能力。
順暢/精確度間損益降低系統錯誤率
假設感測器和感測器整合演算法兩者都不具瑕疵,並假設欲根據感測器整合的結果,移動顯示器上的游標。在完美感測器上運作的完美感測器整合演算法,是否會產生使用者喜歡的完美游標控制系統?其實不然。
因為手持裝置的各種動作不一定具有情境性。還有人為震顫所引起而非有意的動作。使用者實際上只希望有意而為才移動游標,非有意的震顫必須除外。將雷射筆指向螢幕造成的抖動納入考量範圍,這種抖動是使用者根本不想看到的麻煩。
除了震顫之外還有更多類似的情形。感測器整合通常必須在順暢度和精確度間取捨。所需的輸出有時著眼於預期錯誤最低,有時則著眼於符合最近的歷史記錄。在這些情況下,所需的輸出並非純粹的真實,這正是Freespace這類感測器整合要執行的額外處理步驟。
Cortex-M4和Cortex-M33提供一個高效的單週期MAC,負責加速易於實現自適應篩選的多數DSP演算法。MAC支援16-bit和32-bit數據的各種單週期指令。例如在一個週期內執行(32×32+64→4)操作。
Arm處理器的基本功能簡化此一步驟的實現,並使Hillcrest不但可將其與處理器的特定功能匹配,還能維持演算法和系統低功耗的表現穩定。
優化電源管理促成系統最佳效能
對於大多數使用者而言,在10分鐘內耗盡電池電量的效能不值一提。實際上即使拉長到好幾個小時,也只能算差強人意。因此Freespace之類的複雜演算法,內含許多優化功耗的特殊功能。
這些電源優化技術包括混合模式運算、樣本間預測和多速率運算等,也包括充分發揮感測器本身,甚至是處理核心的電源管理功能。目標是在不影響效能的情況下,最大化處理核心、感測器,甚至I/O的閒置時間和範圍。
Cortex-M提供多個支援處理器級和設備級電源管理的功能。當處理器本身有不同等級的睡眠模式時,某些模組的電源可以依照需要而降級,而喚醒中斷控制器可充分發揮省電模式的功能。
創建事件驅動軟體需要兩個指令和一個控制bit。
・WFI等待中斷
・WFE等待事件
・SLEEP-ON-EXIT-bit
處理器在中斷或事件觸發前處於睡眠模式。處置器代碼執行完畢後,處理器則返回睡眠模式。
目標是在兼顧演算法效能的情況下,實現良好的電源效能。Freespace之類的複雜演算法,與Cortex-M之類功能良好且架構合理的處理器互相搭配,而產生出色的系統設計。關鍵在於長時間的電源效率—就是在整個操作期間,以較低功耗執行符合延遲時間標準之演算法。
Cortex-M4之類的高效能處理器,因為只需要短暫的代碼執行時間,大部分時間會處於深度睡眠狀態,因此平均功耗因此大幅降低,能產出更簡單、更低功耗的系統設計。
工具在手構築良好生態系
好工具是為感測器整合系統開發複雜演算法的不二法門。如Arm擁有目前市場上完備的工具生態系統,包括來自各種競爭性供應商、開源社區,超過35種的IDE和除錯系統。構建複雜系統需要多種編譯器、除錯器、操作系統和各種軟體模組。
除了正確的工具,好的感測器整合系統設計既需要出色的感測器整合演算法,也需要出色的平台來運作。兩者的相互搭配,與頂級車手需要搭配頂級賽車的道理完全一樣,而Freespace和Arm正是這樣的組合。
(本文作者Burr任職於Arm;Cook任職於Hillcrest Labs/CEVA)