Трехмерное внутреннее позиционирование с отпечатками пальцев 802.11az и глубоким обучением

Этот пример показывает, как обучить сверточную нейронную сеть (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)

Figure contains an axes. The axes contains 2 objects of type patch, line.

В примере размещаются четыре точки доступа (AP) и ряд STA, которые вы задаете в этом окружении. Пример генерирует отпечатки пальцев на основе канала распространения, заданного окружением, затем генерирует связанную импульсную характеристику канала с помощью методов трассировки лучей. Для получения дополнительной информации об трассировке лучей для внутренних сред смотрите Коммуникационную ссылку MIMO-OFDM в помещении с помощью примера Ray Tracing.

Параметры AP и STA

Выберите размер передающие и приемные антенны и пропускную способность канала. Эти параметры управляют количеством данных и их разрешением в каждом отпечатке пальца. Большие антенные решетки производят больше реализаций канала и больше 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

Сгенерируйте объекты 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])

Figure contains an axes. The axes contains 4 objects of type patch, line, scatter. These objects represent APs, STAs.

Сгенерируйте характеристики канала при помощи методов трассировки лучей

Установите параметры модели распространения луча. Этот пример рассматривает только LOS и отражения первого порядка путем установки MaxNumReflections параметр в 1. Для более точных моделей распространения установите MaxNumReflections свойство к 2. Увеличение максимального количества отражений увеличивает время симуляции. Чтобы рассмотреть только распространение LOS, установите MaxNumReflections свойство к 0.

pm = propagationModel("raytracing-image-method", ...
    "CoordinateSystem","cartesian", ...
    "SurfaceMaterial","wood", ...
    "MaxNumReflections",1);

Выполните анализ трассировки луча для всех пар AP-STA. The raytrace функция возвращает сгенерированные лучи в массиве ячеек размера NAPоколо-NSTA, где NAP количество точек доступа и NSTA количество 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])

Figure contains an axes. The axes contains 18 objects of type patch, line, scatter. These objects represent APs, STAs.

Сгенерируйте функции и метки отпечатка CIR 802.11az

В этом разделе показано, как вычислить CIR для каждой пары AP-STA с помощью вычисленных лучей. Эта схема показывает цепь обработки, которую пример использует для генерации CIR.

Каждый AP передает пакет 802.11az через шумный канал, и каждый STA принимает пакет. Пример принимает, что каждый STA может различать AP и что между AP не происходит помех.

Прием пакета в местоположении прекращается, если путь между местоположением и AP или если синхронизация прекращает работать из-за низкого ОСШ. В этом случае сгенерированный CIR является нулевым вектором.

Этот пример использует величину каждого многолучевого компонента в CIR в качестве обучающих данных. Поэтому сгенерированные CIR являются реальными. Пример хранит CIR в четырехмерном массиве размера Nsоколо-Ntx-rxоколо-NAPоколо-Nr.

  • Ns - количество выборок во временной области в CIR.

  • Ntx-rx - общее количество пар передающая-приемная антенна.

  • NAP - количество точек доступа.

  • Nr - количество реализаций канала для всех точек ОСШ.

Пример обучает 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 сохраняют и изучают функции из пространственных аспектов данных. Рабочий процесс глубокого обучения включает эти шаги.

  1. Определите обучающие данные.

  2. Задайте модель нейронной сети.

  3. Сконфигурируйте процесс обучения.

  4. Обучите модель.

  5. Оцените производительность модели.

Определите обучающие данные

Нейронные сети являются мощными моделями, которые могут соответствовать различным данным. Чтобы подтвердить результаты, разделите набор данных на 80% обучающих данных и 20% валидационных данных. Обучающие данные - это данные, которые модель учится подгонять, корректируя свои взвешенные параметры на основе ошибки ее предсказаний. Данные валидации являются данными, которые используется в примере, чтобы убедиться, что модель работает, как ожидалось, на невидимых данных и не переподгоняет обучающие данные.

[training,validation] = dlPositioningSplitDataSet(features,labels,0.2);

Задайте модель нейронной сети

Типичный CNN состоит из семи основных слоев.

  1. Входной слой, который определяет размер и тип входных данных

  2. Сверточный слой, который выполняет операции свертки на входе слоя с помощью набора фильтров

  3. Нормализация партии ., который предотвращает нестабильные градиенты путем нормализации активаций слоя

  4. Слой активации (ReLU), который является нелинейной функцией активации, которая порождает выход предыдущего функционального слоя

  5. Слой объединения, который извлекает и объединяет информацию о функциях

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

  7. Выход слой, который определяет размер и тип выхода данных

Можно сформировать глубокую сеть, расположив слои из этих классов и повторив их в блоках. 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);

Figure contains an axes. The axes with title {\bf{CNN Location Prediction}} \fontsize{10}True STA positions coloured by Predicted Class contains 303 objects of type patch, line, scatter. These objects represent conference room, desk1, desk2, desk3, desk4, office, storage.

Figure contains an object of type ConfusionMatrixChart. The chart of type ConfusionMatrixChart has title Accuracy: 68.75%.

Предварительно обученная модель

Этот пример использует небольшой набор данных и ограниченный период обучения, который дает скромные результаты. Вы можете получить более точные результаты с помощью предварительно обученного 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 МГц с четырьмя антенными линейными массивами в передатчике и приемнике (4×4 MIMO).

Чтобы исследовать эффективность этих предварительно обученных моделей, загрузите и извлечите zip-файл, загрузите соответствующий файл MAT в рабочую область и снова запустите раздел «Оценить производительность модели».

Эффект размера антенной решетки и полосы пропускания

Предварительно обученные модели показывают, что увеличенное количество STA и эпохи обучения улучшают эффективность. В этом разделе показаны эффекты полосы пропускания канала и размер антенных решеток на эффективность.

Эти рисунки показывают влияние полосы пропускания канала на эффективность позиционирования и локализации. Эти результаты были сгенерированы путем обучения модели для 100 эпох с miniBatchSize значение 256 с набором данных, составленным из равномерного распределения выборок STA с интервалами 0,1 метра, в которых каждый STA и AP содержал четырехэлементную линейную антенную решетку. Использование большей пропускной способности приводит к более точной оценке, поскольку более высокая частота дискретизации увеличивает разрешение CIRs.

Эти рисунки показывают влияние количества передающих и приемных антенн. Эти результаты были сгенерированы с использованием полосы пропускания 20 МГц. Точность увеличивается для больших антенных решеток из-за наличия большего количества информации о канале. Для примера, a 4×4 канал содержит 16 реализаций канала, тогда как 2×2 канал содержит только четыре. Как и ожидалось, CNN работает лучше, когда обучается с большим количеством данных.

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

Ссылки

  1. IEEE P802.11az™/D2.6 Проект стандарта на информационные технологии - Телекоммуникации и обмен информацией между системами Локальные и столичные сети - Особые требования - Поправка 3: Улучшения позиционирования.

  2. Коккинис, Акис, Лоизос Канарис, Антонио Лиотта, и Ставрос Ставру. «Локализация в помещении RSS на основе одной точки доступа». Датчики 19, № 17 (27 августа 2019): 3711. https://doi.org/10.3390/s19173711.

  3. Ван, Сюю, Линцзюнь Гао, Шивэнь Мао и Сантош Пандей. CSI-основанная дактилоскопия для локализации в помещении: подход глубокого обучения. Транзакции IEEE по автомобильной технологии, 2016, 763-776. https://doi.org/10.1109/TVT.2016.2545523.

  4. Groves, Paul D. Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems. Бостон: Артек Хаус, 2008.