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

 
 
> Передача сигнала с минимальной задержкой, wireless
brag
сообщение Jan 21 2014, 14:13
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Собственно есть задача передать сигнал на расстояние 1-2км с задержкой <100мкс с минимально возможными искажениями.
Сигнал преставляет собой 2-разрядный аналоговый сигнал, те значение(напряжения, например) в определенный момент времени может быть 0 или 1(на пример вольт). Макс. частота изменения этих значений 8кгц, те минимальная длительность 0 или 1 может быть 125мкс. Точности выдержки времени в 20мкс достаточно, по этому этот сигнал я сэмплирую с частотой Fs пока 10Х, те 80кгц. можно и больше. И по сути получаю биты, которые нужно вовремя передать.
По скольку макс задержка может быть 100мкс, то длина блока может быть всего 8бит, те 1 байт. Если взять Fs по-больше, можно сделать блок длинее, но макс. полоса, которую могу занять - где-то 1мгц (не меньше).
Мало того, еще надо успеть засинхронизироватся за ре самы <100мкс, в идеале ~60.

1. Какую при этом модуляцию выбрать? Склоняюсь к DPSK или DQPSK. Что лучше - длинее блок и больше помех или короче блок и меньше помех?
2. Какой код использовать? Порсто Баркер(DSSS) и потом коррелятор или что-то другой. Применения RS/Convolution кодов не вижу смысла на таких коротких блоках.. Или мож просто взять усилок на 10вт и ну его? шутка sm.gif) да, мощность лучше не более 1вт. диапазон думаю 900мгц, там электроника проще, чем на 2.4ггц.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
des00
сообщение Jan 21 2014, 14:40
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(brag @ Jan 21 2014, 08:13) *
Сигнал преставляет собой 2-разрядный аналоговый сигнал, те значение(напряжения, например) в определенный момент времени может быть 0 или 1(на пример вольт).

0 и 1 это одноразрядный сигнал. Интервал открытый или закрытый?

если 0 и 1 возьмите FSK и гоните 2 частоты, приемник будет примитивный.


--------------------
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 21 2014, 15:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



можно попробовать еще готовый модуль вроде nrf24l01 с усилителем, (на субГГц модулей на сс11хх готовых тоже полно) при 1мбит/с 100мкс это десяток байт, короткий пакет с одним-двумя байтами нагрузки влезет.
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 21 2014, 16:03
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
если 0 и 1 возьмите FSK и гоните 2 частоты, приемник будет примитивный.

У меня сейчас стоит CC2500,только не в пакетном режиме, а в RAW, и собственно этот 0/1 и передается(подается прямо ему на вход. ногу) без всякого кодирования. Усилитель к нему 1вт. Радиус действия - ну метров 200 sm.gif Из за помех, отражений.
Особого значения FSK/ASK нету. Но на ASK как-то вроде даже стабильнее работает и задержка меньше.
Да и еще у него задержка такая, что еле влажу. До того был CC1101, у него задержка еще больше и уже сигнал не успевает доходить. Вобщем использование готовых модулей не вариант, они заточены на пакетную передачу данных, всякие там CRC итд. Аналоговые модули конечно имеют меньшую задержку, но толку от них всеравно мало(пробовал LINKS RXM-900-ххх).
Мне же это не подходит. Мне нужно по наличию входного сигнала(я не знаю когда он прийдет и таже ничего о нем не знаю, кроме максимальной частоты и собственно лог. уровня), вернее когда на вход поступи лог.1 за <100мкс успеть включить передатчик(раскочегарить усилитель), послать синхропосылку, собственно само лог1(в закодированном виде), приемник должен засинхронизироватся и на выходе выдать нужный лог. уровень(такой, как поступил на передатчик sm.gif
И дальше, если на входе передатчика лог0 длительностью больше некоторого t, вырубится и перейти опять в ждущий режим.

Цитата
0 и 1 это одноразрядный сигнал. Интервал открытый или закрытый?

Ну да sm.gif Интервал неизвестный, но известный его минимум и известная максимальная погрешность(те можно меандр раздвигать/сдвигать туда-сюда на некий %)

Цитата
при 1мбит/с 100мкс это десяток байт, короткий пакет с одним-двумя байтами нагрузки влезет.

Влезет. Только какую лучше взять кодировку этого байта нагрузки, и вообще всего пакета, абы максимально точно передать по сути засэмплированный аналоговый(но однобитный) сигнал? Можно ведь взять модуляцию DQPSK(с ней проще, чем с QPSK) и получить скорость 2мбит/с и больше избыточности, а можно DBPSK и 1мбит/с но меньше избыточной информации. Можно и FSK, но скорость(теоретический максимум) тогда будет 500кбит/с, что не совсем хорошо.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 21 2014, 16:09
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



как это он аналоговый, если он однобитный?
так и передавать, сэмплить на х8 / х16 и эти 8/16 бит как один/два байта и передавать.
либо просто при смене логического уровня передавать пакет с байтом '1' если переход с 0->1 и байтом '0' если наоборот.
меньше пересылать придётся.

из спячки разогнаться за 100мкс пожалуй не получится.
нордик из неглубокой спячки только за 130мкс просыпается,
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 21 2014, 16:18
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(brag @ Jan 21 2014, 11:03) *
Мне же это не подходит. Мне нужно по наличию входного сигнала(я не знаю когда он прийдет и таже ничего о нем не знаю, кроме максимальной частоты и собственно лог. уровня), вернее когда на вход поступи лог.1 за <100мкс успеть включить передатчик(раскочегарить усилитель), послать синхропосылку, собственно само лог1(в закодированном виде), приемник должен засинхронизироватся и на выходе выдать нужный лог. уровень(такой, как поступил на передатчик sm.gif
И дальше, если на входе передатчика лог0 длительностью больше некоторого t, вырубится и перейти опять в ждущий режим.

я же вам сказал. красота простых решений : все время свистите двумя частотами f0 - лог0, f1 - лог0. будет вам самая ляпота. а так вы хотите делать пакетный модем работающий в импульсном режиме, со всеми тараканами обработки сигнала (синхронизация, кодирование, эквалайзирование и т.д.). Тогда может быть вам и 30дбм ами не потребуется свистеть, а можно будет обойтись где нить 10-15дбм.

Интервал в смысле радиоинтервал, закрытый, открытый, полузакрытый?

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


--------------------
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 21 2014, 16:24
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
как это он аналоговый, если он однобитный?

нет ессно. просто так назвал абы понетней было sm.gif
Цитата
так и передавать, сэмплить на х8 / х16 и эти 8/16 бит как один/два байта и передавать.

другого варианта и нету по моему. только еще ж надо будет помехи отфильтровать как-то..

Цитата
из спячки разогнаться за 100мкс пожалуй не получится.
нордик из неглубокой спячки только за 130мкс просыпается,

ну да. все они такие. техас по-быстрее, но эте все не то. тут без самопального модуля не обойтись

Цитата
я же вам сказал. красота простых решений : все время свистите двумя частотами f0 - лог0, f1 - лог0. будет вам самая ляпота.

Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу sm.gif можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу.

Цитата
а так вы хотите делать пакетный модем работающий в импульсном режиме, со всеми тараканами обработки сигнала (синхронизация, кодирование, эквалайзирование и т.д.).

да. по моему для данной задачи другого варианта нету.
Цитата
а можно будет обойтись где нить 10-15дбм.

Это большой плюс. Тк питание батарейное. 30дбм - это абсолютный максимум.

Цитата
Интервал в смысле радиоинтервал, закрытый, открытый, полузакрытый?

На счет радио не знаю, клиенту вроде всеравно.

Вот так должно быть. Сколько времени нужно ждать start-а - никто не знает, хоть целый день. а хоть секунду-2.
Колбаса тоже неизвестная, нарисовал от балды и длина ее неизвестная(ну максимум есть, меньше 1/5 сек). Ее по сути надо засэмплировать с 8-16х, закодировать, раскодировать за <100мкс.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 21 2014, 16:35
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(brag @ Jan 21 2014, 10:24) *
Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу sm.gif можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу.

частотное разнесение и диплексеры не вчера придумали wink.gif

Цитата
Это большой плюс. Тк питание батарейное. 30дбм - это абсолютный максимум.

Потери в свободном пространстве на 2 километра и частоте 1ГГц будут FSL = 92.44 + 20*log(1) + 20*log(2) = 98.45дБ. сделайте узкополосный приемник с чутьем -100, пара антенн с 10кой и можете работать с 0дБм, еще и запас будет.

Цитата
На счет радио не знаю, клиенту вроде всеравно.

если прямая видимость будет всегда, то может быть.

Цитата
да. по моему для данной задачи другого варианта нету.

вываливайте полное ТЗ, а то начали с одного, закончили другим.


--------------------
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 21 2014, 17:08
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
сделайте узкополосный приемник с чутьем -100, пара антенн с 10кой и можете работать с 0дБм, еще и запас будет.

Где гарантия, что в эту узкую полосу не попадет помеха? по моему на оборот расширение спектра тут к месту...

ТЗ. Ну вот та моя картинка и есть типа ТЗ sm.gif)
Что еще дополнить даже не знаю. По железу ограничений особо нету, кроме тех, что были озвучены ранее. Нужно конечно по проще, но надо вписатся в <1вт. За готовые модули я конечно 2мя руками, но нету таких..
Обе стороны должны уметь как передавать так и принимать. Можно и дуплекс(2 антенны или сплиттер), если по другому никак. Но по моему этого не нужно, одновременно в 2 стороны сигнал не идет. Интервал между переключением перием/передача где-то 15мс, что не сравнимо с <100мкс, за которых нужно успеть раскочегарить усилитель, синхронизироватся, да еще и передать полезную информацию, да еще и без помех(вернее их нужно как-то отсеять).
Обе стороны должны постоянно слушать эфир и собственно лог. вход.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 21 2014, 17:19
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(brag @ Jan 21 2014, 23:24) *
ну да. все они такие. техас по-быстрее, но эте все не то. тут без самопального модуля не обойтись

а принципиально трансиверу именно засыпать? питание сильно батарейное и 10мА постоянного потребления не годятся? без спячки тот же nrf24 за 10мкс вроде может начать передавать по команде.

Цитата(brag @ Jan 21 2014, 23:24) *
Все время свистеть не могу. Мне еще и принимать обратно ответ нужно, по такому же принципу sm.gif можно и фул-дуплекс, 2 антенны, но свистеть постоянно всеравно не могу.

всё время не надо, передавайте не уровни, а фронты судя по картинке они чаще чем раз в 125мкс не меняются, ну или можно попробовать успеть переключиться на приём и принять ответ за те же 100мкс (50мкс передача 50 приём на 2мбит может и успеет)
udp: а нет, вру, не успеет, переключение rxtx тоже 130мкс.
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 21 2014, 17:29
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
а принципиально трансиверу именно засыпать? питание сильно батарейное и 10мА постоянного потребления не годятся? без спячки тот же nrf24 за 10мкс вроде может начать передавать по команде.

Годится конечно. Но за какое время сигнал дойдет до выхода приемной стороны? Если там приемник на FFT основан, то можно вообще забыть.
Я много разных модулей перепробовал. Обычно передатчик у них передает довольно быстро, а вот приемник довольно долго думает, преже чем выдаст сигнал.

Цитата
всё время не надо, передавайте не уровни, а фронты судя по картинке они чаще чем раз в 125мкс не меняются, ну или можно попробовать успеть переключиться на приём и принять ответ за те же 100мкс (50мкс передача 50 приём на 2мбит может и успеет)

Даже за 125мкс никакой модуль в пакетном режиме не успеет, по крайней мере я таких не нашел.
У меня пахает только СС2500 и то только в RAW режиме, те тупо подаем лог уровень на дополнительную ногу(не по SPI). Но помех там огого и задержка на пределе, нацепить какой-нибудь алгоритм уже не успею.

Уточнил по времени переключения прием/передача - минимальное 2мс. Если не успеваем, то нужно дуплекс и одновременно с передачей слушать эфир. Но это пока не принципиально.
Главное - быстро начать передавать, внезапно sm.gif ну и поймать ессно тоже быстро. вообще чем быстрее, тем лучше. 100мкс это абсолютный максимум.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 21 2014, 19:59
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(brag @ Jan 22 2014, 00:29) *
Годится конечно. Но за какое время сигнал дойдет до выхода приемной стороны? Если там приемник на FFT основан, то можно вообще забыть.
Я много разных модулей перепробовал. Обычно передатчик у них передает довольно быстро, а вот приемник довольно долго думает, преже чем выдаст сигнал.

больше чем время одного бита ему не над чем там думать, никакой новой информации о ранее принятом бите он уже не получит, так что приёмник сообщает сразу.
точно цифры не вспомню, nrf24l01 два трансивера ставил так чтобы они друг другу по очереди пакеты слали без задержек туда-сюда, никаких заметных задержек не припомню.
Цитата(brag @ Jan 22 2014, 00:29) *
Даже за 125мкс никакой модуль в пакетном режиме не успеет, по крайней мере я таких не нашел.
Уточнил по времени переключения прием/передача - минимальное 2мс. Если не успеваем, то нужно дуплекс и одновременно с передачей слушать эфир. Но это пока не принципиально.
Главное - быстро начать передавать, внезапно sm.gif ну и поймать ессно тоже быстро. вообще чем быстрее, тем лучше. 100мкс это абсолютный максимум.

nrf24l01 в одну сторону должен справиться.
а вот переключение приём/передача у него 140мкс, так что если надо в обе стороны придётся ставить по два с каждой стороны на разных частотных каналах.
но на 2.4ГГц на 2км нужна прямая видимость и хорошие антенны при 100мВт
были еще на 433 трансиверы, dp1203 вроде, их прямо за модулятор дергать можно было.
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 21 2014, 21:08
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
больше чем время одного бита ему не над чем там думать, никакой новой информации о ранее принятом бите он уже не получит, так что приёмник сообщает сразу.
точно цифры не вспомню, nrf24l01 два трансивера ставил так чтобы они друг другу по очереди пакеты слали без задержек туда-сюда, никаких заметных задержек не припомню.

Подключали по каналу дата-логгера на вход передатчика и выход приемника? Какая была задержка?
Если приемник аналоговый, то задержек ессно не будет, но даже и они дают задержку порядка 40-60мкс, пруф ниже. Если цифровой, то задержки могут быть чудовищьные, если на пример обработка сигнала идет в частотном домене, само только FFT чего стоит. + буфферизация разная итп. Или может быть тупо linear-phase фильтр какой-нибудь работает(или хуже zero-phase), а они тоже могут давать задержку даже если реализованы тупо сверткой, сама природа их такова...

Цитата
nrf24l01 в одну сторону должен справиться.

как-то не охота покупать очередной труп и тратить на него время, я же с десяток разных перепробовал.
Кое-как работали только аналоговые, но там фильтры обычно стоят на 4.8-10кбит/с - толку от них тоже 0.

2.4 я и не потяну, слишком уж плата сложная получается. Вот 800-900мгц уже можно и "на коленке", с готовых микросхем ессно, рассыпухи минимум. Усилок готовый тоже.

Вот. Хоть снято и звуковой картой, но все отличnо видно. Между каналами карты задержки нету ни на сэмпл, проверено.

Это аналоговый модуль rxm900-hp3. У CC1101 вообще задержка 34 сэмпла(177мкс).
Сигнал взят по средине, не с начала(чтоб не думали, что приемник долго стартует). Те тут чисто задержка в основном приемника (у передатчика она гораздо меньше).
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 21 2014, 22:58
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



можно попробовать готовым модулем обойтись, но на два км антенны нужны будут непростые.
http://www.aliexpress.com/item/New-NRF24L0...1435124344.html
по поводу задержек у него битовая скорость всё таки 2МГц с соответствующей полосой. соответственно и задержки по сравнению с модулями на 433 с полосой в десяток кГц будут гораздо меньше.

подключал так, что один модуль по получению пакета захватывал время прихода таймером и сразу же отправлял его обратно, точно цифры не назову, так как смотрел в основном на джиттер, который был вроде меньше микросекунды, но каких-то дополнительных задержек не припомню
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 22 2014, 00:12
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
по поводу задержек у него битовая скорость всё таки 2МГц с соответствующей полосой. соответственно и задержки по сравнению с модулями на 433 с полосой в десяток кГц будут гораздо меньше.

Почему? Это где-то в документе прописано? Или извесны внутренние алгоритмы трансивера?
Битовая скорость и задержка - вещи ортогональные. Даже наоборот, чем выше скорость, тем выше задержка, ибо приемник сложнее, буфферы длиннее, алгоритмы тяжелее итд.

Цитата
захватывал время прихода таймером и сразу же отправлял его обратно,

ну как бы этого не достаточно, чтобы оценить задержку. Тут нужно либо 2 модуля на 1 таймер(контроллер) либо послать пакт, дождатся ответа и заглянуть в таймер - получим общую задержку туда/обратно.

Вот пока нарисовалась такая схемка.

И моделька в матлабе.
CODE
clear;

load('x0.mat');

% resample x8x11 (relative to 8khz)
Fs=8e3*8;
yr=resample(p3,Fs,48e3);
f1=yr>0.5;
x0(f1)=1;
x0(~f1)=-1;
clear yr;

% spread every sample by Barker code 11.
% Fc will be 8*8*11=704khz.
len=400;%size(x0,2);
barkercode=[+1 +1 +1 -1 -1 -1 +1 -1 -1 +1 -1];
%barkercode=[1 1 1 0 1 1 0 1 0 0 0]*2-1;
lb=size(barkercode,2);
Fc=Fs*lb;
y1=zeros(1,len*lb);
st=0;
timeout=0;
for i=1:len;
switch st
case 0 % wait for 'one'
if(x0(i)>0)
st=1;
timeout=0;
end
case 1
y1((i-1)*11+1:i*11)=x0(i)*barkercode; % encode
if(x0(i)<0) % check timeout
if(timeout<60)timeout=timeout+1;
else st=0;
end
else
timeout=0;
end
end
y0((i-1)*11+1:i*11)=x0(i); % just for debug
end
len=size(y1,2);

% add white noise
y1=awgn(y1,4);

% add multipath
b=[1,0,0.1,0,0.5,0,0.2];
y1=filter(b,1,y1);

% decode barker, simple cross-correlator
y2=zeros(1,len);
y3=zeros(1,len);
y00=0;
thr=7; % detector threshold
for i=lb:len;
% cross-correlation
y2(i)=sum(y1(i-lb+1:i).*barkercode);
% detector
if(y2(i)>thr)y00=1;
elseif(y2(i)<-thr)y00=-1;
end
y3(i)=y00;
end

% downsample /11
y3d=resample(y3,1,lb);
len=size(y3d,2);

% low-pass
b=ones(3,1)/3;
y2d=filter(b,1,y3d);
% decision
y3d=y2d;
f1=y3d>0.05;y3d(f1)=1;
f1=y3d<-0.05;y3d(f1)=-1;

% median filter
%y2d=zeros(1,len);
medsz=5; %median filter
medblk=zeros(medsz,1);
for i=1:len
medblk(1)=y3d(i);
medblk=circshift(medblk,1);
m=sort(medblk);
y3d(i)=m((medsz+1)/2);
end

len=size(y3d,2);
x=[1:len];
plot(x,x0(1:len),x,y2d,x,y3d);

Пока без модуляции. Просто добавил в сигнал шума (SNR=4db) и подобие multipath interference. Результат неплохой, ошибок вроде нету, только джиттер(допустимо). Задержка получилась 75мкс.

Вот такая картинка получается на выходе коррелятора и пикового детектора(по сути компаратор с памятью).

А вот то же, только после добавления шума и отражений

Короткие ошибки, которые видно на выходе с детектора спокойно корректируются медианным фильтром.
И того избыточность получилась аж в 88 раз sm.gif Как бы этот алгоритм улучшить или вообще переделать?
Можно попробовать коды Хемминга с мягким декодированием..
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 22 2014, 11:06
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Подумал, что медианный фильтр(в 11 раз большего порядка) потяну и на максимальной частоте(без downsampling-a на 11). выкинул дециматор. Так стало еще лучше и задержка уменьшилась до 40мкс.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 07:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01519 секунд с 7
ELECTRONIX ©2004-2016