Этот пример показывает, как обучить сверточную нейронную сеть (CNN) для локализации и позиционирования с помощью сгенерированных данных 802.11az™ IEEE ®. Используя обученный CNN, можно предсказать местоположение или положение нескольких станций (STA) на основе отпечатка пальца, состоящего из нескольких импульсных характеристик канала (CIRs), и оценить эффективность CNN.
Стандарт [1] Wi-Fi™ IEEE 802.11az, обычно называемый позиционированием следующей генерации (NGP), обеспечивает функции физического слоя, которые позволяют улучшать диапазон и позиционирование с помощью классических методов.
Классические методы полагаются на условия линии зрения (LOS), чтобы эффективно извлечь временную информацию, такую как время прибытия (ToA), или пространственную информацию, такую как угол прибытия (AoA), из многолучевого сигнала, чтобы вычислить расстояние или область значений между устройствами. Когда область значений между минимум тремя устройствами может быть измерен, трилатерация может использоваться, чтобы вычислить оценку положения. Для получения дополнительной информации о том, как использовать классические методы ранжирования и позиционирования, смотрите пример позиционирования 802.11az с использованием расчета времени прибытия в суперразрешение.
Методы дактилоскопии и глубокого обучения могут использоваться в системах позиционирования Wi-Fi для достижения точности субметров даже в многолучевых окружениях без линии видимости (NLOS) [2]. Отпечаток пальца обычно содержит информацию о состоянии канала (CSI), такую как индикатор уровня принимаемого сигнала (RSSI) или оценка канала из принятого сигнала, измеренная в определенном месте в окружении [3].
Во время фазы обучения сети пример создает базу данных путем дискретизации отпечатков каналов в нескольких известных местах в окружении. Сеть оценивает местоположение пользователя на основе сигнала, принятого в неизвестном местоположении, используя базу данных в качестве опорной.
Этот пример создает набор данных из отпечатков CIR при помощи сигналов 802.11az в комнатном окружении, маркируя каждый отпечаток пальца информацией о местоположении. Пример обучает CNN прогнозировать местоположения STA с помощью подмножества отпечатков пальцев, затем оценивает эффективность обученной модели, генерируя предсказания местоположений STA на основе их остатка отпечатка CIR от набора данных.
Для простоты в этом примере используется небольшой набор данных, который приводит к короткому времени симуляции. Для получения более точных результатов используйте большой набор данных. Пример предоставляет предварительно обученные модели, чтобы показать высокие уровни производительности, которые могут быть достигнуты с большим количеством обучающих данных.
Сгенерируйте обучающие данные для внутреннего офиса окружения заданные office.stl
файл.
mapFileName = "office.stl";
helperVisualizeScenario(mapFileName)
В примере размещаются четыре точки доступа (AP) и ряд STA, которые вы задаете в этом окружении. Пример генерирует отпечатки пальцев на основе канала распространения, заданного окружением, затем генерирует связанную импульсную характеристику канала с помощью методов трассировки лучей. Для получения дополнительной информации об трассировке лучей для внутренних сред смотрите Коммуникационную ссылку MIMO-OFDM в помещении с помощью примера Ray Tracing.
Выберите размер передающие и приемные антенны и пропускную способность канала. Эти параметры управляют количеством данных и их разрешением в каждом отпечатке пальца. Большие антенные решетки производят больше реализаций канала и больше CIR на отпечаток пальца. Более высокая полоса пропускания увеличивает частоту дискретизации CIR, более подробно фиксируя ее. Изменение этих параметров делает набор данных несовместимым с предварительно обученными моделями, так как размерности каждого отпечатка пальца должны совпадать с формой входного слоя модели.
S = RandStream("mt19937ar","Seed",5489); % Set the RNG for reproducibility. RandStream.setGlobalStream(S); txArraySize = [4 1]; % Linear transmit array rxArraySize = [4 1]; % Linear receive array chanBW = "CBW40";
Укажите количество STA, используемых для отображения окружения и распределения STA. Чтобы равномерно распределить STA в каждой размерности как равномерно разнесенную сетку, установите distribution
на uniform
. Чтобы распределить STA случайным образом в окружении, установите distribution
на random
.
Когда вы распределяете STA равномерно, пример определяет количество STA при помощи значения staSeparation
, который измеряет расстояние, в метрах, между STA во всех размерностях.
Когда вы случайным образом распределяете STA, задайте количество STA, задав значение numSTAs
.
distribution = "uniform"; staSeparation = 0.5; % STA separation, in meters, used only when the distribution is uniform numSTAs = 500; % Number of STAs, used only when distribution is random
Определите, выполняет ли пример локализацию или позиционирование [4]. Локализация является задачей классификации, в которой выход модели является предсказанной меткой, связанной с дискретной областью карты, в которой находится STA. Локализация полезна для задач, где точное позиционирование менее важно, чем возможность оценить общее местоположение пользователя с высокой степенью точности, например, комната на полу создания или прохода в магазине. Позиционирование является регрессионной задачей, в которой выход модели является предсказанной позицией STA. Позиционирование может оценить точное местоположение пользователя, но может иметь более высокую ошибку для позиций в области по сравнению с локализацией.
task = "localization";
Задача локализации определяет общее местоположение STA, а не его точное местоположение. Эта схема показывает размещение небольшого офиса с дискретными областями, используемыми в качестве классов для локализации. Красные квадратные маркеры указывают местоположение точек доступа. Синий штриховой прямоугольник представляет область, в которой пример распределяет STA во время процесса обучения. Пример ограничивает высоту STA в области значений от 0,8 до 1,8 метра. Эта область значений представляет реалистичное множество значений для портативных потребительских устройств. Это ограничение также минимизирует вероятность помещения STA в недоступные положения.
В этом разделе показано, как синтезировать набор данных для обучения CNN.
Сгенерируйте объекты AP и STA и визуализируйте их в сценарии внутри помещения. Если вы используете файл, отличный от office.stl
необходимо настроить местоположения AP и STA в dlPositioningCreateEnvironment
функция для соответствия новому окружению.
if distribution == "uniform" [APs,STAs] = dlPositioningCreateEnvironment(txArraySize,rxArraySize,staSeparation,"uniform"); else [APs,STAs] = dlPositioningCreateEnvironment(txArraySize,rxArraySize,numSTAs,"random"); end helperVisualizeScenario(mapFileName,APs,STAs) view([65.99 32.49])
Установите параметры модели распространения луча. Этот пример рассматривает только LOS и отражения первого порядка путем установки MaxNumReflections
параметр в 1
. Для более точных моделей распространения установите MaxNumReflections
свойство к 2
. Увеличение максимального количества отражений увеличивает время симуляции. Чтобы рассмотреть только распространение LOS, установите MaxNumReflections
свойство к 0
.
pm = propagationModel("raytracing-image-method", ... "CoordinateSystem","cartesian", ... "SurfaceMaterial","wood", ... "MaxNumReflections",1);
Выполните анализ трассировки луча для всех пар AP-STA. The raytrace
функция возвращает сгенерированные лучи в массиве ячеек размера около-, где количество точек доступа и количество STA.
% Perform ray tracing for all transmitters and receivers in parallel rays = raytrace(APs,STAs,pm,"Map",mapFileName); size(rays)
ans = 1×2
4 480
Визуализируйте вычисленные лучи между всеми AP и одним STA. Цвет представляет связанную потерю пути в дБ.
helperVisualizeScenario(mapFileName,APs,STAs(30)) helperVisualizeRays([rays{:, 30}]); view([84.75 56.38])
В этом разделе показано, как вычислить CIR для каждой пары AP-STA с помощью вычисленных лучей. Эта схема показывает цепь обработки, которую пример использует для генерации CIR.
Каждый AP передает пакет 802.11az через шумный канал, и каждый STA принимает пакет. Пример принимает, что каждый STA может различать AP и что между AP не происходит помех.
Прием пакета в местоположении прекращается, если путь между местоположением и AP или если синхронизация прекращает работать из-за низкого ОСШ. В этом случае сгенерированный CIR является нулевым вектором.
Этот пример использует величину каждого многолучевого компонента в CIR в качестве обучающих данных. Поэтому сгенерированные CIR являются реальными. Пример хранит CIR в четырехмерном массиве размера около-около-около-.
- количество выборок во временной области в CIR.
- общее количество пар передающая-приемная антенна.
- количество точек доступа.
- количество реализаций канала для всех точек ОСШ.
Пример обучает CNN путем объединения этих функций с метками позиций STA или имен местоположений.
Чтобы симулировать изменения в окружении, повторите процесс дактилоскопии при различных шумовых условиях, задав область значений значений ОСШ.
snrs = [10 15 20];
Настройте параметры формы волны. В частности, установите количество пространственно-временных потоков (STS) на размер передающей антенной решетки, чтобы гарантировать, что сигнал от каждой передающей антенны вносит вклад в отпечаток пальца STA во время оценки канала.
cfg = heRangingConfig('ChannelBandwidth',chanBW, ... "NumTransmitAntennas",prod(txArraySize), ... "SecureHELTF",true, ... "GuardInterval",1.6); cfg.User{1}.NumSpaceTimeStreams = prod(txArraySize);
Сгенерируйте набор данных.
[features,labels] = dlPositioningGenerateDataSet(rays,STAs,APs,cfg,snrs);
Generating Dataset: 10% complete. Generating Dataset: 20% complete. Generating Dataset: 30% complete. Generating Dataset: 40% complete. Generating Dataset: 50% complete. Generating Dataset: 60% complete. Generating Dataset: 70% complete. Generating Dataset: 80% complete. Generating Dataset: 90% complete. Generating Dataset: 100% complete.
Глубокое обучение использует нейронные сети, чтобы аппроксимировать функции в различных областях значений областей. CNN является архитектурой нейронной сети, которая использует двумерные многоканальные изображения. CNN сохраняют и изучают функции из пространственных аспектов данных. Рабочий процесс глубокого обучения включает эти шаги.
Определите обучающие данные.
Задайте модель нейронной сети.
Сконфигурируйте процесс обучения.
Обучите модель.
Оцените производительность модели.
Нейронные сети являются мощными моделями, которые могут соответствовать различным данным. Чтобы подтвердить результаты, разделите набор данных на 80% обучающих данных и 20% валидационных данных. Обучающие данные - это данные, которые модель учится подгонять, корректируя свои взвешенные параметры на основе ошибки ее предсказаний. Данные валидации являются данными, которые используется в примере, чтобы убедиться, что модель работает, как ожидалось, на невидимых данных и не переподгоняет обучающие данные.
[training,validation] = dlPositioningSplitDataSet(features,labels,0.2);
Типичный CNN состоит из семи основных слоев.
Входной слой, который определяет размер и тип входных данных
Сверточный слой, который выполняет операции свертки на входе слоя с помощью набора фильтров
Нормализация партии ., который предотвращает нестабильные градиенты путем нормализации активаций слоя
Слой активации (ReLU), который является нелинейной функцией активации, которая порождает выход предыдущего функционального слоя
Слой объединения, который извлекает и объединяет информацию о функциях
Выпадающий слой, который случайным образом деактивирует процент параметров предыдущего слоя во время обучения, чтобы предотвратить сверхподбор кривой
Выход слой, который определяет размер и тип выхода данных
Можно сформировать глубокую сеть, расположив слои из этих классов и повторив их в блоках. CNN в этом примере состоит из четырех блоков, каждый со сверткой, нормализацией партии ., ReLU и средним слоем объединения. Пример добавляет регуляризацию выпадения (20%) перед конечными слоями. Эта архитектура аналогична архитектуре CNN, используемой в примере Train Convolutional Neural Network for Regression (Deep Learning Toolbox), который предсказывает повернутые положения рукописных цифровых изображений и демонстрирует разнообразные приложения моделей глубокого обучения с минимальными изменениями их параметров.
Создайте CNN.
layers = [ imageInputLayer(size(training.X, 1:3)) convolution2dLayer(3,256,"Padding","same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,"Stride",2,"Padding","same") convolution2dLayer(3,256,"Padding","same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,"Stride",2,"Padding","same") convolution2dLayer(3,256,"Padding","same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,"Stride",2,"Padding","same") convolution2dLayer(3,256,"Padding","same") batchNormalizationLayer reluLayer averagePooling2dLayer(2,"Stride",2,"Padding","same") dropoutLayer(0.2)];
Задайте размер выходного слоя и функцию активации для выхода, в зависимости от выбранной задачи.
if task == "localization" layers = [ layers fullyConnectedLayer(7) softmaxLayer classificationLayer]; else % positioning layers = [ layers fullyConnectedLayer(3) regressionLayer]; end
Сопоставьте метки, данные сети, с ожидаемым выходом модели для каждой задачи. Функциями являются изображение отпечатков CIR для обеих задач.
if task == "localization" valY = validation.Y.classification; trainY = training.Y.classification; else % positioning valY = validation.Y.regression; trainY = training.Y.regression; end
Установите количество выборок обучающих данных, которые модель оценивает во время каждой итерации обучения. Увеличьте количество выборок при использовании большого набора данных.
miniBatchSize = 32;
Установите частоту валидации так, чтобы сеть проверялась примерно один раз в эпоху. Сеть оценивает невидимые выборки, чтобы протестировать обобщение в конце каждого периода валидации.
validationFrequency = floor(size(training.X,4)/miniBatchSize);
Задайте опции, которые управляют процессом обучения. Количество эпох управляет тем, сколько раз пример обучает модель последовательно на полном наборе обучающих данных. По умолчанию пример обучает модель на графическом процессоре, если он доступен. Использование графический процессор требовало Parallel Computing Toolbox™ и поддерживаемого графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
options = trainingOptions("adam", ... "MiniBatchSize",miniBatchSize, ... "MaxEpochs",3, ... "InitialLearnRate", 1e-4,... "Shuffle","every-epoch", ... "ValidationData",{validation.X,valY'}, ... "ValidationFrequency",validationFrequency, ... "Verbose",true, ... "ResetInputNormalization",true, ... "ExecutionEnvironment","auto");
Обучите модель.
net = trainNetwork(training.X,trainY',layers,options);
Training on single CPU. Initializing input data normalization. |======================================================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Validation | Mini-batch | Validation | Base Learning | | | | (hh:mm:ss) | Accuracy | Accuracy | Loss | Loss | Rate | |======================================================================================================================| | 1 | 1 | 00:00:01 | 21.88% | 51.04% | 1.9794 | 1.6179 | 1.0000e-04 | | 1 | 36 | 00:00:11 | 68.75% | 65.62% | 0.8964 | 0.9594 | 1.0000e-04 | | 2 | 50 | 00:00:14 | 59.38% | | 1.0475 | | 1.0000e-04 | | 2 | 72 | 00:00:21 | 68.75% | 67.36% | 0.9459 | 0.8693 | 1.0000e-04 | | 3 | 100 | 00:00:29 | 65.62% | | 0.9422 | | 1.0000e-04 | | 3 | 108 | 00:00:33 | 59.38% | 66.32% | 1.0506 | 0.8298 | 1.0000e-04 | |======================================================================================================================|
Исследуйте производительность модели, исследуя предсказанные значения для данных валидации. Предсказать метки путем передачи функций набора валидации через сеть, а затем оценить эффективность сети путем сравнения предсказанных меток с метками набора валидации.
if task == "localization" YPred = net.classify(validation.X); else % positioning YPred = net.predict(validation.X); end
Сгенерируйте визуальное и статистическое представление результатов.
Для локализации, dlPositioningPlotResults
функция генерирует трехмерную карту, которая отображает истинные местоположения STA. Цвет, назначенный каждому STA, обозначает его предсказанное местоположение. Функция также генерирует матрицу неточностей, в которой строки соответствуют предсказанному классу, а столбцы - истинному классу. Диагональные камеры соответствуют наблюдениям, которые правильно классифицированы. Недиагональные камеры соответствуют неправильно классифицированным наблюдениям. Если сеть работает хорошо, элементы основной диагонали значительно больше, чем другие элементы матрицы.
Для позиционирования цвет, назначенный каждому STA, обозначает ошибку расстояния предсказанного положения. Функция также генерирует совокупную функцию распределения (CDF). Ось Y измеряет долю данных, для которых измеренная ошибка расстояния меньше или равна соответствующему значению на оси X.
metric = dlPositioningPlotResults(mapFileName,validation.Y,YPred,task);
Этот пример использует небольшой набор данных и ограниченный период обучения, который дает скромные результаты. Вы можете получить более точные результаты с помощью предварительно обученного CNN с большим набором данных. Загрузите получившийся CNN для позиционирования и локализации из https://www.mathworks.com/supportfiles/spc/wlan/Positioning80211azExample/pretrained_networks.zip. Этот zip-файл содержит два файла MAT:
localization_cbw40_4x4.mat - CNN обучен локализации
positioning_cbw40_4x4.mat - CNN обучен для позиционирования
Все модели были обучены на 100 эпох с miniBatchSize
значение 256 на наборе данных отпечатков пальцев из равномерного распределения STA с staSeparation
значение 0.1
. Полоса пропускания составляла 40 МГц с четырьмя антенными линейными массивами в передатчике и приемнике (44 MIMO).
Чтобы исследовать эффективность этих предварительно обученных моделей, загрузите и извлечите zip-файл, загрузите соответствующий файл MAT в рабочую область и снова запустите раздел «Оценить производительность модели».
Предварительно обученные модели показывают, что увеличенное количество STA и эпохи обучения улучшают эффективность. В этом разделе показаны эффекты полосы пропускания канала и размер антенных решеток на эффективность.
Эти рисунки показывают влияние полосы пропускания канала на эффективность позиционирования и локализации. Эти результаты были сгенерированы путем обучения модели для 100 эпох с miniBatchSize
значение 256 с набором данных, составленным из равномерного распределения выборок STA с интервалами 0,1 метра, в которых каждый STA и AP содержал четырехэлементную линейную антенную решетку. Использование большей пропускной способности приводит к более точной оценке, поскольку более высокая частота дискретизации увеличивает разрешение CIRs.
Эти рисунки показывают влияние количества передающих и приемных антенн. Эти результаты были сгенерированы с использованием полосы пропускания 20 МГц. Точность увеличивается для больших антенных решеток из-за наличия большего количества информации о канале. Для примера, a 44 канал содержит 16 реализаций канала, тогда как 22 канал содержит только четыре. Как и ожидалось, CNN работает лучше, когда обучается с большим количеством данных.
Эти результаты были получены с выборками данных, которые не использовались для обучения CNN. Если выборки данных, используемые для обучения CNN, также используются для оценки эффективности, результаты могут отличаться.
IEEE P802.11az™/D2.6 Проект стандарта на информационные технологии - Телекоммуникации и обмен информацией между системами Локальные и столичные сети - Особые требования - Поправка 3: Улучшения позиционирования.
Коккинис, Акис, Лоизос Канарис, Антонио Лиотта, и Ставрос Ставру. «Локализация в помещении RSS на основе одной точки доступа». Датчики 19, № 17 (27 августа 2019): 3711. https://doi.org/10.3390/s19173711.
Ван, Сюю, Линцзюнь Гао, Шивэнь Мао и Сантош Пандей. CSI-основанная дактилоскопия для локализации в помещении: подход глубокого обучения. Транзакции IEEE по автомобильной технологии, 2016, 763-776. https://doi.org/10.1109/TVT.2016.2545523.
Groves, Paul D. Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems. Бостон: Артек Хаус, 2008.