開源、可重復(fù)使用的軟件堆棧助力實(shí)現(xiàn)實(shí)時(shí)處理和CbM算法開發(fā)
CN0549狀態(tài)監(jiān)控平臺(tái)簡介
在本文中,我們將重點(diǎn)介紹CN0549的不同組件可用的軟件生態(tài)系統(tǒng)、數(shù)據(jù)分析工具和軟件集成,以及工程師和數(shù)據(jù)專家如何使用它們進(jìn)行應(yīng)用開發(fā)。我們分兩部分來介紹使用CN0549開發(fā)平臺(tái)進(jìn)行狀態(tài)監(jiān)控(CbM)和預(yù)測(cè)性維護(hù)(PdM)應(yīng)用,這是該系列文章的第二篇。新平臺(tái)旨在加快定制CbM解決方案從原型制作到生產(chǎn)的整個(gè)開發(fā)流程。第一部分主要介紹MEMS振動(dòng)技術(shù),以及為CbM應(yīng)用捕捉高質(zhì)量的振動(dòng)數(shù)據(jù)。
從概念到生產(chǎn)的整個(gè)過程,以及如何加快這個(gè)過程!
在構(gòu)建狀態(tài)監(jiān)控解決方案時(shí),它們必須包含傳感器、本地處理、連接、某些形式的軟件或硬件,使其能夠正常運(yùn)行。CN0549提供可自定義的硬件和軟件選項(xiàng),讓工程師和軟件開發(fā)人員能夠使用常用的工具和基礎(chǔ)設(shè)施,并根據(jù)應(yīng)用設(shè)計(jì)做出權(quán)衡取舍,以解決所有這些挑戰(zhàn)。例如,如果您想選擇特定的微控制器或FPGA進(jìn)行處理,想要使用Python進(jìn)行編碼,或有喜歡的、想要重復(fù)使用的傳感器。這讓CN0549成為一個(gè)強(qiáng)大的平臺(tái),讓希望構(gòu)建優(yōu)化CbM解決方案的人員能夠根據(jù)自己的需求來自定義處理、功率、性能、軟件和數(shù)據(jù)分析。
嵌入式系統(tǒng)的開發(fā)流程
我們來看看嵌入式系統(tǒng)從生成概念到生產(chǎn)的整個(gè)開發(fā)流程。圖1概要描述這個(gè)抽象化的過程。
在圖1所示的設(shè)計(jì)流程中,第1步是“數(shù)據(jù)研究”階段。在這個(gè)階段,用戶將他們的要求轉(zhuǎn)化到應(yīng)用對(duì)硬件和軟件的不同要求。從硬件的角度來看,可能涉及抗沖擊性、模擬信號(hào)帶寬或測(cè)量范圍等參數(shù)。在考慮對(duì)軟件的要求時(shí),樣本數(shù)量、采樣速率、頻譜、過采樣和數(shù)字濾波都是CbM應(yīng)用的重要參數(shù)。該平臺(tái)非常實(shí)用靈活,允許研究人員使用不同的傳感器組合,并調(diào)節(jié)數(shù)據(jù)采集參數(shù),以滿足其應(yīng)用需求。
“數(shù)據(jù)研究”階段之后是“算法開發(fā)”階段,這個(gè)階段主要是驗(yàn)證系統(tǒng)的應(yīng)用或使用。這通常需要在高級(jí)工具中開發(fā)模型或設(shè)計(jì)算法,并最終移植到嵌入式系統(tǒng)中。但是,在優(yōu)化設(shè)計(jì)之前,必須使用真實(shí)數(shù)據(jù)和硬件環(huán)路進(jìn)行驗(yàn)證,這正是CN0549的優(yōu)勢(shì)所在,因?yàn)樗粌H能與熱門的高級(jí)分析工具直接集成,還支持硬件環(huán)路驗(yàn)證。
設(shè)計(jì)得到驗(yàn)證之后,就開始進(jìn)行優(yōu)化和嵌入所需軟件組件的工作。在“嵌入式設(shè)計(jì)細(xì)化”階段,可能需要重新實(shí)施某些算法或軟件層,以便在FPGA或資源有限的微控制器中使用。必須小心謹(jǐn)慎地不斷驗(yàn)證設(shè)計(jì),因?yàn)槲覀儠?huì)將它移植到原型或?qū)⒁度肷a(chǎn)的硬件中進(jìn)行最后驗(yàn)證。
圖1 嵌入式系統(tǒng)的開發(fā)流程
最后是到達(dá)“生產(chǎn)”階段,這個(gè)階段可能與設(shè)計(jì)開始使用的原始開發(fā)環(huán)境沒有什么相似之處,但仍然要滿足同樣的要求。由于最終的系統(tǒng)可能與原始的研究系統(tǒng)相去甚遠(yuǎn),所以可能無法或很難運(yùn)行相同的代碼或測(cè)試。這可能導(dǎo)致產(chǎn)生生產(chǎn)測(cè)試問題和設(shè)備故障,很可能需要花費(fèi)額外的時(shí)間和資金投入來進(jìn)行補(bǔ)救。
通過最大程度的重復(fù)使用來降低風(fēng)險(xiǎn)
在設(shè)計(jì)過程中,降低風(fēng)險(xiǎn)最簡單的方法之一是盡可能在每個(gè)階段重復(fù)使用更多的硬件和軟件組件,CN0549為開發(fā)人員提供許多開箱即用的資源,可以在開發(fā)流程的每個(gè)階段直接使用。CN0549解決方案提供原理圖和電路板布局文件,提供一個(gè)適用于優(yōu)化和全功能環(huán)境的開源軟件堆棧,以及更高等級(jí)工具(例如MATLAB?和Python)可用的集成選項(xiàng)。最終用戶可以使用ADI經(jīng)過驗(yàn)證的組件,并在研究階段到生產(chǎn)階段期間選擇想要維護(hù)或更改的組件。這樣最終用戶就能集中精力進(jìn)行軟件開發(fā)和系統(tǒng)集成,不必去繪制ADI組件的原理圖或進(jìn)行基礎(chǔ)的軟件開發(fā)。利用硬件模塊和重復(fù)使用軟件層,例如ADI提供的設(shè)備驅(qū)動(dòng)程序、HDL或應(yīng)用固件,可以減少構(gòu)建系統(tǒng)所需的開發(fā)時(shí)間,并大大加快上市時(shí)間。
軟件開發(fā)流程和過程
在開發(fā)期間,CN0549為工程師們提供多種選項(xiàng),允許他們使用通用語言,包括C或C++,同時(shí)使用他們熟悉的數(shù)據(jù)分析工具,例如MATLAB或Python。這主要是通過利用和基于開源標(biāo)準(zhǔn),以及支持不同制造商的多種嵌入式平臺(tái)的現(xiàn)有解決方案進(jìn)行構(gòu)建而實(shí)現(xiàn)。
CN0549系統(tǒng)堆棧
圖2所示的系統(tǒng)堆棧概述了構(gòu)成CN0549系統(tǒng)的不同組件。左上角的深藍(lán)色方框表示傳感器和數(shù)據(jù)采集(DAQ)電路板,淺藍(lán)色和紫色方框表示用于數(shù)據(jù)處理的FPGA分區(qū)。該平臺(tái)直接支持Intel DE10-Nano和Xilinx? CoraZ7-07s,涵蓋兩大FPGA供應(yīng)商。綠色方框表示與主機(jī)PC的連接。這為算法開發(fā)提供了從硬件到高級(jí)數(shù)據(jù)分析工具的直接數(shù)據(jù)訪問。
所有硬件描述語言(HDL)代碼都是開源的,允許開發(fā)人員進(jìn)行修改,將數(shù)字信號(hào)處理(DSP)插入可編程邏輯(PL)的數(shù)據(jù)流中,如圖2所示。這可以是從濾波器到狀態(tài)機(jī)甚至機(jī)器學(xué)習(xí)等任何內(nèi)容,具體由您的系統(tǒng)分區(qū)決定,這一步也可以在用戶空間或應(yīng)用層完成。由于代碼是公開提供的,它可以移植到不同制造商的其他FPGA,或不同處理器系列中,具體取決于終端應(yīng)用的需求。
圖2 CN0549平臺(tái)的系統(tǒng)堆棧
Arm?處理器內(nèi)部提供兩種軟件選項(xiàng)。具體使用哪種,由具體的用例決定,大多數(shù)開發(fā)人員可能會(huì)使用:
▲ Linux?:內(nèi)核驅(qū)動(dòng)程序,可用于在內(nèi)核中的輸入輸出工業(yè)(IIO)框架中構(gòu)建的DAQ屏蔽。它與一個(gè)名為Kuiper Linux的完全嵌入式Linux發(fā)行版相結(jié)合,這個(gè)版本在Arm內(nèi)核用戶空間中運(yùn)行,基于樹莓派OS。
▲ 無操作系統(tǒng)(No-OS):裸機(jī)項(xiàng)目,使用與Linux內(nèi)核中同樣的驅(qū)動(dòng)程序,可以在Xilinx或Intel的SDK中使用。它也可以作為替代方案,在實(shí)時(shí)操作系統(tǒng)(RTOS)環(huán)境中實(shí)現(xiàn)。
建議開發(fā)人員從Linux開始學(xué)習(xí)并使用其系統(tǒng)進(jìn)行開發(fā),因?yàn)長inux提供的工具最多。Linux還提供大量開發(fā)包和驅(qū)動(dòng)程序,構(gòu)成了所需的開發(fā)環(huán)境。在系統(tǒng)設(shè)計(jì)穩(wěn)定并準(zhǔn)備進(jìn)行優(yōu)化時(shí),通常會(huì)轉(zhuǎn)向無操作系統(tǒng)環(huán)境,只提供必要的軟件。但是,這主要取決于應(yīng)用,許多制造商會(huì)交付完整的Linux系統(tǒng),以保持他們要提供的靈活性。
與用于可編程邏輯的HDL一樣,整個(gè)內(nèi)核源代碼、Kuiper Linux鏡像和No-OS項(xiàng)目都是完全開源的,讓最終用戶能夠按照自己的意愿更改組件。如果需要,還可以將這些代碼庫移植到不同的處理器系統(tǒng)或不同的運(yùn)行時(shí)環(huán)境中。
圖2所示的最后一個(gè)組件是與主機(jī)PC的連接,如綠色方框所示。在運(yùn)行該系統(tǒng)時(shí),可以對(duì)設(shè)備進(jìn)行配置,并將數(shù)據(jù)流備份到主機(jī)系統(tǒng)進(jìn)行分析,開發(fā)人員將利用MATLAB或TensorFlow等標(biāo)準(zhǔn)工具在主機(jī)上創(chuàng)建算法。最終將這些算法轉(zhuǎn)移到嵌入目標(biāo)中,讓他們能夠使用本地處理能力來加快算法開發(fā)迭代。
訪問CbM數(shù)據(jù)——使用入門
使用Arm處理器和PL一般發(fā)生在設(shè)計(jì)流程較為靠后的階段,也就是要對(duì)系統(tǒng)實(shí)施優(yōu)化進(jìn)行部署時(shí)。所以,對(duì)于開發(fā)人員來說,最開始常用的切入點(diǎn)都是從工作站遠(yuǎn)程連接至嵌入式系統(tǒng)。在嵌入式系統(tǒng)上運(yùn)行Linux時(shí),因?yàn)榛A(chǔ)設(shè)施的設(shè)計(jì)方式,在工作站上遠(yuǎn)程或本地運(yùn)行代碼是一個(gè)相對(duì)透明的過程。這主要是因?yàn)槊麨閘ibIIO的開源庫。libIIO是一個(gè)接口庫,允許在內(nèi)核的Linux IIO框架內(nèi)構(gòu)建適用于不同設(shè)備驅(qū)動(dòng)程序的簡單、一致的訪問模型。這個(gè)庫是能夠靈活使用CbM平臺(tái)的核心,并提供數(shù)據(jù)流傳輸和設(shè)備控制功能。
libIIO本身主要分成兩個(gè)部分:
▲ libIIO庫,這是一個(gè)C語言庫,用于訪問不同的IIO驅(qū)動(dòng)程序?qū)傩曰蚝瘮?shù)。這包括向設(shè)備(例如ADC、DAC和傳感器)傳輸數(shù)據(jù)流或從中輸出數(shù)據(jù)流。
▲ IIO daemon(iiod)利用實(shí)際的驅(qū)動(dòng)程序的庫和內(nèi)核接口來管理libIIO庫或客戶端之間的訪問。
libIIO和iiod本身是從不同的組件寫入,可以使用不同的方法來訪問驅(qū)動(dòng)程序,即所謂的后端。后端允許本地和遠(yuǎn)程用戶對(duì)libII進(jìn)行控制和提供數(shù)據(jù)流,而且,由于它們已形成組件,所以可以將新后端添加到系統(tǒng)中。目前,libIIO支持四個(gè)后端:
▲ 本地:允許訪問連接至同一設(shè)備的硬件的本地可訪問驅(qū)動(dòng)程序。
▲ USB:通過使用libusb,此后端允許通過USB鏈接遠(yuǎn)程控制驅(qū)動(dòng)程序。
▲ 串行:為通過串行連接的電路板提供更通用的接口。UART是最常見的用例。
▲ 網(wǎng)絡(luò):最常用的遠(yuǎn)程后端,基于IP來訪問網(wǎng)絡(luò)中的驅(qū)動(dòng)程序。
圖3 使用網(wǎng)絡(luò)后端的libIIO系統(tǒng)概述
圖3從系統(tǒng)層面概述如何使用libIIO組件,以及如何將它們集成到整個(gè)系統(tǒng)中。圖中左側(cè)是嵌入式系統(tǒng),它已安裝libIIO庫,運(yùn)行iiod daemon。在嵌入式系統(tǒng)中,用戶可以訪問本地后端,甚至網(wǎng)絡(luò)后端。他們可以通過更改一行代碼來確認(rèn)任一后端的地址,在兩個(gè)后端之間切換。無需對(duì)目標(biāo)代碼進(jìn)行其他更改。
圖4 libIIO遠(yuǎn)程與本地示例
圖3左側(cè)顯示的是遠(yuǎn)程主機(jī),可以運(yùn)行任何操作系統(tǒng)。提供Windows、macOS、Linux和BSD等官方軟件包。該圖顯示使用了基于網(wǎng)絡(luò)或IP的后端,也可能是使用串行、USB或PCIe連接。從用戶的角度來看,可以從C語言庫本身,或者從其他語言的許多可用綁定來使用libIIO,包括:Python、C#、Rust、MATLAB和Node.js。為需要與應(yīng)用中的不同驅(qū)動(dòng)程序交互的用戶提供多種選擇。
應(yīng)用和工具
當(dāng)開始使用一個(gè)新設(shè)備時(shí),通常不建議直接使用libIIO。所以,有很多基于libIIO構(gòu)建的更高等級(jí)的應(yīng)用,它們通過命令行和GUI格式為IIO設(shè)備提供基本的配置能力。它們分別是IIO工具和IIO示波器。
IIO工具是一組與libIIO一起發(fā)布的命令行工具,對(duì)于通過腳本執(zhí)行的低等級(jí)調(diào)試和自動(dòng)化任務(wù)來說非常有用。例如,在執(zhí)行實(shí)驗(yàn)室測(cè)試時(shí),它可以在不同的采樣率模式下設(shè)置平臺(tái),以及收集一些數(shù)據(jù)。利用幾行bash,或通過使用IIO工具的批處理腳本可輕松完成這些操作。圖5顯示了一個(gè)簡單示例,可以在本地或遠(yuǎn)程運(yùn)行,以更改采樣速率和ADC的地輸入模式。這個(gè)示例使用名為iio_attr的IIO工具,讓用戶能夠輕松更新設(shè)備的配置。
圖5 IIO工具的iio_attr部分的使用示例
但是,對(duì)用戶來說,最常見的切入點(diǎn)是GUI應(yīng)用IIO示波器,一般被稱為OSC。與IIO工具一樣,OSC是通用的,可以管理任意IIO驅(qū)動(dòng)程序,而且,因?yàn)樗腔趌ibIIO構(gòu)建,所以它可以遠(yuǎn)程運(yùn)行或在電路板上運(yùn)行。但是,它也包含一個(gè)插件系統(tǒng),可以為特定的驅(qū)動(dòng)程序或驅(qū)動(dòng)程序組合添加專用選項(xiàng)卡。圖6顯示自動(dòng)加載到基于CN0540的電路板上的插件選項(xiàng)卡,包括控制和監(jiān)控選項(xiàng)卡。這些選項(xiàng)卡提供了一個(gè)簡單的界面,可以訪問CN0540的ADC、DAC和控制引腳的低級(jí)功能,以及數(shù)據(jù)采集板和測(cè)試點(diǎn)監(jiān)控的基本示意圖。如需了解其他可用的默認(rèn)選項(xiàng)卡和插件信息,可以訪問ADI公司W(wǎng)iki查看更多OSC文檔。
OSC的最后一個(gè)重要方面是捕獲窗口。捕獲窗口可以根據(jù)從ADC或基于libIIO的緩沖區(qū)收集的數(shù)據(jù)進(jìn)行繪圖。圖7顯示在頻域模式下使用的捕獲窗口,這是基于頻譜數(shù)據(jù)信息繪制。也可以繪制其他圖,包括時(shí)域圖、相關(guān)圖和星座圖。這對(duì)于抽檢設(shè)備、調(diào)試或評(píng)估非常有用。這些圖提供常用工具,例如標(biāo)記、峰值檢測(cè)、諧波檢測(cè),甚至相位估計(jì)。由于OSC也是開源的,任何人都可以添加更多插件或繪圖,甚至更改現(xiàn)有功能,對(duì)其進(jìn)行擴(kuò)展。
圖6 CN0540 IIO示波器插件選項(xiàng)卡
圖7 頻域模式下的IIO示波器捕獲窗口
算法開發(fā)環(huán)境集成
至此,我們已經(jīng)介紹了大部分工程師在首次使用CN0549時(shí)會(huì)采用的低等級(jí)重要工具。首先理解這些是很重要的,這樣開發(fā)人員才能理解系統(tǒng)的靈活性以及他們可以使用的不同選擇或接口。但是,在設(shè)置和運(yùn)行基線系統(tǒng)后,開發(fā)人員希望使用MATLAB或Python等工具將數(shù)據(jù)快速遷移至算法開發(fā)。這些程序可以從硬件導(dǎo)入數(shù)據(jù)。必要時(shí)可以設(shè)計(jì)附加控制邏輯。
在機(jī)器學(xué)習(xí)開發(fā)周期中,開發(fā)人員通常會(huì)遵循通用的流程,該流程與他們想要用于處理數(shù)據(jù)的軟件環(huán)境無關(guān)。圖8簡要顯示了該流程的一個(gè)示例,其中涉及數(shù)據(jù)收集、分割數(shù)據(jù)用于測(cè)試和訓(xùn)練、開發(fā)模型和算法,最后部署模型進(jìn)行現(xiàn)場推理。在實(shí)際服務(wù)中,會(huì)持續(xù)執(zhí)行這整個(gè)流程,將新學(xué)習(xí)內(nèi)容集成到生產(chǎn)模型中。TensorFlow、PyTorch,或MATLAB Machine Learning Toolbox等工具都可以采用此流程。這個(gè)流程有其作用,但是,通常會(huì)忽視或完全忽略收集和整理數(shù)據(jù),以及管理數(shù)據(jù)這種復(fù)雜任務(wù)。為了簡化這項(xiàng)任務(wù),我們使用這些相關(guān)工具和軟件包設(shè)計(jì)出相關(guān)的軟件生態(tài)系統(tǒng)。
Python集成——連接到Python分析工具
首先,從Python開始,可以通過模塊PyADI-IIO獲得CN0549的設(shè)備特定類別。圖6顯示了一個(gè)通過以太網(wǎng)配置設(shè)備的采樣速率和提取緩沖區(qū)的簡單示例。這里沒有復(fù)雜的寄存器序列、模糊的存儲(chǔ)器控制調(diào)用,或要記憶的隨機(jī)位。而是由板上運(yùn)行的驅(qū)動(dòng)程序、libIIO和PyADI-IIO在工作站,甚至在云中進(jìn)行遠(yuǎn)程管理。
PyADI-IIO可以通過pip和conda進(jìn)行安裝,將控制按鈕表現(xiàn)為易于使用和歸檔記錄的屬性。它還按易于理解的形式(例如NumPy陣列或原生形式)提供數(shù)據(jù),在必要時(shí),還會(huì)處理設(shè)備的數(shù)據(jù)流轉(zhuǎn)換。這使PyADI-IIO易于添加到Jupyter Notebook之類的環(huán)境中,無需通過不同的工具或復(fù)雜的數(shù)據(jù)轉(zhuǎn)換即可輕松將數(shù)據(jù)傳輸?shù)綑C(jī)器學(xué)習(xí)管道中,讓開發(fā)人員可以集中精力開發(fā)算法,而不是處理某些困難的API或數(shù)據(jù)轉(zhuǎn)換。
圖8 機(jī)器學(xué)習(xí)模型開發(fā)流程
圖9 PyADI-IIO示例
MATLAB集成——連接到MATLAB
在MATLAB方面,通過Analog Devices Sensor Toolbox提供對(duì)CN0549及其組件的支持。這個(gè)工具箱與PyADI-IIO類似,提供針對(duì)不同組件的特性類別,將它們實(shí)施為MATLAB系統(tǒng)對(duì)象(MSO)。MSO是MathWorks開發(fā)人員可以用來連接硬件和不同軟件組件的一種標(biāo)準(zhǔn)化方式,提供先進(jìn)功能,幫助執(zhí)行代碼生成、Simulink支持和一般狀態(tài)管理。許多MATLAB用戶能夠在不了解的情況下,使用實(shí)施為MSO的MATLAB的各種功能,例如示波器或信號(hào)生成器。在圖10中,我們使用CN0532接口和DSP頻譜分析儀示波器,兩者都實(shí)施為MSO。同樣,和PyADI-IIO一樣,提供一個(gè)易于使用的接口供傳統(tǒng)的MATLAB用戶使用。
除了硬件連接之外,Sensor Toolbox還集成適用于HDL和C/C++的代碼生成工具。這些工具適用于開發(fā)、模擬和部署IP,甚至不熟悉HDL設(shè)計(jì)或工具,但了解MATLAB和Simulink的人員也可以使用。
圖10 使用示波器的Sensor Toolbox流傳輸示例
使用TensorFlow的分類示例
CN0549套件提供幾個(gè)示例,從基本數(shù)據(jù)流傳輸?shù)綑C(jī)器學(xué)習(xí)分類示例。關(guān)于時(shí)間序列數(shù)據(jù)的機(jī)器學(xué)習(xí),例如來自CN0532的振動(dòng)數(shù)據(jù),可以從幾個(gè)不同角度進(jìn)行理解。這可能包括支持向量機(jī)(SVM)、長短時(shí)記憶網(wǎng)絡(luò)(LSTM)模型,如果將數(shù)據(jù)直接解譯為時(shí)間序列的話,甚至包括自動(dòng)編碼器。但是,在許多情況下,將時(shí)間序列問題轉(zhuǎn)換為成像處理問題,并利用在該應(yīng)用領(lǐng)域開發(fā)的工具和豐富知識(shí)可能更為方便。
我們?cè)赑ython中看看這種方法。在隨PyADI-IIO提供的一個(gè)示例中,將CN0532安裝到振蕩風(fēng)扇上,然后進(jìn)行了一些測(cè)量。這些測(cè)量在不同的風(fēng)扇設(shè)置(Sleep、General、Allergen)下進(jìn)行,在每種模式下都會(huì)捕捉409,600個(gè)樣本。在圖11中查看這個(gè)數(shù)據(jù)時(shí),可以輕松確定Allergen用例的時(shí)域,但其他兩個(gè)用例則比較難以區(qū)分。雖然可以通過檢測(cè)來確認(rèn)這些用例,但在時(shí)域中使用算法來確認(rèn)這些用例會(huì)很容易出錯(cuò)。
為了幫助更好地區(qū)分這些用例,會(huì)將數(shù)據(jù)轉(zhuǎn)化為頻域,并使用頻譜圖來描繪不同頻率隨時(shí)間變化的濃度。與圖11相比,圖12所示的頻譜圖在數(shù)據(jù)上有更明顯的差異,但在時(shí)間維度上是一致的。這些頻譜圖是有效的圖像,現(xiàn)在可以使用傳統(tǒng)的圖像分類技術(shù)進(jìn)行處理。
將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集,將頻譜圖分別輸入僅由神經(jīng)網(wǎng)絡(luò)(NN)構(gòu)成的模型(包含三個(gè)致密層)和更小一些的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型。這兩種方法都是在TensorFlow中實(shí)現(xiàn)的,可以在不到100次的周期內(nèi)輕松收斂到接近100%測(cè)試驗(yàn)證。CNN使用大約1%的可調(diào)參數(shù)在大約一半的時(shí)間內(nèi)收斂,是目前最高效的設(shè)計(jì)。圖13提供關(guān)于精度和周期的培訓(xùn)收斂圖,以概述CNN的快速收斂。
圖11 時(shí)間序列中的風(fēng)扇振蕩數(shù)據(jù)
圖12 捕捉的振動(dòng)數(shù)據(jù)的頻譜圖
圖13 隨時(shí)間變化的CNN訓(xùn)練精度(用于繪制振動(dòng)頻譜圖)
在GitHub的PyADI-IIO源代碼樹下提供了此示例的所有Python腳本、手冊(cè)和數(shù)據(jù)集。由于提供了數(shù)據(jù)集,甚至可以在不使用CN0549硬件的情況下使用TensorFlow來展示示例。但是,使用硬件時(shí),可以將訓(xùn)練模型用于實(shí)時(shí)推理。
邊緣到云:轉(zhuǎn)向嵌入式解決方案
創(chuàng)建模型后,可將其部署用于推理或決策。采用CN0549時(shí),它可以安裝在遠(yuǎn)程PC上,從CN0540傳輸數(shù)據(jù)流,或是直接在嵌入式處理器上運(yùn)行。根據(jù)實(shí)施方案,將模型放到處理器中需要更多的工程工作,但可以將功效提高一個(gè)數(shù)量級(jí),且能夠?qū)崟r(shí)運(yùn)行。幸運(yùn)的是,在過去幾年里,用于部署機(jī)器學(xué)習(xí)模型的工具和軟件都取得了很大的發(fā)展。
使用FPGA
賽靈思公司和英特爾都提供高階合成(HLS)工具,將高階語言轉(zhuǎn)化成在FPGA上運(yùn)行的HDL代碼。它們通常會(huì)與TensorFlow、PyTorch或Caffe等Python框架集成,以幫助將模型轉(zhuǎn)換為IP內(nèi)核,從而允許工程師將IP部署到DE10-Nano、Cora Z7-07S或自定義系統(tǒng)上。然后,可以將這些IP內(nèi)核集成到ADI提供的開源HDL參考設(shè)計(jì)中。圖14顯示Vivado提供的Cora Z7-07S CN0540的屏幕截圖,其中包含注釋,其中側(cè)重顯示數(shù)據(jù)路徑。在該設(shè)計(jì)中,來自CN0540的數(shù)據(jù)通過SPI引腳讀取,24位樣本由SPI引擎解譯,傳輸?shù)紻MA控制器,再進(jìn)入存儲(chǔ)器。任何DSP或機(jī)器學(xué)習(xí)模型都可以直接插入數(shù)據(jù)路徑中這個(gè)管道。
圖14 Vivado(2019年1月)顯示的Cora Z7-07S HDL參考設(shè)計(jì)數(shù)據(jù)路徑
使用微處理器
它們無需將算法轉(zhuǎn)化為HDL層,而是可以直接在Arm內(nèi)核中運(yùn)行。根據(jù)數(shù)據(jù)速率和算法的復(fù)雜性,這個(gè)開發(fā)流程很合理,也更加簡單。相比HDL,為Arm內(nèi)核開發(fā)C代碼甚至Python所耗費(fèi)的開發(fā)資源和時(shí)間都更少,通常也更易于維護(hù)。
MATLAB Embedded Coder這樣的工具甚至可以簡化此流程,自動(dòng)將MATLAB轉(zhuǎn)化為可嵌入且優(yōu)化的C代碼,供Arm內(nèi)核使用?;蛘?,TensorFlow提供TensorFlow Lite等工具,它們是Python代碼庫的可嵌入的C版本,能夠更輕松地轉(zhuǎn)換為嵌入式目標(biāo)。
智能決策拓?fù)?/strong>
狀態(tài)監(jiān)控并非適用于所有硬件和軟件配置,所以CN0549采用了靈活的設(shè)計(jì)。我們?cè)诳紤]CbM異常檢測(cè)之類的問題時(shí),通??梢詮膬蓚€(gè)時(shí)間量程角度來解決:在一個(gè)時(shí)間量程,我們需要立即做出反應(yīng),例如在安全相關(guān)的場景中,在長期時(shí)間量程,更多的是關(guān)于維護(hù)或設(shè)備更換。兩者需要使用不同的算法、處理能力和方法。
在理想情況下,機(jī)器操作員將會(huì)擁有很大的數(shù)據(jù)湖來訓(xùn)練模型,可以無需干擾事件來處理短期檢測(cè),也可以持續(xù)從運(yùn)行設(shè)備傳輸數(shù)據(jù)流,以便進(jìn)行未來的維護(hù)預(yù)測(cè)。但是,對(duì)大多數(shù)操作員來說,情況并非如此,數(shù)據(jù)湖嚴(yán)重干涸。由于安全考量、地理位置、網(wǎng)絡(luò)或拓?fù)涞纫螅行┈F(xiàn)成的解決方案也很難執(zhí)行數(shù)據(jù)收集。面對(duì)這些困難,我們需要自定義程度更高的解決方案。
圖15 CbM網(wǎng)絡(luò)拓?fù)?/em>
CN0549是一個(gè)獨(dú)立系統(tǒng),提供多種連接選項(xiàng)。它運(yùn)行標(biāo)準(zhǔn)的Linux,所以傳統(tǒng)的網(wǎng)絡(luò)堆棧(例如以太網(wǎng)和Wi-Fi)可以開箱即用,甚至能在必要時(shí)連接蜂窩調(diào)制解調(diào)器。在實(shí)際應(yīng)用中,可以使用幾種出色的典型拓?fù)?,如圖15所示。
圖15最左側(cè)的配置是脫機(jī)收集數(shù)據(jù)示例,一般發(fā)生在偏遠(yuǎn)位置或無法聯(lián)網(wǎng)的地方。在這種情況下,平臺(tái)會(huì)配備大型存儲(chǔ)媒介,并按照計(jì)劃來收集數(shù)據(jù)。或者,其他兩個(gè)選項(xiàng)是將數(shù)據(jù)流傳輸至同一個(gè)端點(diǎn)。圖15中間的配置是隔離網(wǎng)絡(luò),可能僅供組織內(nèi)部使用,或者是偏遠(yuǎn)位置的一組用于集中收集數(shù)據(jù)的平臺(tái)。出于安全考慮,或者在無法聯(lián)網(wǎng)時(shí),可能需要這種配置。在這些配置下,CN0549易于設(shè)置,且能夠根據(jù)終端部署的特定需求來自定義。
最后一個(gè)配置是直接云選項(xiàng),每個(gè)平臺(tái)直接訪問互聯(lián)網(wǎng),并將測(cè)量數(shù)據(jù)推送至云。CN0549在Linux上運(yùn)行,所以該平臺(tái)可以通過Python等語言輕松使用不同的云供應(yīng)商(例如Microsoft Azure IoT或Amazon IoT Greengrass)的API,提供一種為新連接的設(shè)備構(gòu)建數(shù)據(jù)湖的簡單方式。
云和本地流程之間保持穩(wěn)定連接時(shí),如我們之前所探討的那樣,可以對(duì)不同算法進(jìn)行劃分,哪些是需要或可以在本地運(yùn)行的,哪些是可以在云中運(yùn)行的。然后自然地針對(duì)算法復(fù)雜性處理能力、事件延遲和云傳輸帶寬限制等的要求進(jìn)行權(quán)衡和取舍。但是,由于非常靈活,因此這些因素很容易考慮決斷。
結(jié)論
CN0549 CbM平臺(tái)為設(shè)計(jì)人員開發(fā)應(yīng)用提供了系統(tǒng)靈活性和大量軟件資源。本文深入探討軟件堆棧,并圍繞如何使用不同組件來實(shí)施CbM和預(yù)測(cè)性維護(hù)(PdM)開發(fā)展開討論。由于軟件、HDL、原理圖以及與數(shù)據(jù)科學(xué)工具集成的開放性,設(shè)計(jì)人員可以在整個(gè)堆棧中充分利用其終端系統(tǒng)所需的組件。總之,這種狀態(tài)監(jiān)控設(shè)計(jì)提供了一款易于使用的開箱即用解決方案,包括開源軟件和硬件,以提供靈活性,讓設(shè)計(jì)人員能夠在更短時(shí)間內(nèi)實(shí)現(xiàn)更好的自定義設(shè)計(jì)。
評(píng)論