熱搜關(guān)鍵詞: PCIe高速數(shù)據(jù)采集卡RFSOC高速數(shù)據(jù)采集軟件無線電平臺VPX高速數(shù)據(jù)采集卡高速信號采集卡PCIe數(shù)據(jù)采集數(shù)字信號處理
一,、概述
具備多次觸發(fā)的連續(xù)數(shù)據(jù)流模式
可長時(shí)間進(jìn)行雷達(dá)信號仿真和模擬
高SNR(>90dB)與SFDR(>105dB)
高SNR(>90dB)與SFDR(>105dB)
PCIe
|
是新的總線和接口標(biāo)準(zhǔn),PCIe屬于高速串行點(diǎn)對點(diǎn)雙通道高帶寬傳輸,,所連接的設(shè)備分配獨(dú)享通道帶寬,,不共享總線帶寬,主要支持主動電源管理,,錯(cuò)誤報(bào)告,,端對端的可靠性傳輸,熱插拔以及服務(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
|
是一個(gè)多功能的函數(shù),,可打開或創(chuàng)建以下對象,并返回可訪問的句柄:控制臺,,通信資源,,目錄(只讀打開),磁盤驅(qū)動器,,文件,,郵槽,管道,。
|
ReadFile
|
從文件指針指向的位置開始將數(shù)據(jù)讀出到一個(gè)文件中,,且支持同步和異步操作如果文件打開方式?jīng)]有指明FILE_FLAG_OVERLAPPED的話,當(dāng)程序調(diào)用成功時(shí),,它將實(shí)際讀出文件的字節(jié)數(shù)保存到lpNumberOfBytesRead指明的地址空間中,。 |
WriteFile
|
WriteFile函數(shù)將數(shù)據(jù)寫入一個(gè)文件。該函數(shù)比fwrite函數(shù)要靈活的多,。也可將這個(gè)函數(shù)應(yīng)用于對通信設(shè)備,、管道、套接字以及郵槽的處理 |
fwrite
|
fwrite是C語言函數(shù),,指向文件寫入一個(gè)數(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)硬盤組成,,每個(gè)固態(tài)硬盤支持大500MS/s(實(shí)測)的寫入速度,,組成RAID0陣列后支持大1.2GB/s(實(shí)測)的寫入速度。RAID0磁盤沒有奇偶數(shù)目的要求,,數(shù)據(jù)被平均分割存儲到多個(gè)磁盤上,,總的讀寫速度就是磁盤數(shù)量乘以單個(gè)磁盤的讀寫速度,缺點(diǎn)在于一塊磁盤損壞,,則整個(gè)磁盤陣列即壞,,數(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ù)的時(shí)候,,這個(gè)過程是非常復(fù)雜的,。
因?yàn)椋?/span>DMA傳輸數(shù)據(jù)是直接通過物理地址傳遞的,這樣DMA傳輸就得通過每個(gè)獨(dú)立的4kByte的頁來進(jìn)行傳輸,,這樣每次DMA傳輸?shù)臄?shù)據(jù)都是在不同物理地址4kByte頁上切換到降低DMA傳輸?shù)男省?/span>
Spectrum kernel driver:Spectrum公司通過自己底層驅(qū)動,,可以通過軟件向底層申請開辟一段物理地址連續(xù)的地址空間,申請完,,需要重啟電腦,,重啟電腦,,在PC機(jī)boot的過程中,需要多花費(fèi)平時(shí)的80%的啟動時(shí)間,。
恰好達(dá)到PCIe接口的極限速度,。采集到的信號在寫入磁盤時(shí)總的數(shù)據(jù)量為:
限制文件存儲速度的終瓶頸還是磁盤的固有特性,,我們所能做到只是改善軟件的實(shí)現(xiàn)去逼近硬盤的極限讀寫速度,。一般windows系統(tǒng)粘貼拷貝文件的時(shí)候,影響存儲速度地方就在于它利用了windows文件緩存機(jī)制,,當(dāng)你拷貝一個(gè)大文件時(shí),,windows會根據(jù)你要拷貝的文件大小緩存很大一部分到系統(tǒng)緩存,這時(shí)候你會看到系統(tǒng)緩存瞬間飆漲,,機(jī)器性能大大降低,,所以我們要避免使用windows緩存機(jī)制,并且盡量讀寫連續(xù)的文件塊,。
一般來說,,我們操作一個(gè)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ù),。一個(gè)將緩沖區(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ù)時(shí)使用WriteFile進(jìn)行寫數(shù)據(jù)操作時(shí)實(shí)測的速度:
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運(yùn)算之后的結(jié)果,,10M個(gè)實(shí)部real和10M個(gè)虛部imag,用MATLAB進(jìn)行仿真,,如下圖: