matlab的UDP通信的丟包問題如何解決?
12-28
我是用的FPGA乙太網介面向上位機發送數據,上位機用matlab的UDP有關函數命令進行接收。我是每個包100個八位十六進位數(100位元組),發200個數據包(20000位元組)沒啥問題,可以完整無誤接收,然而發多了比如500的時候就會只收到前230左右後面丟了,發800、1000數據包的時候只能收到前450左右。檢查了FPGA發送側(通過觀測Quartus的signaltap)應該沒問題。求問,上位機這個丟包問題想解決該從哪些方面入手?十分感謝!
UDP + 不丟包 = TCP
反對建議用TCP的答案。異構計算對嗎?你要分析包是在哪兒丟的,我估計是Matlab處理不過來。你用fpga是計算嗎?Matlab遠遠追不上fpga的輸出速度。我們用fpga的話和cpu通信用srio,cpu上跑的也是c語言程序,速度勉強跟得上fpga。
如果用tcp,流控會把fpga速度給拖慢了。
關注reliable udp,比如kcp.
最蠢的辦法,那就等回了心跳再發下一個。。
修改內核的rmem_max參數試試
同一個子網可以開 flow control
業務層做可靠udp唄,這個網上有參考,基於udp的滑動窗口
丟包三個地方 發送端 傳輸途中 接收端,你這情況傳輸途中不會丟,要麼就是發送端的緩存不足(可能性不大),要麼就是接收端的緩存不足,不管是哪個,請使用TCP
推薦閱讀:
※C++ 下有沒有矩陣計算速度能和 MATLAB 相當的矩陣或數學庫?
※想用別人的實驗來算東西,但沒有他的數據,只有文獻里的圖線怎麼辦?
※學術論文中用什麼軟體可以繪製這樣的圖?
※Mathematica 和 MATLAB 都有什麼不同?做數學分析哪個比較專業?
※如何在兩條曲線之間上色?
TAG:MATLAB | UDP | 乙太網Ethernet | 丟包率 | 數據包 |