主要内容

dsp。UDPSender

发送UDP报文到网络

描述

UDPSender对象向网络发送UDP报文。

向网络发送UDP报文。

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

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

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

创建

描述

udp= dsp。UDPSender返回一个UDP发送方对象,udp,发送UDP报文到指定端口。

例子

udp= dsp。UDPSender (名称,值返回一个UDP发送方对象,udp,将每个属性设置为指定的值。

属性

全部展开

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

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

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

指定数据发送到的远程(即主机)IP地址。默认值是“127.0.0.1”,即本地主机。

数据类型:字符

指定发送数据的远端IP地址的端口。此属性在生成的代码中是可调的,但在模拟期间是不可调的。

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

指定如何确定主机上的本地IP端口为汽车财产.如果您指定汽车,对象从可用端口中动态选择端口。如果您指定财产时,对象使用LocalIPPort财产。

指定发送数据的端口。

依赖关系

属性设置时将应用此属性LocalIPPortSource财产财产

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

发送UDP报文的内部缓冲区的大小,以字节为单位,可以是范围内的整数(1, 67108864)

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

使用

语法

描述

例子

y= udp (发送一个UDP包,,到网络。

输入参数

全部展开

该对象每次调用发送一个UDP包到网络。

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

对象的功能

要使用对象函数,请指定System对象™作为第一个输入参数。例如,释放名为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 (“RemoteIPPort”, 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 + length(dataReceived);结束释放(udp);释放(udpr);流(“字节发送:% d \ n”, bytesSent);
发送字节数:2560
流(“字节收到:% d \ n”, bytesReceived);
字节收到:2560

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

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

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

类型接收机
function [bytesReceived] = receiver(portnumber) persistent udpRx if isempty(udpRx) udpRx = dsp. udreceiver ('MessageDataType','double');udpRx结束。LocalIPPort = portnumber;dataReceived = udpRx ();bytesReceived =长度(dataReceived);

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

portnumber = 65000;udpSend = dsp。UDPSender (“RemoteIPPort”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);结束流('发送的字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%d', bytesReceived);
接收字节数:2250

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

生成一个MEX文件receiver.m函数。

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

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

release(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);结束流('发送的字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%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);结束流('发送的字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%d', bytesReceived);
接收字节数:2250

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

计算一个正弦波的STFT,并通过UDP网络传输复杂的STFT数据。在接收端,计算接收数据的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);

输入是频率为100hz的正弦信号,采样率为1000hz,每帧信号有60个采样。

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

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

ts = timescope (“SampleRate”, 1000,“ShowLegend”,真的,“YLimits”[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 (k) =规范(y-xprev);xprev = x;bytesReceived = bytesReceived + length(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