熱搜關(guān)鍵詞: PCIe高速數(shù)據(jù)采集卡高速采集卡高速數(shù)據(jù)采集軟件無線電平臺VPX高速數(shù)據(jù)采集卡高速信號采集卡PCIe數(shù)據(jù)采集數(shù)字信號處理
一、概述
具備多次觸發(fā)的連續(xù)數(shù)據(jù)流模式
可長時間進(jìn)行雷達(dá)信號仿真和模擬
高SNR(>90dB)與SFDR(>105dB)
高SNR(>90dB)與SFDR(>105dB)
PCIe
|
是新的總線和接口標(biāo)準(zhǔn),,PCIe屬于高速串行點對點雙通道高帶寬傳輸,所連接的設(shè)備分配獨享通道帶寬,,不共享總線帶寬,,主要支持主動電源管理,錯誤報告,,端對端的可靠性傳輸,,熱插拔以及服務(wù)質(zhì)量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊興趣組織)認(rèn)證發(fā)布后才改名為“PCI-Express”,,簡稱“PCI-E”,。 |
DMA
|
(Direct Memory Access,直接內(nèi)存存取) 是所有現(xiàn)代電腦的重要特色,,它允許不同速度的硬件裝置來溝通,,而不需要依于 CPU 的大量中斷負(fù)載。 |
ADC
|
模擬到數(shù)字式轉(zhuǎn)換器 |
CreateFile
|
是一個多功能的函數(shù),,可打開或創(chuàng)建以下對象,,并返回可訪問的句柄:控制臺,通信資源,,目錄(只讀打開),,磁盤驅(qū)動器,文件,,郵槽,,管道。
|
ReadFile
|
從文件指針指向的位置開始將數(shù)據(jù)讀出到一個文件中,,且支持同步和異步操作如果文件打開方式?jīng)]有指明FILE_FLAG_OVERLAPPED的話,,當(dāng)程序調(diào)用成功時,它將實際讀出文件的字節(jié)數(shù)保存到lpNumberOfBytesRead指明的地址空間中,。 |
WriteFile
|
WriteFile函數(shù)將數(shù)據(jù)寫入一個文件,。該函數(shù)比fwrite函數(shù)要靈活的多。也可將這個函數(shù)應(yīng)用于對通信設(shè)備,、管道,、套接字以及郵槽的處理 |
fwrite
|
fwrite是C語言函數(shù),指向文件寫入一個數(shù)據(jù)塊,。 |
nQTStoreInit
|
輸入?yún)?shù)為板卡信息塊,,通過調(diào)用此接口申請好 Ping-Pang buffer。
|
nQTStoreData
|
根據(jù)用戶指定的文件名創(chuàng)建好文件,,并且開始采集存儲,。
|
nQTStoreStop
|
停止采集和存儲。 |
nQTFreeMemory
|
釋放 Ping-Pang buffer 的內(nèi)存,。 |
微星X99A SLI PLUS主板
Intel i7-5820k 處理器
金士頓 8GB DDR4 內(nèi)存x4
Spectrum M2i.4912:8通道,16bit,,10MS/s采樣率AD采集卡
±200mV到±10V軟件可調(diào)增益設(shè)置
PCIe2.0 x1接口
NVIDIA GeForce GTX 980
支持CUDA 并行處理
4TB RAID0磁盤陣列
磁盤陣列由4塊1TB三星固態(tài)硬盤組成,每個固態(tài)硬盤支持大500MS/s(實測)的寫入速度,,組成RAID0陣列后支持大1.2GB/s(實測)的寫入速度,。RAID0磁盤沒有奇偶數(shù)目的要求,數(shù)據(jù)被平均分割存儲到多個磁盤上,,總的讀寫速度就是磁盤數(shù)量乘以單個磁盤的讀寫速度,,缺點在于一塊磁盤損壞,則整個磁盤陣列即壞,,數(shù)據(jù)無法被修復(fù),。
Control Center:Control center是spectrum公司的專有的控制采集卡校準(zhǔn)、license激活,、底層kernel控制的軟件,。啟動control center有Kernel Register Settings,可以設(shè)置底層kernel開辟的物理連續(xù)地址空間,,用于DMA大數(shù)據(jù)量存儲使用,。
當(dāng)使用虛擬的內(nèi)存來進(jìn)行DMA傳輸數(shù)據(jù)的時候,,這個過程是非常復(fù)雜的。
因為,,DMA傳輸數(shù)據(jù)是直接通過物理地址傳遞的,,這樣DMA傳輸就得通過每個獨立的4kByte的頁來進(jìn)行傳輸,這樣每次DMA傳輸?shù)臄?shù)據(jù)都是在不同物理地址4kByte頁上切換到降低DMA傳輸?shù)男省?/span>
Spectrum kernel driver:Spectrum公司通過自己底層驅(qū)動,,可以通過軟件向底層申請開辟一段物理地址連續(xù)的地址空間,,申請完,需要重啟電腦,,重啟電腦,,在PC機(jī)boot的過程中,需要多花費平時的80%的啟動時間,。
恰好達(dá)到PCIe接口的極限速度,。采集到的信號在寫入磁盤時總的數(shù)據(jù)量為:
限制文件存儲速度的終瓶頸還是磁盤的固有特性,,我們所能做到只是改善軟件的實現(xiàn)去逼近硬盤的極限讀寫速度,。一般windows系統(tǒng)粘貼拷貝文件的時候,影響存儲速度地方就在于它利用了windows文件緩存機(jī)制,,當(dāng)你拷貝一個大文件時,,windows會根據(jù)你要拷貝的文件大小緩存很大一部分到系統(tǒng)緩存,這時候你會看到系統(tǒng)緩存瞬間飆漲,,機(jī)器性能大大降低,,所以我們要避免使用windows緩存機(jī)制,并且盡量讀寫連續(xù)的文件塊,。
一般來說,,我們操作一個windows I/O句柄用的是windows文件讀寫系列API:CreateFile, ReadFile, WriteFile等,,這些API不僅可以讀寫文件句柄,所有的I/O設(shè)備句柄都能通過這些API來操作,。比如socket描述符, 串口描述符,,管道描述符等,。通過設(shè)置他們的參數(shù),,我們可以選擇以不同的方式操作IO。
1. 文件的存取開頭的字節(jié)偏移量必須是扇區(qū)尺寸的整倍數(shù),。
2. 文件存取的字節(jié)數(shù)必須是扇區(qū)尺寸的整倍數(shù)。例如,,如果扇區(qū)尺寸是512字節(jié),。程序就可以讀或者寫512,1024或者2048字節(jié),,但不能夠是335,981或者7171字節(jié),。
3. 進(jìn)行讀和寫操作的地址必須在扇區(qū)的對齊位置,在內(nèi)存中對齊的地址是扇區(qū),。尺寸的整倍數(shù),。一個將緩沖區(qū)與扇區(qū)尺寸對齊的途徑是使用VirtualAlloc函數(shù)。
Buf0和Buf1收發(fā)數(shù)據(jù)為ping-pang原理,,Buf0和Buf1的狀態(tài)為empty和full,,當(dāng)數(shù)據(jù)通過TX DMA讀出后,,Buf的狀態(tài)置為empty,當(dāng)數(shù)據(jù)通過RX DMA寫入后,,Buf的狀態(tài)置為full,。RX DMA和TX DMA的狀態(tài)分別有WrBuf0,WrBuf1,,RdBuf0,,RdBuf1,OpCmpt,,NotStart,,TXHungry0,TXHungry1幾種狀態(tài),。
對于ADC接收數(shù)據(jù)方向,,RX DMA寫buf0產(chǎn)生完成中斷后,首先開始寫buf1操作,,然后建立寫buf0的DMA接收鏈表,。同樣當(dāng)RX DMA寫buf1產(chǎn)生完成中斷后,首先開始寫buf0操作,,然后建立寫buf1的DMA接收鏈表,。
下圖為寫入1GB數(shù)據(jù)時使用WriteFile進(jìn)行寫數(shù)據(jù)操作時實測的速度:
cudaMalloc(): 與C語言中的malloc函數(shù)一樣,,用戶函數(shù)分配線性內(nèi)存空間。
cudaMemcpy():與C語言中的memcpy函數(shù)一樣,,只是此函數(shù)可以在主機(jī)內(nèi)存和GPU內(nèi)存之間互相拷貝數(shù)據(jù),。
cudaFree(): 與C語言中的free函數(shù)一樣,只是此函數(shù)釋放的是
cudaMalloc: 分配的內(nèi)存,,主要用于釋放線性內(nèi)存空間,。
對GPU FFT運算之后的結(jié)果,,10M個實部real和10M個虛部imag,,用MATLAB進(jìn)行仿真,如下圖: