Matlab中的UDP数据接收不正确

时间:2014-09-03 13:14:48

标签: matlab networking udp fpga

我的FPGA正在使用10/100/1000 Mbps以太网在网络上不断发送UDP数据包,我编写了一个MATLAB代码来捕获数据。 FPGA套件连接到1 gbps交换机,然后连接到PC。

问题是在Matlab收到一定数量的数据包(大约1080000字节)之后,接收的下一个数据包已损坏,尽管FPGA正在发送我已通过验证的正确数据用Wireshark运行Matlab。

1)是否与FPGA的传输速率很高(Wireshark的5.18 Mbps)有关。 Matlab的接收率很低?

2)是不是因为内部存储器问题。收到大约1080000字节的UDP数据后,不再收到数据包(问题如图所示)?我尝试更改buffer_size& buffer_read_count但无济于事。

3)是不是因为Matlab的内部缓冲区变满了?如果缓冲区确实变为FULL,flushinput()命令在这种情况下会有任何帮助吗?

我粘贴下面的Matlab代码。

clc
clearall
closeall

packet_size = 18;                %Size of 1 Packet
buffer_size = 1000*packet_size; % Buffer to store 1000 packets each of Packet_Size
buffer_read_count  = 100;         %How many times the buffer must be read 

do_post_processing = 1;

u=udp('192.168.0.100','RemotePort',4660,'Localport',4661);

set(u,'DatagramTerminateMode','off');   
set(u, 'InputBufferSize', 3*buffer_size);
set(u,'Timeout', 10); 

fopen(u);

x=tic;

ii=1;
kk = 1;

while(1)
      if(u.BytesAvailable>= buffer_size) 
            [a, count] = fread(u, buffer_size);

            data(:, kk) = a;

            data_buffer_read = reshape(a, packet_size, buffer_size/packet_size);

            data_start(:,kk) = (data_buffer_read(18,1:10)).';   

            data_end(:,kk)   = (data_buffer_read(18,end-10:end)).';   

            kk = kk + 1;

      end

      if(kk == buffer_read_count + 1)
          break;
      end

end

fclose(u);

%delete(u);

t=toc(x);

bw = (buffer_size*buffer_read_count*8)/t;

fprintf('Achieved data rate: %e bps\n', bw);

% post processing

data_reshape = reshape (data, packet_size, buffer_size*buffer_read_count/packet_size);

if(do_post_processing==1)
     plot(data_reshape.');
     title('UDP Data v/s Total Packets at 10 Mbps Ethernet Link');
     xlabel('Total Number of Packets'); 
     ylabel('Packet Data');
end

我之前发布的帖子提供了此问题的链接。

Slow speed of UDP reception in Matlab

Image showing the problem at 10 Mbps

Image showing the problem at 1000 Mbps

请提供有关此问题的任何指导。

谢谢。

此致

0 个答案:

没有答案