九九色综合,91sss,亚洲国产综合在线,伊人婷婷色,国产香蕉精品,国产第四页

內頁廣告7

熱搜關鍵詞: PCIe高速數據采集卡RFSOC高速數據采集軟件無線電平臺VPX高速數據采集卡高速信號采集卡PCIe數據采集數字信號處理

您的當前位置:首頁 » 資訊中心 » 技術動態 » 32通道PCIe高速采集存儲與信號分析系統

32通道PCIe高速采集存儲與信號分析系統

返回列表 來源:坤馳科技 查看手機網址
掃一掃!32通道PCIe高速采集存儲與信號分析系統掃一掃!
瀏覽:- 發布日期:2016-03-28 14:10:00【

 一、概述

32路PCIE高速采集存儲

 

32路同步數據采集系統可以完成32路數據的同步采集、存儲以及實時信號處理等功能,適用于實驗室振動狀態在線檢測、噪聲檢測、溫度試驗、環境試驗、雷管引爆延遲時間檢測等應用。
32路同步數據包括單個板卡通道之間的同步和多個板卡之間的同步,同步后的數據先存在板載DDR3,再通過PCIe接口把數據傳輸到上位機,如果采集的是瞬態信號,可以使用Standard模式,可以把數據都存儲在板載DDR3上,但要求采集的數據不能超過板載DDR3存儲容量;如果采集的是連續信號,可以使用FIFO模式,數據可以一邊存儲在DDR3上,一邊把數據傳輸給上位機,存儲的時間的長短受限于磁盤容量的大小。
PCIe高速采集存儲系統由數據采集模塊、高速數據存儲模塊、GPU實時處理模塊、便攜式工控機等部分組成。可以實現信號的實時采集存儲,并且通過調用Window API的方式實現了比一般方式更快的數據存儲速度。
二、應用方向
  •  雷達方向

具備多次觸發的連續數據流模式

可長時間進行雷達信號仿真和模擬

  •  超聲方向
具備多次觸發的連續數據流模式
觸發間底死區時間(<80ns
  •  通信方向
時域和頻域分析
高級顯示模式
  •  航空航天方向
連續數據流存儲
超高的數據傳輸速度(>3.4GB/s
  •  天文方向
高采樣率和高分辨率
時域和頻域分析
低噪聲模擬信號調理電路
  •  聲學方向
低噪聲與高分辨率

SNR>90dB)與SFDR>105dB

上百個同步通道
  •  半導體測試方向

SNR>90dB)與SFDR>105dB

功能齊全的模擬信號調理電路
  •  激光方向
5GS/s采樣率與寬帶寬
板載分塊統計、峰值檢測功能
 
三、術語說明
 
PCIe

是新的總線和接口標準,PCIe屬于高速串行點對點雙通道高帶寬傳輸,所連接的設備分配獨享通道帶寬,不共享總線帶寬,主要支持主動電源管理,錯誤報告,端對端的可靠性傳輸,熱插拔以及服務質量(QOS)等功能。PCIe交由PCI-SIGPCI特殊興趣組織)認證發布后才改名為“PCI-Express”,簡稱“PCI-E”

DMA

(Direct Memory Access,直接內存存取) 是所有現代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依于 CPU 的大量中斷負載。

ADC

模擬到數字式轉換器

CreateFile
是一個多功能的函數,可打開或創建以下對象,并返回可訪問的句柄:控制臺,通信資源,目錄(只讀打開),磁盤驅動器,文件,郵槽,管道。
ReadFile

文件指針指向的位置開始將數據讀出到一個文件中,且支持同步和異步操作如果文件打開方式沒有指明FILE_FLAG_OVERLAPPED的話,當程序調用成功時,它將實際讀出文件的字節數保存到lpNumberOfBytesRead指明的地址空間中。

WriteFile

WriteFile函數將數據寫入一個文件。該函數比fwrite函數要靈活的多。也可將這個函數應用于對通信設備、管道、套接字以及郵槽的處理

fwrite

fwriteC語言函數,指向文件寫入一個數據塊。

nQTStoreInit
輸入參數為板卡信息塊,通過調用此接口申請好 Ping-Pang buffer
nQTStoreData
根據用戶指定的文件名創建好文件,并且開始采集存儲。
nQTStoreStop

停止采集和存儲。

nQTFreeMemory

釋放 Ping-Pang buffer 的內存。

 
四、環境說明
 
硬件平臺
  • 便攜式工控機

微星X99A SLI PLUS主板

Intel i7-5820k 處理器

金士頓 8GB DDR4 內存x4

  • 數據采集模塊:

pcie高速采集存儲

Spectrum M2i.49128通道,16bit10MS/s采樣率AD采集卡

±200mV到±10V軟件可調增益設置

50歐姆或1M歐姆輸入阻抗
板載高穩定度采集時鐘發生器,支持外時鐘和外觸發同步輸入

PCIe2.0 x1接口

512MB板載內存
Star-Hub實現多板卡同步:

多板卡同步

  • GUP實時處理模塊:

lGUP實時處理模塊

NVIDIA GeForce GTX 980

Maxwell架構

支持CUDA 并行處理

CUDA處理器核心達2048
  • 數據存儲模塊

4TB RAID0磁盤陣列

連續存儲速度可達1.2GB/s

磁盤陣列由41TB三星固態硬盤組成,每個固態硬盤支持大500MS/s(實測)的寫入速度,組成RAID0陣列后支持大1.2GB/s(實測)的寫入速度。RAID0磁盤沒有奇偶數目的要求,數據被平均分割存儲到多個磁盤上,總的讀寫速度就是磁盤數量乘以單個磁盤的讀寫速度,缺點在于一塊磁盤損壞,則整個磁盤陣列即壞,數據無法被修復。

軟件平臺
  • Win7 x64操作系統
  • SBench6操作軟件

Control CenterControl centerspectrum公司的專有的控制采集卡校準、license激活、底層kernel控制的軟件。啟動control centerKernel Register Settings,可以設置底層kernel開辟的物理連續地址空間,用于DMA大數據量存儲使用。

lSBench6操作軟件

我們知道,目前的操作系統中,非常嚴格的把物理存儲空間、內核存儲空間、上層用戶存儲空間區分開來。
Windows操作系統對內存的管理是按照4kByte來進行的。
對于軟件來說,申請到的虛擬內存都是通過內存管理單元每4kByte來進行分配的。對于上位機軟件來說,分配1個很大的內存空間,在虛擬內存上是連續的,但是在物理地址上有可能是很多個獨立的4kByte組成的。

當使用虛擬的內存來進行DMA傳輸數據的時候,這個過程是非常復雜的。

因為,DMA傳輸數據是直接通過物理地址傳遞的,這樣DMA傳輸就得通過每個獨立的4kByte的頁來進行傳輸,這樣每次DMA傳輸的數據都是在不同物理地址4kByte頁上切換到降低DMA傳輸的效率。

Spectrum kernel driverSpectrum公司通過自己底層驅動,可以通過軟件向底層申請開辟一段物理地址連續的地址空間,申請完,需要重啟電腦,重啟電腦,在PCboot的過程中,需要多花費平時的80%的啟動時間。

五、總體設計
 
硬件總體框架:

硬件總體框架

 
數據采集系統在FIFO模式下數據的傳輸存儲速度主要受限于PCIE接口的傳輸速度與磁盤的寫入速度。
本系統數據采集卡采用PCIex1 Gen2.0接口,數據傳輸速度可達160MB/s。采集卡為16bit,采樣率高為10MS/s,這時單個采集卡在FIFO模式下需傳輸的數據量為:
16bit/2*10MS/s*8=160MB/s

恰好達到PCIe接口的極限速度。采集到的信號在寫入磁盤時總的數據量為:

160MB/s*4=640MB/s
寫入速度超過單個固態硬盤的寫入速度,但使用RAID0陣列時,則可以滿足寫入的需求。
六、高速存儲模塊

限制文件存儲速度的終瓶頸還是磁盤的固有特性,我們所能做到只是改善軟件的實現去逼近硬盤的極限讀寫速度。一般windows系統粘貼拷貝文件的時候,影響存儲速度地方就在于它利用了windows文件緩存機制,當你拷貝一個大文件時,windows會根據你要拷貝的文件大小緩存很大一部分到系統緩存,這時候你會看到系統緩存瞬間飆漲,機器性能大大降低,所以我們要避免使用windows緩存機制,并且盡量讀寫連續的文件塊。

利用Window API讀寫文件
 

一般來說,我們操作一個windows I/O句柄用的是windows文件讀寫系列APICreateFile, ReadFile, WriteFile等,這些API不僅可以讀寫文件句柄,所有的I/O設備句柄都能通過這些API來操作。比如socket描述符, 串口描述符,管道描述符等。通過設置他們的參數,我們可以選擇以不同的方式操作IO

對于讀寫速度,重要的是dwFlagsAndAttrib參數,FILE_FLAG_NO_BUFFERING指示系統不使用快速緩沖區或緩存,當和FILE_FLAG_OVERLAPPED組合,該標志給出大的異步操作量,因為I/O不依賴內存管理器的異步操作。然而,一些I/O操作將會運行得長一些,因為數據沒有控制在緩存中。
當使用FILE_FLAG_NO_BUFFERING打開文件進行工作時,程序必須達到下列要求:

1. 文件的存取開頭的字節偏移量必須是扇區尺寸的整倍數。

2. 文件存取的字節數必須是扇區尺寸的整倍數。例如,如果扇區尺寸是512字節。程序就可以讀或者寫5121024或者2048字節,但不能夠是335,981或者7171字節。

3. 進行讀和寫操作的地址必須在扇區的對齊位置,在內存中對齊的地址是扇區。尺寸的整倍數。一個將緩沖區與扇區尺寸對齊的途徑是使用VirtualAlloc函數。

它分配與操作系統內存頁大小的整倍數對齊的內存地址.這塊內存在地址中同樣與扇區尺寸大小的整倍數對齊。程序可以通過調用GetDiskFreeSpace來確定扇區的尺寸。
 
高速采集存儲配置
為了實現高速采集存儲,此處用到了windows多線程編程,一個線程接收板卡采集到的數據,一個線程負責寫文件。為了保證存儲文件的速度需要連續寫入大文件,通過申請兩個大小相同的buffer,執行ping-pang寫文件操作。
 

高速采集存儲配置

 

Buf0Buf1收發數據為ping-pang原理,Buf0Buf1的狀態為emptyfull,當數據通過TX DMA讀出后,Buf的狀態置為empty,當數據通過RX DMA寫入后,Buf的狀態置為fullRX DMATX DMA的狀態分別有WrBuf0WrBuf1RdBuf0RdBuf1OpCmptNotStartTXHungry0TXHungry1幾種狀態。

對于ADC接收數據方向,RX DMAbuf0產生完成中斷后,首先開始寫buf1操作,然后建立寫buf0DMA接收鏈表。同樣當RX DMAbuf1產生完成中斷后,首先開始寫buf0操作,然后建立寫buf1DMA接收鏈表。

對于PCIE發送數據方向,TX DMAbuf0產生完成中斷后,首先開始讀buf1操作,然后建立讀buf0DMA發送鏈表。同樣當TX DMAbuf1產生完成中斷后,首先開始讀buf0操作,然后建立讀buf1DMA發送鏈表。
根據PC機實際內存大小,設置相應的buffer大小,buffer需要盡可能大。通過API工程里面的宏定義設置buffer的大小。
 

buffer的大小

另外幾個與高速存儲相關的API如下圖:
 

與高速存儲相關的API

 

nQTStoreInit輸出參數為板卡信息塊,通過調同此接口申請好Ping-Pang buffer,由于運行時間較長,所以建議放置在配置過程中執行。nQTStoreData創建好文件,并且開始采集存儲。在執行了一段時間的采集后可以通過調用nQTStoreStop來停止采集和存儲。值得注意的是程序通過Ping-Pang機制存儲所以會導致后得到的文件大小是Buffer大小的整數倍,但是會保證上位機獲取到的數據全部都存入到文件中。為了實現循環開始存儲,停止存儲操作,避免此過程中內存的重復申請與釋放導致降低效率,把內存釋放的操作以下API中:
 

nQTStoreInit輸出參數為板卡信息塊

程序運行

 

在程序運行的結尾,通過調用nQTFreeMemrory來釋放Ping-Pang buffer的內存。這樣就完成了從打開板卡進行數據采集到數據存儲到工控機硬盤中的全過程。
 
與一般存儲方式速度對比
一般存儲方式通過調用C語言中的fwrite進行寫數據的操作,但這樣的方式在數據量巨大的情況下與Writefile這種調用Windows API方式進行對比時速度差異明顯,在使用Writefile方式進行大量數據寫入時速度可逼近硬盤的寫入速度。
下圖為寫入1GB數據時使用fwrite進行寫數據操作時實測的速度:
 

寫入1GB數據時使用fwrite進行寫數據操作時實測的速度

寫入1GB數據時使用fwrite進行寫數據操作時實測的速度

下圖為寫入1GB數據時使用WriteFile進行寫數據操作時實測的速度:

寫入1GB數據時使用fwrite進行寫數據操作時實測的速度

寫入1GB數據時使用WriteFile進行寫數據操作時實測的速度

由圖中測試數據可知,使用WriteFile進行寫數據時速度可達1193.46MB/s,遠遠快于使用fwrite669.146MB/s的寫入速度。當寫入的數據量越大時,WriteFile的優勢越明顯,直至逼近磁盤陣列的極限速度。
七、GPU分析處理模塊
 
NVIDIA GPU介紹

GPU內存管理

圖形處理單元CPU英文全稱Graphic Processing UnitGPU是相對于CPU的一個概念,NVIDIA公司在1999年發布GeForce256圖形處理芯片時首先提出GPU的概念。GPU使顯卡減少了對CPU的依賴,并進行部分原本CPU的工作,主要是并行計算部分。CPU具有強大的浮點數編程和計算能力,在計算吞吐量和內存帶寬上,現代的GPU遠遠超過CPU
使用NVIDIA CUDA Fast Fourier Transform Library提供了一個簡單計算FFT運算的接口,而不用用戶自己實現FFT算法。
 
GPU內存管理

lCPU FFT分析

Host     CPU及系統的內存稱為主機
Device    GPUGPU本身的顯示內存稱為設備

cudaMalloc()C語言中的malloc函數一樣,用戶函數分配線性內存空間。

cudaMemcpy():與C語言中的memcpy函數一樣,只是此函數可以在主機內存和GPU內存之間互相拷貝數據。

cudaFree()  C語言中的free函數一樣,只是此函數釋放的是

cudaMalloc  分配的內存,主要用于釋放線性內存空間。

 

CPU與GPU進行FFT分析速度對比
 
lCPU FFT分析
MATLAB10M Sample的數據進行FFT運算,時間0.594697s,如下圖:

CPU與GPU進行FFT分析速度對比

lGPU FFT分析
使用GPU進行FFT計算,FFT點數10M Sample,運行時間0.00006175s

lGPU FFT分析

GPU FFT運算之后的結果,10M個實部real10M個虛部imag,用MATLAB進行仿真,如下圖:

用MATLAB進行仿真

推薦閱讀

    【本文標簽】:高速采集卡 高速信號采集卡 高速數據采集卡
    【責任編輯】:坤馳科技版權所有:轉載請注明出處