主要内容

dsp.UDPReceiver

从网络接收UDP数据包

描述

dsp.UDPReceiver系统对象™接收UDP数据包通过UDP网络从远程IP地址中指定RemoteIPAddress财产。然后保存数据对象的内部缓冲区。(元素)收到的数据量在每个UDP数据包可以有所不同。的最大对象的字节数设定的可以接受而不会丢失数据下面的财产。的MaximumMessageLength属性指定的最大数量样品每个数据包可以包含。的LocalIPPort对象接收到的数据在生成的代码而不是可调可调模拟。例如,看到的在MATLAB优化UDP端口号

从网络接收UDP数据包:

  1. 创建dsp.UDPReceiver对象并设置其属性。

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

例子

udpr= dsp.UDPReceiver返回一个UDP接收器对象接收UDP数据包从一个指定端口。

例子

udpr= dsp.UDPReceiver (名称,值)返回一个UDP接收器对象与每个指定的属性设置为指定的值。在单引号附上每个属性的名字。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

端口接收的数据,指定为一个标量范围[65535]。这个属性是在生成的代码而不是可调可调模拟。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

接受的地址数据,指定为一个特征向量或字符串标量包含一个有效的IP地址。进入一个特定的IP地址块UDP数据包从其他地址。默认的,“0.0.0.0”,表明数据可以从任何远程IP地址被接受。

数据类型:字符

内部缓冲区接收UDP数据包的大小,字节中指定一个标量的范围(1,67108864)。如果收到的字节数超过这个值时,缓冲区溢出和内容被截断。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

样品中指定的输出消息的最大长度,作为一个积极的标量范围[65507]。设置该属性值等于或大于UDP数据包的数据大小。如果你收到的样品比中指定该属性,多余的数据被截断。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

在消息输出向量元素的数据类型,指定为一个MATLAB®内置的数据类型。

匹配的数据类型与数据输入用于创建UDP数据包。

数据类型:字符

信息的复杂性,指定为真正的

将此属性设置为真正的如果收到的消息是复杂的。将属性设置为如果收到的消息是真实的。

数据类型:逻辑

使用

描述

例子

塔尔= udpr ()从网络接收一个UDP数据包。

输出参数

全部展开

从网络接收数据,作为一个数据包返回。的MaximumMessageLength属性指定的最大字节数每个数据包可以包含。接收到的数据长度从网络接收到的字节数。

如果接收到的数据是复杂数据IsMessageComplex属性设置为真正的

数据类型:||int8|int16|int32|uint8|uint16|uint32|逻辑
复数的支持:金宝app是的

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

发送和接收UDP数据包使用dsp.UDPSenderdsp.UDPReceiver系统对象。计算成功传输的字节数。

请注意:如果您使用的是R2016a或更早的版本中,用相同的步骤替换每个调用对象的语法。例如,obj (x)就变成了步骤(obj, x)

设置RemoteIPPortUDP发送方和LocalIPPortUDP的接收机31000年。设置数据向量的长度128年样品,这是不到的价值MaximumMessageLength接收方的财产。为了防止丢失数据包,调用设置方法接收对象在第一次调用对象的算法。

udpr = dsp.UDPReceiver (“LocalIPPort”,31000);udp = dsp.UDPSender (“RemoteIPPort”,31000);设置(udpr);bytesSent = 0;bytesReceived = 0;dataLength = 128;

在每个循环的迭代中,发送和接收数据包的数据。在循环结束时,使用函数来打印由发送方发送的字节数和接收机接收到的字节数。

k = 1:20 dataSent = uint8 rand (255 * (1, dataLength));bytesSent = bytesSent + dataLength;udp (dataSent);dataReceived = udpr ();bytesReceived = bytesReceived +长度(dataReceived);结束释放(udp);释放(udpr);流(“字节发送:% d \ n”,bytesSent);
发送字节数:2560
流(“字节收到:% d \ n”,bytesReceived);
字节收到:2560

的本地IP端口号码dsp.UDPReceiver对象和远程IP端口的数量dsp.UDPSender对象是可调在生成的代码中。生成一个文件从墨西哥人接收机函数包含算法获得正弦波数据通过UDP网络。改变远程IP端口的UDP接收器没有再生墨西哥人文件。验证通过网络发送和接收的字节数。

请注意:本例中只运行在R2017a或更高版本。

的输入接收机函数的本地IP端口号码dsp.UDPReceiver系统对象™。这个函数的输出从UDP网络接收的字节数。

类型接收机
函数[bytesReceived] =接收机(portnumber)持久udpRx如果isempty (udpRx) udpRx = dsp.UDPReceiver (“MessageDataType”、“双”);udpRx结束。LocalIPPort = portnumber;dataReceived = udpRx ();bytesReceived =长度(dataReceived);

dsp.UDPSender对象与remoteIPPort数设置为65000 UDP网络发送数据。的dsp.UDPReceiver对象与LocalIPPort数设置为65000接收UDP网络的数据。数据是一个包含250个样本每帧的正弦波。

portnumber = 65000;udpSend = dsp.UDPSender (“RemoteIPPort”portnumber);正弦= dsp.SineWave (“SamplesPerFrame”,250);bytesSent = 0;bytesReceived = 0;dataLength = 250;我= 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived +接收机(portnumber);结束流(发送的字节数:% d ',bytesSent);
发送的字节数:2500
流(“收到的字节数:% d ',bytesReceived);
收到的字节数:2250

数据发送和接收UDP网络成功。初始数据下降是由于开销。

生成一个文件从墨西哥人receiver.m函数。

codegen接收机arg游戏{65000}
代码生成成功。

发送者和改变释放RemotePort数到25000。的LocalIPPort接收器的数量仍然是65000。自端口号不同,数据没有传输成功。

释放(udpSend) portnumberTwo = 25000;udpSend。RemoteIPPort = portnumberTwo;bytesReceived = 0;bytesSent = 0;我= 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex (portnumber);结束流(发送的字节数:% d ',bytesSent);
发送的字节数:2500
流(“收到的字节数:% d ',bytesReceived);
收到的字节数:0

清晰的墨西哥人文件和改变接收机的本地IP端口号为25000。扫清了墨西哥人使接收机端口号更改,而无需重新生成墨西哥人。发送方和接收方的端口号匹配。验证数据传输成功。

清晰的墨西哥人% #好吧bytesReceived = 0;bytesSent = 0;我= 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex (portnumberTwo);结束流(发送的字节数:% d ',bytesSent);
发送的字节数:2500
流(“收到的字节数:% d ',bytesReceived);
收到的字节数:2250

UDP网络数据传输成功。初始数据下降是由于开销。

计算一个正弦波的STFT和传递复杂的STFT在UDP网络数据。在接收端,接收的数据的计算ISTFT。可视化数据发送和接收到的数据使用一个时间范围。

dsp.UDPSender可以把复杂的数据对象。为了启用dsp.UDPReceiver对象接受复杂的数据,设置IsMessageComplex财产真正的

udp = dsp.UDPSender (“RemoteIPPort”,31000);udpr = dsp.UDPReceiver (“LocalIPPort”,31000,“IsMessageComplex”,真的,“MessageDataType”,“双”);设置(udpr);bytesSent = 0;bytesReceived = 0;dataLength = 128;

初始化dsp.STFTdsp.ISTFT系统对象与一个周期损害窗口长度120样品和一个重叠的60个样本。设定FFT长度为128。

winLen = 120;overlapLen = 60;frameLen = winLen-overlapLen;月31 = dsp.STFT (“窗口”损害(winLen“周期”),“OverlapLength”overlapLen,“FFTLength”,128);istf = dsp.ISTFT (“窗口”损害(winLen“周期”),“OverlapLength”overlapLen,“WeightedOverlapAdd”,0);

输入是一个正弦信号的频率100赫兹,采样率为1000 Hz, 60个样本每帧信号。

正弦= dsp.SineWave (“SamplesPerFrame”winLen-overlapLen,“频率”,100);

初始化一个timescope对象的采样率为1000 Hz,时间跨度为0.09。的延迟对象纠正重叠长度虽然比较重建的输入输出信号。

ts = timescope (“SampleRate”,1000,“ShowLegend”,真的,“YLimits”[1],“TimeSpanSource”,“属性”,“时间间隔”.09点,“ChannelNames”,{“输入”,“重建”});海底= dsp.Delay (“长度”,overlapLen);

复杂的STFT数据传输的正弦波在UDP网络。计算ISTFT接收的数据。比较输入,x重建的输出,y。由于对象引入的延时,重建相比,时间转向输入输出。因此,比较规范的重构输出之间的区别,y和前面的输入,xprev

可视化使用时间范围的信号。您可以看到,重构信号与输入信号重叠密切。

n = 0 (1,1 e3);xprev = 0;k = 1:1e3 x = sin ();X = 31 (X);bytesSent = bytesSent +长度(X);udp (X);dataReceived = udpr ();如果(~ isempty (dataReceived) y = istf (dataReceived);结束n (k) =规范(y-xprev);xprev = x;bytesReceived = bytesReceived +长度(dataReceived);ts([海底(x), y]);结束

规范的区别很小,表明输出信号是输入信号的完全重构版本。

max (abs (n))
ans = 5.3870 e-14

释放UDP的对象。

释放(udp);释放(udpr);

一些数据包的发送可能会丢失在传输过程中由于自然损耗的UDP协议。检查损失,比较接收到的字节发送到字节。

流(“字节发送:% d \ n”,bytesSent);
发送字节数:128000
流(“字节收到:% d \ n”,bytesReceived);
字节收到:128000

扩展功能

介绍了R2012a