在Matlab不正确的UDP数据接收(Incorrect UDP data reception in

2019-10-31 03:27发布

我的FPGA连续使用10/100/1000 Mbps以太网网络上发送的UDP数据包,我已经写了一个MATLAB代码捕获数据。 FPGA试剂盒连接到1 Gbps的切换,然后到PC。

的问题是,在Matlab中接收到的分组(大约1080000字节)的一定数目后,所接收的下一个分组虽然FPGA正在发送我已通过使用Wireshark运行Matlab的验证正确的数据被损坏。

1)它是否有东西做的事实,从FPGA的传输速率高(5.18 Mbps的在Wireshark中)在Matlab中接收率是低?

2)是不是因为一些内部记忆问题。 没有更多的UDP数据大约108万字节值得被接收(如图问题)后收到的数据包? 我试图改变BUFFER_SIZE&buffer_read_count但无济于事。

3)难道是因为Matlab的内部缓冲区快满的? 将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

线程我以前发布的提供了一个链接到这个问题。

在Matlab UDP接收慢速

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

谢谢。

问候,

文章来源: Incorrect UDP data reception in Matlab