Модем Packetized со слоем канала передачи данных

Этот пример показывает вам, как реализовать packetized модем со Слоем [1] Канала передачи данных с помощью MATLAB® и Communications Toolbox™. Функции модема основанный на пакете физический уровень и основанный на ALOHA Слой Канала передачи данных. Можно или симулировать систему или запуститься с радио с помощью Пакета Поддержки Communications Toolbox для Радио USRP®.

Необходимое аппаратное и программное обеспечение

Чтобы симулировать производительность системы, вам нужно следующее программное обеспечение:

Чтобы измерить производительность системы с радио, вам также нужно следующее оборудование:

  • Радио USRP® (B2xx, N2xx или X3xx)

и следующее программное обеспечение

Для полного списка Communications Toolbox поддерживаемые платформы SDR обратитесь к разделу Supported Hardware страницы открытия Программно определяемого радио (SDR).

Введение

Беспроводные модемы Packetized являются системами связи, которые передают информацию в названных пакетах пакетов через беспроводной канал. Каждый модем, также названный узлом, показывает физический уровень, где пакеты модулируются, передаются и получаются на разделяемом диапазоне частот и демодулируются. Поскольку тот же диапазон частот используется всеми узлами, алгоритм среднего управления доступом (MAC) требуется, чтобы уменьшать пакетную потерю из-за столкновений (i.e. одновременные передачи). Слой Канала передачи данных включает подуровня MAC и подуровня управления логической ссылкой, чтобы совместно использовать тот же канал и обеспечивает безошибочную ссылку между двумя узлами. Слой Канала передачи данных также называется Слоем 2 и находится между Слоем сети (Слой 3) и Физическим уровнем (Слой 1).

Запустите пример

Чтобы запустить пример, введите PacketizedModemNetworkExample в командном окне MATLAB или щелкните по ссылке. Пример кода создает три packetized модемных объекта узла и соединяет их через объект канала. Каждый узел может отправить пакеты в другие два узла. ACKTimeout определяет длительность тайм-аута, прежде чем узел решит, что пакетная передача ДАННЫХ не была успешна. ACKTimeout должен быть больше длительности цикла обработки для обмена DATA-ACK, который составляет 0,21 секунды для этого примера. Симуляция основана на времени и симулирует полную обработку физического уровня вместе со слоем канала передачи данных.

% Set simulation parameters
runDuration = 10;         % Seconds
numPayloadBits = 19530;   % Bits
packetArrivalRate = 0.2;  % Packets per second
ackTimeOut = 0.25;        % ACK time out in seconds
maxBackoffTime = 10;      % Maximum backoff time in ackTimeOut durations
mMaxDataRetries = 5;      % Maximum DATA retries
queueSize = 10;           % Data Link Layer queue size in packets
samplesPerFrame = 2000;   % Number of samples processed every iteration
verbose = true;           % Print packet activity to command line
sampleRate = 200e3;

% Fix random number generation seed for repeatable simulations
rng(12345)

% Create packetized modem nodes
node1 = helperPacketizedModemNode(...
  'Address', 1, ...
  'DestinationList', [2, 3], ...
  'NumPayloadBits', numPayloadBits, ...
  'PacketArrivalRate', packetArrivalRate, ...
  'ACKTimeOut', ackTimeOut, ...
  'MaxBackoffTime', maxBackoffTime, ...
  'MaxDataRetries', mMaxDataRetries, ...
  'QueueSize', queueSize, ...
  'CarrierDetectorThreshold', 1e-5, ...
  'AGCMaxPowerGain', 65, ...
  'SamplesPerFrame', samplesPerFrame, ...
  'Verbose', verbose, ...
  'SampleRate', sampleRate);
node2 = helperPacketizedModemNode(...
  'Address', 2, ...
  'DestinationList', [1 3], ...
  'NumPayloadBits', numPayloadBits, ...
  'PacketArrivalRate', packetArrivalRate, ...
  'ACKTimeOut', ackTimeOut, ...
  'MaxBackoffTime', maxBackoffTime, ...
  'MaxDataRetries', mMaxDataRetries, ...
  'QueueSize', queueSize, ...
  'CarrierDetectorThreshold', 1e-5, ...
  'AGCMaxPowerGain', 65, ...
  'SamplesPerFrame', samplesPerFrame, ...
  'Verbose', verbose, ...
  'SampleRate', sampleRate);
node3 = helperPacketizedModemNode(...
  'Address', 3, ...
  'DestinationList', [1 2], ...
  'NumPayloadBits', numPayloadBits, ...
  'PacketArrivalRate', packetArrivalRate, ...
  'ACKTimeOut', ackTimeOut, ...
  'MaxBackoffTime', maxBackoffTime, ...
  'MaxDataRetries', mMaxDataRetries, ...
  'QueueSize', queueSize, ...
  'CarrierDetectorThreshold', 1e-5, ...
  'AGCMaxPowerGain', 65, ...
  'SamplesPerFrame', samplesPerFrame, ...
  'Verbose', verbose, ...
  'SampleRate', sampleRate);

% Setup channel
channel = helperMultiUserChannel(...
  'NumNodes', 3, ...
  'EnableTimingSkew', true, ...
  'DelayType', 'Triangle', ...
  'TimingError', 20, ...
  'EnableFrequencyOffset', true, ...
	'PhaseOffset', 47, ...
  'FrequencyOffset', 2000, ...
  'EnableAWGN', true, ...
  'EbNo', 25, ...
  'BitsPerSymbol', 2, ...
  'SamplesPerSymbol', 4, ...
  'EnableRicianMultipath', true, ...
  'PathDelays', [0 node1.SamplesPerSymbol/node1.SampleRate], ...
  'AveragePathGains', [15 0], ...
  'KFactor', 15, ...
	'MaximumDopplerShift', 10, ...
  'SampleRate', node1.SampleRate);

% Main loop
radioTime = 0;
nodeInfo = info(node1);
frameDuration = node1.SamplesPerFrame/node1.SampleRate;
[rcvd1,rcvd2,rcvd3] = deal(complex(zeros(node1.SamplesPerFrame,1)));
while radioTime < runDuration
  trans1 = node1(rcvd1, radioTime);
  trans2 = node2(rcvd2, radioTime);
  trans3 = node3(rcvd3, radioTime);

  % Multi-user channel
  [rcvd1,rcvd2,rcvd3] = channel(trans1,trans2,trans3);

  % Update radio time.
  radioTime = radioTime + frameDuration;
end
|   Time    |     Link    |   Action   |  Seq #  | Backoff 
-----------------------------------------------------------
| 4.46000 s |   3 ->>   1 |       DATA | #     0 |
| 4.67000 s |   1 <<-   3 |       DATA | #     0 |
| 4.67000 s |   1 ->>   3 |        ACK | #     0 |
| 4.68000 s |   3 <<-   1 |        ACK | #     0 |
| 5.04000 s |   1 ->>   3 |       DATA | #     0 |
| 5.16000 s |   2 ->>   3 |       DATA | #     0 |
| 5.30000 s |   1 ->>   3 |   Back Off | #     0 | 1.00000 s |
| 5.42000 s |   2 ->>   3 |   Back Off | #     0 | 1.00000 s |
| 6.31000 s |   1 ->>   3 |       DATA | #     0 |
| 6.43000 s |   2 ->>   3 |       DATA | #     0 |
| 6.57000 s |   1 ->>   3 |   Back Off | #     0 | 2.25000 s |
| 6.69000 s |   2 ->>   3 |   Back Off | #     0 | 1.75000 s |
| 8.45000 s |   2 ->>   3 |       DATA | #     0 |
| 8.66000 s |   3 <<-   2 |       DATA | #     0 |
| 8.66000 s |   3 ->>   2 |        ACK | #     0 |
| 8.67000 s |   2 <<-   3 |        ACK | #     0 |
| 8.83000 s |   1 ->>   3 |       DATA | #     0 |
| 9.09000 s |   1 ->>   3 |   Back Off | #     0 | 2.25000 s |
| 9.52000 s |   3 ->>   2 |       DATA | #     1 |
| 9.73000 s |   2 <<-   3 |       DATA | #     1 |
| 9.73000 s |   2 ->>   3 |        ACK | #     1 |
| 9.74000 s |   3 <<-   2 |        ACK | #     1 |

Результаты

Объект узла собирает статистические данные по эффективности алгоритма Слоя Канала передачи данных. Вызовите info метод Объекта узла, чтобы получить доступ к этим статистическим данным. Следующее показывает демонстрационный результат за 10 вторых симулированных раз с 0,2 пакетными частотами поступления пакетов/секунда. Каждый пакет данных составляет 200 мс долго.

% Display statistics
nodeInfo(1) = info(node1);
nodeInfo(2) = info(node2);
nodeInfo(3) = info(node3);

for p=1:length(nodeInfo)
  fprintf('\nNode %d:\n', p);
  fprintf('\tNumGeneratedPackets: %d\n', nodeInfo(p).NumGeneratedPackets)
  fprintf('\tNumReceivedPackets: %d\n', nodeInfo(p).NumReceivedPackets)
  fprintf('\tAverageRetries: %f\n', nodeInfo(p).Layer2.AverageRetries)
  fprintf('\tAverageRoundTripTime: %f\n', nodeInfo(p).Layer2.AverageRoundTripTime)
  fprintf('\tNumDroppedPackets: %d\n', nodeInfo(p).Layer2.NumDroppedPackets)
  fprintf('\tNumDroppedPackets (Max retries): %d\n', nodeInfo(p).Layer2.NumDroppedPacketsDueToRetries)
  fprintf('\tThroughput: %d\n', numPayloadBits / nodeInfo(p).Layer2.AverageRoundTripTime)
  fprintf('\tLatency: %d\n', nodeInfo(p).Layer2.AverageLatency)
end
Node 1:
	NumGeneratedPackets: 2
	NumReceivedPackets: 1
	AverageRetries: NaN
	AverageRoundTripTime: NaN
	NumDroppedPackets: 0
	NumDroppedPackets (Max retries): 0
	Throughput: NaN
	Latency: Inf

Node 2:
	NumGeneratedPackets: 1
	NumReceivedPackets: 1
	AverageRetries: 2.000000
	AverageRoundTripTime: 3.509844
	NumDroppedPackets: 0
	NumDroppedPackets (Max retries): 0
	Throughput: 5.564350e+03
	Latency: 2.104687e-01

Node 3:
	NumGeneratedPackets: 2
	NumReceivedPackets: 1
	AverageRetries: 0.000000
	AverageRoundTripTime: 0.220254
	NumDroppedPackets: 0
	NumDroppedPackets (Max retries): 0
	Throughput: 8.867039e+04
	Latency: 1.749922e+00

Слой канала передачи данных (слой 2)

Этот пример реализует Слой Канала передачи данных на основе протокола [2] произвольного доступа ALOHA. Следующая блок-схема показывает, как протокол ALOHA передает и получает пакеты данных.

Когда Слой Канала передачи данных имеет пакет Слоя 3, чтобы передать, он запускает новый сеанс и отправляет пакет сразу же с помощью пакета ДАННЫХ. Алгоритм ожидает подтверждения (ACK) пакет. Если ACK не получен перед периодом тайм-аута он замедляет случайное количество времени и отправляет пакет ДАННЫХ снова. Если этому не удается получить ACK после многих повторений, это пропускает пакет. Если во время этого сеанса, новый пакет Слоя 3 получен, пакет Слоя 3 помещается в очередь метода "первым пришел - первым вышел" (FIFO). Если очередь FIFO полна, пакет пропущен.

Алгоритм реализован в helperPacketizedModemDataLinkLayer Системе object™. helperPacketizedModemDataLinkLayer Системный объект задает конечный автомат с тремя состояниями: НЕАКТИВНЫЙ, ACK_WAIT и BACKOFF. Следующий конечный автомат описывает, как алгоритм слоя канала передачи данных реализован в этом объекте. Операторы в скобках, [...], и фигурные скобки, {...}, условия и действия, соответственно. Маленькие круги являются состояниями передачи, используемыми, чтобы представлять несколько условий.

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

Модемная структура

Следующие подарки модемная структура кода. Обработка имеет шесть основных частей и запуски в следующем порядке:

  1. Исходный контроллер

  2. Передайте генератор

  3. Декодер PHY

  4. Слой канала передачи данных

  5. Передайте синтаксический анализатор

  6. Энкодер PHY

Выходные параметры процессов Слоя Канала передачи данных Генератора сообщения и Декодера PHY, таким образом, это должно выполняться после тех двух операций. Синтаксический анализатор сообщения и процесс Энкодера PHY выходные параметры Слоя Канала передачи данных. Эта последовательность гарантирует, что модем может получить пакеты и ответить на них в том же временном интервале. Объект helperPacketizedModemNode реализует модем.

Исходный контроллер

Исходный Контроллер генерирует разрешать сигнал и случайный адрес назначения на основе выбранного пользователями пакетного распределения прибытия.

Передайте генератор

Генератор сообщения начинает создавать пакеты данных о слое 3, когда включил исходный контроллер. Пакеты содержат оцифрованное текстовое сообщение. Если сообщение не помещается в один пакет, генератор создает несколько пакетов. Пакетная структура следующие:

  • Обратиться: 8 битов

  • От Адреса: 8 битов

  • Пакетный Номер: 16 битов

  • Полезная нагрузка: M биты

Декодер PHY

Декодер PHY получает основополосные выборки I/Q и создает пакеты слоя 2. Декодер PHY может откорректировать для амплитудных изменений с помощью AGC, смещений частоты со средством оценки смещения частоты и компенсатором, и синхронизировав скосы и многопутевое использование незначительно расположенного с интервалами эквалайзера обратной связи решения (DFE). Блок-схема физического уровня (Слой 1) приемник следующие:

Когда размер полезной нагрузки данных установлен в 19 530 битов, общая пакетная длина модема является 39 956 выборками. Модемные процессы SamplesPerFrame выборки, который является 2 000 выборок для этого примера в каждой итерации. Меньший SamplesPerFrame результаты в меньшей задержке, но увеличениях издержки модемного алгоритма. Увеличенные издержки могут увеличить время вычислений, таким образом, что модем не запускается в режиме реального времени больше.

Слой канала передачи данных

Слой Канала передачи данных обеспечивает ссылку между двумя соседними узлами. Это использует основанный на ALOHA протокол, описанный в Data Link Layer (Layer 2) раздел. Пакетная структура следующие:

  • Ввод: 4 бита

  • Версия: 2 бита

  • Зарезервированный: 2 бита

  • Обратиться: 8 битов

  • От Адреса: 8 битов

  • Порядковый номер: 8 битов

  • Метка времени: 32 бита

  • Полезная нагрузка: N (= M+32) биты

Слой Канала передачи данных также собирает следующие статистические данные:

  • Количество успешных пакетных передач, которое задано как количество успешно полученных пакетов ACK

  • Средние повторения

  • Среднее время цикла обработки в секундах

  • Количество пропущенных пакетов из-за пакетной очереди слоя 3, являющейся полным

  • Количество пропущенных пакетов из-за повторений

  • Пропускная способность, заданная как успешный уровень доставки данных в битах в секунду

  • Средняя задержка в секундах, заданных как время между генерацией пакета данных о слое 3 и приемом его в целевом узле

Передайте синтаксический анализатор

Синтаксический анализатор сообщения анализирует полученную полезную нагрузку слоя 2 и создает пакет Слоя 3. Это также собирает следующие статистические данные:

  • Количество полученных пакетов

  • Количество полученных дублирующихся пакетов

Энкодер PHY

Энкодер PHY создает пакеты физического уровня путем модуляции пакетов слоя 2 в основополосные выборки I/Q. Пакетная структура следующие:

Фиктивные символы используются, чтобы обучить AGC и обнаружению поставщика услуг. Символы синхронизации являются модулируемой псевдошумовой последовательностью. Заголовок имеет следующие поля:

  • Длина полезной нагрузки: 16 битов

  • CRC: 16 битов

Блок-схема физического уровня (Слой 1) передатчик следующие:

Модель канала

Этот пример симулирует сеть с тремя узлами, но любое количество узлов может быть симулировано. Выход каждого узла передается средству моделирования канала. Канал добавляет сгенерированные модулированные сигналы из всех трех узлов после наложения следующих нарушений канала:

  • Синхронизация скоса

  • Частота возмещена

  • Многопутевой Rician

  • AWGN

В дополнение к этим нарушениям сигналы от соседних узлов применяются потеря пути 20 дБ, в то время как самоинтерференция добавляется непосредственно.

Выполнение Используя радио

Можно также запустить это использование в качестве примера радио вместо симулированного канала. Комбинация оборудования SDR и хоста - компьютера, который запускает сеанс работы с MATLAB, включает узел. Следующие шаги показывают вам, как настроить сеть с тремя узлами. Этот пример использует USRP® B200 и радио B210.

1) Соедините радио USRP® с хостом - компьютером A, который мы вызовем Узел 1. Следуйте инструкциям в Установке и Setup (Пакет Поддержки Communications Toolbox для Радио USRP), чтобы установить и установить ваш хост - компьютер для использования с радио USRP®. Запустите сеанс работы с MATLAB.

2) Настройте Узел 1 как передатчик для инициализации. Запустите helperPacketizedModemInitializeRadio ('tx', PLATFORM, АДРЕС, FC, RT), где PLATFORM является типом радио USRP®, и АДРЕС является порядковым номером или IP-адресом, FC является центральной частотой, и RT является временем выполнения в секундах. Этот пример использует центральную частоту на 915 МГц. Предположение, что ваше радио является B200 с порядковым номером 'ABCDE', вызов функции будет helperPacketizedModemInitializeRadio ('tx', 'B200', 'ABCDE', 915e6, 120). Эта функция запустит передатчик в течение 120 секунд. Если вам требуется больше времени, чтобы закончить инициализацию, повторно выполнить команду со временем долгосрочной перспективы.

3) Повторите шаг 1 для второго радио и хоста - компьютера и вызовите этот Узел узла 2.

4) Настройте Узел 2 как приемник для инициализации. Запустите [CDT, MAXGAIN, RXGAIN] = helperPacketizedModemInitializeRadio ('rx', PLATFORM, АДРЕС, FC, RT). Предположение, что ваше радио является B210 с порядковым номером '12345', вызовом функции будет [CDT1, MAXGAIN1, RXGAIN1] = helperPacketizedModemInitializeRadio ('rx', 'B210', '12345', 915e6, 120). Функция запустится, пока она не определит оптимальные значения для порога детектора поставщика услуг (CDT), максимальное усиление AGC (MAXGAIN), и радио получает усиление (RXGAIN) или пока секунды RT не протекли. Если алгоритм инициализации не может определить подходящие параметры, он может предложить увеличить или уменьшить степень передатчика и повторить инициализацию.

5) Запустите тот же эксперимент с Узлом 1 как приемник и Узел 2 как передатчик, чтобы определить лучшие параметры приемника для Узла 1. В большинстве случаев канал должен быть двойным, и параметры будут очень близки.

6) Повторите шаги 1-5 для всех других пар радио, i.e. Узел 1 и Узел 3, Узел 3 и Узел 2. Получите CDT, MAXGAIN и значения RXGAIN для каждого узла. Если вы получаете различные значения для того же узла при инициализации для различных ссылок, выбираете максимальные значения для MAXGAIN и RXGAIN и минимума CDT.

7) Запустите Узел 1 путем выполнения функции helperPacketizedModemRadio (P, RA, НА, DA, FC, CDT, MAXG, RGAIN, D), где P является платформой, RA является радиообращением, NA является адресом узла, DA является списком адресов назначения, FC является центральной частотой, CDT является порогом обнаружения поставщика услуг, MAXG является максимальным усилением AGC, RGAIN является усилением радиоприемника, и D является длительностью. Например, запуститесь как helperPacketizedModemRadio ('B200', 'ABCDE', 1, [2 3], 915e6, CDT1, MAXGAIN1, RXGAIN1, 120).

8) Запустите Узел 2 путем выполнения helperPacketizedModemRadio ('B210', '12345', 2, [1 3], 915e6, CDT2, MAXGAIN2, RXGAIN2, 120).

9) Запустите Узел 3 путем выполнения helperPacketizedModemRadio ('B200', 'A1B2C', 3, [1 2], 915e6, CDT3, MAXGAIN3, RXGAIN3, 120).

10) Если сеанс заканчивается, каждый узел распечатывает свою статистику.

Три сетевых настройки управляются в течение двух часов. Каждый узел сгенерировал пакеты на уровне 0,2 пакетов/секунда согласно распределению Пуассона. Узлы были помещены приблизительно равное расстояние. Одна из ссылок имела угол обзора, в то время как другие два не сделали. Следующее является результатами, собранными на всех трех узлах. Со времени цикла обработки обмена DATA-ACK использование радио B2xx, соединенных по USB, может составить целых 800 мс, среднее время цикла обработки сети больше 3 секунд. Алгоритм минимизирует пакетную потерю и обеспечивает справедливый доступ к разделяемому каналу ко всем узлам.

Node 1:
 NumGeneratedPackets: 1440
 NumReceivedPackets: 1389
 AverageRetries: 0.533738
 AverageRoundTripTime: 3.725093
 NumDroppedPackets: 95
 NumDroppedPackets (Max retries): 23
 Throughput: 5.242823e+03
Node 2:
 NumGeneratedPackets: 1440
 NumReceivedPackets: 1340
 AverageRetries: 0.473157
 AverageRoundTripTime: 3.290775
 NumDroppedPackets: 31
 NumDroppedPackets (Max retries): 9
 Throughput: 5.934772e+03
Node 3:
 NumGeneratedPackets: 1440
 NumReceivedPackets: 1385
 AverageRetries: 0.516129
 AverageRoundTripTime: 3.558408
 NumDroppedPackets: 107
 NumDroppedPackets (Max retries): 29
 Throughput: 5.488410e+03

Обсуждения

Код симуляции от предыдущих разделов и функции helperPacketizedModemRadio.m оба использует helperPacketizedModemNode.m Системный объект, чтобы реализовать модемный узел. В текущем примере тот же код используется, чтобы оценить систему, сначала с помощью симулированного канала, затем с помощью оборудования SDR и беспроводных каналов.

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

Дальнейшее исследование

Можно варьироваться следующие параметры, чтобы исследовать их эффект на эффективности слоя канала передачи данных:

  • PacketArrivalRate

  • ACKTimeOut

  • MaxBackoffTime

  • MaxDataRetries

  • QueueSize

Можно также исследовать следующие функции для деталей реализации алгоритмов:

Можно исследовать физический уровень только эффективность с помощью скрипта PacketizedModemPhysicalLayerTxRxExample.

Выбранная библиография

Уведомление об авторском праве

Universal Software Radio Peripheral® и USRP® являются товарными знаками Корпорации National Instruments®.

Для просмотра документации необходимо авторизоваться на сайте