Incorrect UDP data reception in Matlab

2 views (last 30 days)
Sameed
Sameed on 4 Sep 2014
Hi,
My FPGA is continuously sending UDP packets on network using 10/100/1000 Mbps ethernet and i have written a MATLAB code to capture the data. FPGA kit is connected to a 1 gbps switch and then to PC.
The problem is that after a certain number of packets (around 1080000 Bytes) are received in Matlab, the next packets that are received are corrupted although the FPGA is sending correct data which i have verified by running Matlab with Wireshark.
1) Does it have something to do with the fact that the transmission rate from FPGA is high (5.18 Mbps in Wireshark) & the reception rate in Matlab is low?
2) Is it because of some internal memory issue. No more packets are received after around 1080000 Bytes worth of UDP data is received (problem shown in figure)? I tried changing the buffer_size & buffer_read_count but to no avail.
3) Is it because of the Matlab's internal buffer getting FULL? Will flushinput() command be of any help in this case if indeed the buffer is getting FULL?
I am pasting the Matlab code below.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A screenshot of the problem is also attached.

Answers (0)

Categories

Find more on Test and Measurement in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!