UDP reading data speed

조회 수: 11 (최근 30일)
Tom Inge Nesheim
Tom Inge Nesheim 2019년 4월 16일
댓글: LUCA MONARI 2020년 10월 21일
Hi
I have a UDP source that transmits UDP packages with payload of 84 bytes and a rate of 20kHz. I have tried the UDP function in Matlab, fread(). This works, and I can get 3000 packages of data into Matlab and do signal analysis of the data stream. The data are consistent, and the data analysis are correct. The problem is that fread() use too much time. To read 3000 packages uses more than 4 seconds. To test the speed I have removed all other code and only testing the fread, by using this code:
For ii = 1:3000
fread (obj1,42,’unit16’);
end
This still uses more than 4 seconds.
Is there something that can help speeding up the fread command?

답변 (4개)

LUCA MONARI
LUCA MONARI 2019년 7월 1일
Hello Tom
Did you find any solution to your problem? I'm facing the same issue
Thank you
  댓글 수: 2
Tom Inge Nesheim
Tom Inge Nesheim 2019년 7월 5일
Hi Luca
I did not manage to solve this in Matlab. For my test task I had someone made a routine in C that do the task. For the time being I’m just transfer data through a file, this is still much faster than doing it in Matlab.
LUCA MONARI
LUCA MONARI 2019년 7월 5일
Hi, Tom
thanks for your reply.
We manage to solve the problem basically in the same way. I had a colleague to write a script in python for receiving and saving UDP data and use Matlab to call the script and then move the file.

댓글을 달려면 로그인하십시오.


Aiswarya Subramanian
Aiswarya Subramanian 2019년 7월 5일
Hello,
Can you check the following link and see the changes they have suggested? I hope this helps :)

Andrew Neaville
Andrew Neaville 2019년 11월 21일
I've had good luck increasing speed by setting
UDP.DatagramTerminateMode = 'off';
Then reading out the whole buffer, which contains many packets, at a time. I then just parse the packets. If your packets are constant size, then this should be very easy.
bytesAvailable = UDP.BytesAvailable;
fread (UDP,bytesAvailable/2,'unit16');

Bhargavi Ragidi
Bhargavi Ragidi 2020년 10월 21일
편집: Bhargavi Ragidi 2020년 10월 21일
Hi We are sending 1 packet of 730 bytes at 1ms through a specified port and we are receiving in Matlab through UDP port communication. When reading the packet using fread command to read that 1 packet of 730 bytes it is taking around 25ms
Generally the fread speed performance is slow or can we achieve same date rate as of sender??? Could any one explain..
  댓글 수: 1
LUCA MONARI
LUCA MONARI 2020년 10월 21일
Hi there
There are no way to increase the fread speed.
The only way I've found to significally increase the reading speed is the following:
  • write a script in Python to fetch the data ad save the data to a file
  • from Matlab call the Python script through the windows command prompt (command "system" in Matlab)
  • read the data from the file created by the Python script
In my case, I was able to read 7 packets of 24 bytes each every 1 ms (7 kHz, 168 bytes every ms).
Hope this helps

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Call Python from MATLAB에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by