dsp.UDPSender

Отправьте пакеты UDP, чтобы объединиться в сеть

Описание

UDPSender объект отправляет пакеты UDP в сеть.

Отправить пакеты UDP в сеть:

  1. Создайте dsp.UDPSender объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

udps = dsp.UDPSender возвращает объект отправителя UDP, udps, это отправляет пакеты UDP в заданный порт.

пример

udps = dsp.UDPSender(Name,Value) возвращает объект отправителя UDP, udps, с каждым набором свойств к заданному значению.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Задайте удаленное (то есть, хост) IP-адрес, в который отправляются данные. Значением по умолчанию является '127.0.0.1', который является локальным хостом.

Типы данных: char

Задайте порт в удаленном IP-адресе, в который отправляются данные. Это свойство является настраиваемым в сгенерированном коде, но не настраиваемым в процессе моделирования.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Задайте, как определить локальный порт IP на хосте как Auto или Property. Если вы задаете Auto, объект выбирает порт динамически из доступных портов. Если вы задаете Property, объект использует источник, заданный в LocalIPPort свойство.

Задайте порт, от которого можно отправить данные.

Зависимости

Это свойство применяется, когда вы устанавливаете LocalIPPortSource свойство к Property.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Размер внутреннего буфера, который отправляет пакеты UDP, заданные в байтах как целое число в области значений [1, 67108864].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Использование

Синтаксис

Описание

пример

y = udps(Packet) отправляет один пакет UDP, Packet, к сети.

Входные параметры

развернуть все

Объект отправляет один пакет UDP в сеть на вызов.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать объектную функцию, задайте Систему object™ как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Отправьте и получите пакеты UDP с помощью dsp.UDPSender и dsp.UDPReceiver Системные объекты. Вычислите количество байтов, успешно переданных.

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x) становится step(obj,x).

Установите RemoteIPPort из отправителя UDP и LocalIPPort из приемника UDP к 31000. Установите длину вектора данных к 128 выборки, который меньше значения MaximumMessageLength свойство приемника. Чтобы предотвратить потерю пакетов, вызовите setup метод на объекте приемника перед первым вызовом объектного алгоритма.

udpr = dsp.UDPReceiver('LocalIPPort',31000);
udps = dsp.UDPSender('RemoteIPPort',31000);

setup(udpr); 

bytesSent = 0;
bytesReceived = 0;
dataLength = 128;

В каждом цикле итерации отправьте и получите пакет данных. В конце цикла используйте fprintf функционируйте, чтобы распечатать количество байтов, отправленных отправителем и количеством байтов, полученных приемником.

for k = 1:20
   dataSent = uint8(255*rand(1,dataLength));
   bytesSent = bytesSent + dataLength;
   udps(dataSent);
   dataReceived = udpr();
   bytesReceived = bytesReceived + length(dataReceived);
end

release(udps);
release(udpr);

fprintf('Bytes sent:     %d\n', bytesSent);
Bytes sent:     2560
fprintf('Bytes received: %d\n', bytesReceived);
Bytes received: 2560

Локальный номер порта IP dsp.UDPReceiver возразите и удаленный номер порта IP dsp.UDPSender объект является настраиваемым в сгенерированном коде. Сгенерируйте файл MEX от receiver функция, которая содержит алгоритм, чтобы получить данные о синусоиде по сети UDP. Измените удаленный номер порта IP приемника UDP, не регенерируя файл MEX. Проверьте количество байтов, отправленных и полученных по сети.

Примечание: Этот пример запускается только в R2017a или позже.

Вход к receiver функция является локальным номером порта IP dsp.UDPReceiver Система object™. Выход этой функции является количеством байтов, полученных от сети UDP.

type receiver
function [bytesReceived] = receiver(portnumber)

persistent udpRx

if isempty(udpRx) 
    udpRx = dsp.UDPReceiver('MessageDataType','double'); 
end 

udpRx.LocalIPPort = portnumber; 
dataReceived = udpRx();
bytesReceived = length(dataReceived);

dsp.UDPSender объект с remoteIPPort набор номера к 65 000 отправляет данные по сети UDP. dsp.UDPReceiver объект с LocalIPPort набор номера к 65 000 получает данные из сети UDP. Данные являются синусоидой, содержащей 250 выборок на систему координат.

portnumber = 65000;
udpSend = dsp.UDPSender('RemoteIPPort',portnumber);
sine = dsp.SineWave('SamplesPerFrame',250);

bytesSent = 0;
bytesReceived = 0;
dataLength = 250;

for i = 1:10
dataSent = sine();
bytesSent = bytesSent + dataLength;
udpSend(dataSent);
bytesReceived = bytesReceived + receiver(portnumber);
end
fprintf('Number of bytes sent: %d', bytesSent);
Number of bytes sent: 2500
fprintf('Number of bytes received: %d', bytesReceived);
Number of bytes received: 2250

Данные отправлены и получены успешно по сети UDP. Исходные данные пропущены из-за издержек.

Сгенерируйте файл MEX от receiver.m функция.

codegen receiver -args {65000}
Code generation successful.

Выпустите отправителя и измените RemotePort номер к 25 000. LocalIPPort количество приемника продолжает быть 65000. Поскольку номера портов отличаются, данные не передаются успешно.

release(udpSend)
portnumberTwo = 25000;
udpSend.RemoteIPPort = portnumberTwo; 
bytesReceived = 0;
bytesSent = 0;
for i = 1:10
dataSent = sine();
bytesSent = bytesSent + dataLength;
udpSend(dataSent);
bytesReceived = bytesReceived + receiver_mex(portnumber);
end
fprintf('Number of bytes sent: %d', bytesSent);
Number of bytes sent: 2500
fprintf('Number of bytes received: %d', bytesReceived);
Number of bytes received: 0

Очистите файл MEX и измените локальный номер порта IP приемника к 25 000. Очистка MEX позволяет номеру порта приемника измениться, не имея необходимость регенерировать MEX. Номера портов отправителя и соответствия приемника. Проверьте, передаются ли данные успешно.

clear mex %#ok
bytesReceived = 0;
bytesSent = 0;
for i = 1:10
dataSent = sine();
bytesSent = bytesSent + dataLength;
udpSend(dataSent);
bytesReceived = bytesReceived + receiver_mex(portnumberTwo);
end
fprintf('Number of bytes sent: %d', bytesSent);
Number of bytes sent: 2500
fprintf('Number of bytes received: %d', bytesReceived);
Number of bytes received: 2250

Данные передаются успешно по сети UDP. Исходные данные пропущены из-за издержек.

Вычислите STFT синусоиды и передайте комплексные данные STFT по сети UDP. В стороне приемника вычислите ISTFT принятых данных. Визуализируйте отправленные данные, и данные получили использование осциллографа времени.

dsp.UDPSender объект может отправить комплексные данные. Для того, чтобы включить dsp.UDPReceiver объект получить комплексные данные, установите IsMessageComplex свойство к true.

udps = dsp.UDPSender('RemoteIPPort',31000);
udpr = dsp.UDPReceiver('LocalIPPort',31000,...
    'IsMessageComplex',true,...
    'MessageDataType','double');

setup(udpr); 

bytesSent = 0;
bytesReceived = 0;
dataLength = 128;

Инициализируйте dsp.STFT и dsp.ISTFT Системные объекты с периодическим hann окно длины 120 выборок и продолжительность перекрытия 60 выборок. Установите длину БПФ на 128.

winLen = 120;
overlapLen = 60;

frameLen = winLen-overlapLen;
stf = dsp.STFT(...
    'Window',hann(winLen,'periodic'),...
    'OverlapLength',overlapLen,'FFTLength',128);
istf = dsp.ISTFT(...
    'Window',hann(winLen,'periodic'),...
    'OverlapLength',overlapLen,...
    'WeightedOverlapAdd',0);

Вход является синусоидальным сигналом с частотой 100 Гц, частотой дискретизации 1 000 Гц, и с 60 выборками на каждую систему координат сигнала.

sine = dsp.SineWave(...
    'SamplesPerFrame',winLen-overlapLen,...
    'Frequency',100);

Инициализируйте timescope объект с частотой дискретизации 1 000 Гц и отрезком времени 0,09. Delay объект корректирует длину перекрытия при сравнении входа с восстановленным выходным сигналом.

ts  = timescope('SampleRate',1000,...
    'ShowLegend',true,...
    'YLimits',[-1 1],...
    'TimeSpanSource','Property',...
    'TimeSpan',.09,...
    'ChannelNames',{'Input','Reconstructed'});
dly = dsp.Delay('Length',overlapLen);

Комплекс передачи данные STFT синусоиды по сети UDP. Вычислите ISTFT принятых данных. Сравните вход, x, к восстановленному выходу, y. Из-за задержки, введенной объектами, восстановленный выход смещен вовремя по сравнению с входом. Поэтому, чтобы выдержать сравнение, возьмите норму различия между восстановленным выходом, y, и предыдущий вход, xprev.

Визуализируйте сигналы с помощью осциллографа времени. Вы видите, что восстановленный сигнал перекрывается очень тесно с входным сигналом.

n = zeros(1,1e3);
xprev = 0;
for k = 1:1e3
   x = sine();
   X = stf(x);
   bytesSent = bytesSent + length(X);
   udps(X);
   dataReceived = udpr();
   if (~isempty(dataReceived))
       y = istf(dataReceived);
   end
   n(1,k) = norm(y-xprev);
   xprev = x;
   bytesReceived = bytesReceived + length(dataReceived);
   ts([dly(x),y]);
end

Норма различия очень мала, указывая, что выходной сигнал является отлично восстановленной версией входного сигнала.

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

Выпустите объекты UDP.

release(udps);
release(udpr);

Некоторые отправленные пакеты могут быть потеряны во время передачи из-за природы с потерями протокола UDP. Чтобы проверять на потерю, сравните байты, отправленные в полученные байты.

fprintf('Bytes sent:     %d\n', bytesSent);
Bytes sent:     128000
fprintf('Bytes received: %d\n', bytesReceived);
Bytes received: 128000

Расширенные возможности

Смотрите также

Объекты

Блоки

Представленный в R2012a