AIO288/1 BACHMANN 噪聲數據經DSP壓縮后可以通過并行EMIF總線傳輸至FPGA。但為降低數據傳輸誤碼率,提高系統穩定性,本設計采用DSP的McBSP0串口將壓縮后的數據以串行數據流的方式傳送至FPGA。McBSP0傳輸單元的大小設置為48 bit,包括4 bit起始位、32位數據位和12 bit停止位。FPGA將串行接收的壓縮數據轉換成8 bit并行數據并將其寫入到內部4 KB FIFO中。FPGA通過422接口與外部設備通信,在接收到讀數命令后判斷4 KB FIFO是否達到半滿。如果FIFO達到半滿,就讀取FIFO中的數據,并進行HDLC協議編碼和幀格式編碼后發送出去;否則采用填充幀技術,將預先定義好的一組固定幀結構數據發送給外部設備。
4 DSP程序設計
基于C語言的各種常見壓縮算法的開發都已很成熟,ARC算法的源程序也容易調研,算法的具體實現過程在此不再贅述。本設計將ARC源程序移植到DSP中實現算法的壓縮功能,DSP上電啟動或者復位后,從 Flash中加載程序,進入主函數main()完成外部FIFO數據讀入、啟動ARC壓縮,讀寫SDRAM和數據輸出等工作工作。程序流程如圖4所示。
當DSP檢測到外部8 KB FIFO半滿信號后會讀取2 048 B噪聲數據到內部4個緩存中,由于4路噪聲信號采樣時僅相差一個采樣點,故各路噪聲數據相差一個字節。DSP內4路噪聲數據對應的緩存幾乎同時達到2 048 B, DSP需要同時對4路噪聲數據進行編碼,這會使DSP長時間處于繁忙狀態而不能進行采樣數據的讀入和壓縮數據的輸出,容易引起FPGA內部8 KB FIFO溢出和4 KB FIFO的讀空。
如果采用中斷方式打斷壓縮進程、讀入量化數據和輸出壓縮數據,則可能造成DSP內數據量過大,超出DSP片內RAM容量。這里將DSP內的4個緩存預設初值分別設為1 536 B、1 024 B、512 B和0 B,DSP每次從FPGA內部FIFO中讀取2 048 B數據,則DSP內每個緩存增加512 B。DAP次讀取FIFO,路噪聲數據對應的緩存達到2 048 B,進行編碼、輸出后,該緩存數據量變為0。
此時,4路緩存中的字節數變為0、1 536、1 024和512。DSP第二次讀取FIFO后,第2路數據緩存達到2 048 B,完成對第二路噪聲數據的編碼、傳輸。如此循環執行,實現每次只對一路噪聲數據進行處理,保證了數據的連續均勻流動。
5 測試驗證與分析
采用測試系統對設計的噪聲壓縮裝置的性能進行了驗證,測試系統的測試臺向噪聲壓縮裝置提供4路信號來模擬噪聲傳感器的輸入,噪聲壓縮裝置對輸入信號完成壓縮后將數據回傳給測試臺并由測試臺將壓縮數據上傳至上位機。上位機對壓縮數據先進行數據結構分析,如果數據結構正確,就按照HDLC協議將數據解碼并去除填充數據和幀標識。之后根據ARC算法將噪聲數據解壓還原并分離得到各路噪聲原始數據,上位機對各路噪聲原始數據進行處理,還原出各路信號的原始波形。
給噪聲無損壓縮裝置的噪聲信號輸入接口輸入信號,其中第1路為幅值2 V、頻率25 Hz的正弦波,第2路為幅值3 V、頻率25 Hz的正弦波,第3路為幅值2 V、頻率50 Hz的正弦波,第4路為幅值2 V、頻率25 Hz的矩形波。
|