主要内容

dsp.udpreceiver.

接收来自网络的UDP报文

描述

dsp.udpreceiver.System object™通过从中指定的远程IP地址接收UDP网络上的UDP数据包RemoteIPAddress财产。然后,对象将数据保存到内部缓冲区。每个UDP数据包中收到的数据量(元素数量)可以不同。通过丢失数据可以接收对象的最大字节数收到了财产。这MaximumMessageLength属性指定每个数据包可以包含的最大样本数。这LocalIPPort对象接收数据的位置在生成的代码中是可调的,但在模拟期间是不可调的。例如,请参见在MATLAB中调整UDP端口号

接收来自网络的UDP报文。

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

  2. 使用参数调用对象,就像调用函数一样。

要了解有关系统对象如何工作的更多信息,请参阅什么是系统对象?

创建

描述

例子

UDPR.= dsp.udpreceiver.返回一个UDP接收对象,该对象从指定端口接收UDP包。

例子

UDPR.= dsp.udpreceiver.(名称,价值的)将每个指定属性设置为指定值的每个指定属性返回UDP接收器对象。将每个属性名称括在单引号中。

属性

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果一个属性是可调,您可以随时更改其值。

有关更改属性值的更多信息,请参见使用系统对象Matlab中的系统设计

接收数据的端口,指定为范围的标量[1,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

输出消息的最大长度,在样本中指定为范围[1,65507]的正标量。设置该属性的值等于或大于UDP报文的数据大小。如果收到的样本数量超过此属性中指定的数量,则多余的数据将被截断。

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

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

配置数据类型与创建UDP报文时输入的数据匹配。

数据类型:字符

消息的复杂性,指定为真正的错误的

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

数据类型:逻辑

用法

描述

例子

DATAR.= UDPR()从网络接收一个UDP包。

输出参数

全部展开

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

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

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

对象功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj.,使用下面的语法:

释放(obj)

全部展开

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

例子

全部收缩

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

笔记:如果您使用的是使用R2016A或早期版本,请使用等效的步骤语法替换对对象的每个调用。例如,obj (x)就变成了步骤(obj, x)

设置RemoteIPPort的UDP发送端LocalIPPort的UDP接收器31000.将数据向量的长度设置为128样本的值小于MaximumMessageLength接收方的属性。为了防止数据包丢失,调用设置方法,在第一次调用对象算法之前。

udpr = dsp.udpreceiver(“LocalIPPort”, 31000);udp = dsp。UDPSender ('remempport', 31000);设置(udpr);bytesSent = 0;bytesReceived = 0;dataLength = 128;

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

为了k = 1:20 dataSent = uint8(255*rand(1,dataLength));bytesent = bytesent + datallength;udp (dataSent);dataReceived = udpr ();bytesreceived = bytesreceived +长度(DataReceived);结尾释放(udp);释放(udpr);FPRINTF(“字节发送:% d \ n”, bytesSent);
发送字节数:2560
FPRINTF(“字节收到:% d \ n”,bytesreceived);
收到的字节:2560

本地IP端口号dsp.udpreceiver.对象和远程IP端口号dsp。UDPSender对象在生成的代码中是可调的。生成一个MEX文件接收机函数,该函数包含通过UDP网络接收正弦波数据的算法。更改UDP接收者的远程IP端口号,而不重新生成MEX文件。验证通过网络发送和接收的字节数。

笔记:此示例仅在R2017A或更高版本中运行。

输入接收机的本地IP端口号dsp.udpreceiver.系统对象™。该函数的输出是UDP网络接收到的字节数。

类型接收机
函数[bytesreceived] =接收器(portNumber)持久性UDPRX如果是isempty(udprx)udprx = dsp.udpreceiver('messageatatype','double');结束udprx.localipport = portnumber;datareceived = udprx();bytesreceived =长度(DataReceived);

dsp。UDPSender对象与rememport.number设置为65000通过UDP网络发送数据。这dsp.udpreceiver.对象与LocalIPPortnumber设置为65000接收来自UDP网络的数据。数据是每帧包含250个样本的正弦波。

portnumber = 65000;udpSend = dsp。UDPSender ('remempport'portnumber);正弦= dsp。SineWave ('samplesperframe',250);bytesSent = 0;bytesReceived = 0;Datalength = 250;为了i = 1:10 dataSent = sin ();bytesent = bytesent + datallength;udpSend (dataSent);bytesReceived = bytesReceived + receiver(portnumber);结尾FPRINTF('发送的字节数:%d', bytesSent);
发送字节数:2500
FPRINTF('接收的字节数:%d',bytesreceived);
收到的字节数:2250

数据通过UDP网络发送和接收成功。由于开销,初始数据被丢弃。

生成一个MEX文件接收人..M.功能。

codegen接收机-  args.{65000}
代码生成成功。

释放发送方并更改RemotePort数字到25000.LocalIPPort接收方号码仍为65000。由于端口号不同,导致数据传输不成功。

释放(UDPSEND)PORTNUMBERTWO = 25000;udpsend.remoteipport = portnumbertwo;bytesReceived = 0;Bytessent = 0;为了i = 1:10 dataSent = sin ();bytesent = bytesent + datallength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex(portnumber);结尾FPRINTF('发送的字节数:%d', bytesSent);
发送字节数:2500
FPRINTF('接收的字节数:%d',bytesreceived);
接收字节数:0

清除MEX文件并将接收器的本地IP端口号更改为25000.清除MEX使接收器端口号能够更改,而无需重新生成MEX。发件人和接收方的端口号。验证数据是否已成功传输。

清晰的墨西哥人% #好吧bytesReceived = 0;bytesSent = 0;为了i = 1:10 dataSent = sin ();bytesent = bytesent + datallength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex(portnumberTwo);结尾FPRINTF('发送的字节数:%d', bytesSent);
发送字节数:2500
FPRINTF('接收的字节数:%d',bytesreceived);
收到的字节数:2250

数据通过UDP网络传输成功。由于开销,初始数据被丢弃。

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

dsp。UDPSender对象可以发送复杂的数据。为了使dsp.udpreceiver.对象接收复杂数据,设置IsMessageComplex财产真正的

udp = dsp。UDPSender ('remempport', 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”,覆盖,'fftlength', 128);istf = dsp。ISTFT (...“窗口”损害(winLen'定期'),...“OverlapLength”,覆盖,...“WeightedOverlapAdd”, 0);

输入是具有100Hz的频率的正弦信号,样品率为1000Hz,每个信号帧具有60个样本。

正弦= dsp。SineWave (...'samplesperframe',winlen overlaplen,...“频率”, 100);

初始化一个Timescope.对象的采样率为1000 Hz,时间跨度为0.09。这延迟对象在比较输入信号和重构输出信号时校正重叠长度。

ts = timescope(“SampleRate”, 1000,...'ShowLegend',真的,...'ylimits',[ -  1 1],...'timespansource'“属性”...“时间间隔”,.09,...“ChannelNames”, {'输入'“重建”});海底= dsp。延迟(“长度”, overlapLen);

通过UDP网络传输复杂的正弦波STFT数据。计算接收数据的ISTFT。比较输入,X,重建输出,y.由于对象引入的延迟,重构输出相对于输入在时间上移位。因此,为了进行比较,取重构输出之间的差的范数,y以及以前的输入,Xprev.

使用时间范围可视化信号。您可以看到重建信号与输入信号非常密切地重叠。

n = 0 (1,1 e3);xprev = 0;为了K = 1:1e3 x = sin ();X = 31 (X);bytesSent = bytesSent + length(X);udp (X);dataReceived = udpr ();如果(~isempty(dataReceived)) y = istf(dataReceived);结尾n(1,k)= norm(y-xprev);xprev = x;bytesreceived = bytesreceived +长度(DataReceived);Ts([Dly(x),y​​]);结尾

差异的范数非常小,这表明输出信号是输入信号的完美重构版本。

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

释放UDP对象。

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

由于UDP协议的有损性质,一些发送的数据包在传输过程中可能会丢失。为了检查丢失,比较发送的字节和接收的字节。

FPRINTF(“字节发送:% d \ n”, bytesSent);
发送的字节:128000
FPRINTF(“字节收到:% d \ n”,bytesreceived);
字节收到:128000

扩展功能

介绍了R2012a