基于FPGA的神經(jīng)振蕩器設(shè)計(jì)及優(yōu)化
摘 要: 為神經(jīng)振蕩器提出了一種高效的FPGA實(shí)現(xiàn)方案,介紹了一種改進(jìn)的分布式算法(DA),以便于最大限度地利用FPGA上的查找表(LUT)資源。整個(gè)系統(tǒng)在Matlab/Simulink下采用Altera公司的DSP Builder 構(gòu)建。該方法節(jié)約了74%的查找表、75%的寄存器和100%的嵌入式乘法器資源。同時(shí),該方案得到了令人滿意的結(jié)果,實(shí)驗(yàn)結(jié)果同仿真結(jié)果的相關(guān)系數(shù)高達(dá)0.99。
關(guān)鍵詞: 神經(jīng)振蕩器;分布式算法;FPGA;查找表
神經(jīng)振蕩器是一種能夠在缺乏感官反饋或者高級控制命令的情況下,通過協(xié)調(diào)模式自發(fā)地產(chǎn)生規(guī)律輸出的神經(jīng)電路。神經(jīng)振蕩器已經(jīng)被廣泛地應(yīng)用于機(jī)器人的智能控制與生物研究中[1],成為國內(nèi)外的研究熱點(diǎn)。相比于軟件編程,神經(jīng)振蕩器的硬件實(shí)現(xiàn)具有高速、并行處理、抗干擾等優(yōu)點(diǎn),更接近于其原有的生物特性,因此引起了許多研究者的關(guān)注。在近些年來,許多神經(jīng)振蕩器的硬件實(shí)現(xiàn)工作是基于模擬器件完成的[2-3]。雖然模擬電路能夠與生俱來地實(shí)現(xiàn)夠非線性函數(shù),其功耗也相對較低,但與可編程邏輯器件(FPGA)相比,基于超大規(guī)模集成電路(VLSI)的工作需要相對長的設(shè)計(jì)周期,同時(shí)缺乏靈活性和兼容性。另一方面,F(xiàn)PGA已經(jīng)被廣泛地應(yīng)用于人工神經(jīng)網(wǎng)絡(luò)(ANN)和智能控制電路硬件的實(shí)現(xiàn)[4-5],但基于FPGA的神經(jīng)振蕩器實(shí)現(xiàn)國外才剛剛開始,國內(nèi)尚未見報(bào)道。且之前的工作大多基于乘法器的直接實(shí)現(xiàn)方法[6],未能充分利用FPGA的資源。
1 神經(jīng)振蕩器及其應(yīng)用
神經(jīng)振蕩器是一種耦合振蕩系統(tǒng),通過神經(jīng)元之間的相互抑制實(shí)現(xiàn)穩(wěn)定的相位互鎖,并產(chǎn)生自激振蕩激發(fā)肢體做節(jié)律運(yùn)動[7]。在仿生機(jī)器人控制中,被控制對象往往存在非線性、系統(tǒng)工作點(diǎn)變化劇烈等特點(diǎn),傳統(tǒng)的控制往往是建立在單純依靠嚴(yán)格和精確數(shù)學(xué)模型基礎(chǔ)上,但這種方法已難以滿足復(fù)雜多變且環(huán)境未知的機(jī)器人控制需求[8]。同時(shí),基于模型的機(jī)器人控制方法模型復(fù)雜、解不唯一、非結(jié)構(gòu)環(huán)境適應(yīng)性較差等,不利于實(shí)現(xiàn)仿生機(jī)器人的快速穩(wěn)定運(yùn)動[9]。神經(jīng)振蕩器具有非線性耦合的優(yōu)點(diǎn),很適合仿生機(jī)器人的節(jié)律運(yùn)動控制,能達(dá)到快速穩(wěn)定的效果。此外,可以通過調(diào)整有限的神經(jīng)振蕩器參數(shù),建立滿足具體要求不同的機(jī)器人與外界環(huán)境交互的復(fù)雜運(yùn)動學(xué)、動力學(xué)模型,而不需要對整個(gè)系統(tǒng)建模,機(jī)器人的控制難度降低??傊?,基于神經(jīng)振蕩器控制的機(jī)器人具有以下優(yōu)點(diǎn):(1)自動穩(wěn)定性;(2)較強(qiáng)的環(huán)境適應(yīng)性;(3)參數(shù)化建模[8-9]。
圖1為神經(jīng)振蕩器應(yīng)用于兩足機(jī)器人的一個(gè)例子。該兩足機(jī)器人包含七個(gè)關(guān)節(jié),其中包括一個(gè)軀關(guān)節(jié)(也可稱之為腰關(guān)節(jié))、兩個(gè)臀關(guān)節(jié)、兩個(gè)膝關(guān)節(jié)和兩個(gè)踝關(guān)節(jié)[10]。每一個(gè)神經(jīng)振蕩器由一對相互抑制的神經(jīng)元構(gòu)成,每個(gè)關(guān)節(jié)由一個(gè)神經(jīng)振蕩器控制。這樣,就可以將兩足機(jī)器人轉(zhuǎn)化為七個(gè)神經(jīng)振蕩器控制的神經(jīng)模式發(fā)生器系統(tǒng),圖1(a)所示為模式發(fā)生器系統(tǒng)的組成。通過調(diào)整振蕩器的參數(shù),使各關(guān)節(jié)協(xié)調(diào)地做振蕩運(yùn)動,可以實(shí)現(xiàn)兩足機(jī)器人穩(wěn)定地行走等運(yùn)動。
2 分布式算法的改進(jìn)
傳統(tǒng)的分布式算法要求輸入為小數(shù)或整數(shù)。在FPGA系統(tǒng)中,一般的輸入信號通過二進(jìn)制小數(shù)點(diǎn)轉(zhuǎn)換模塊轉(zhuǎn)換為純小數(shù)(或者是整數(shù)),輸出則剛好相反。本文對分布式算法做了修改,使其不需要小數(shù)點(diǎn)轉(zhuǎn)移過程。對于某一有符號的定點(diǎn)數(shù)xk,若其同時(shí)包含整數(shù)部分和小數(shù)部分,xk可以用一個(gè)二進(jìn)制數(shù)bN-1,…,b1,b0,b-1,…,b-M表示(共N+M=Q位,N位整數(shù)位,M位小數(shù)位)。bk,N-1為符號位,當(dāng)bk,N-1=1時(shí),xk為負(fù)數(shù),bk,N-1=0時(shí),xk為正數(shù);bk,m為最低有效位,代表xk能達(dá)到的最高精度。
同傳統(tǒng)的分布式方法一樣,這里的Lm事先輸入到查找表中,通過加權(quán)累加器對查找表的輸出進(jìn)行變更、求和。對于K個(gè)輸入且輸出為y的分布式算法的原理如圖2所示[10]。