Как стать автором
Обновить

Комментарии 36

Начали хорошо, а потом начали убивать читателя формулами. Достаточно было графиков. Ну кому он нужен интеграл для понимания?
p.s. Сам радиофизик и много чего могу рассказать про сабж.
да интеграла всего 2 — sinc функция и корреляция — и то — вывод свернул — кто хочет — посмотрит- некоторые вещи нельзя на пальцах объяснить — интеграл в первом случае нужен, чтобы понять откуда следует уширение спектра. Да и как то — статья вообще пользу должна информационную приносить какую то я считаю, а не прочитал и забыл, извилинами немного пошевелить никому не лишне
Поддерживаю, без него мне было бы трудно понять ту часть информации, что касается спектра. Тем более, что изложено просто и по шагам — первых курсов матана достаточно для понимания.
сигналы и спектры и коды — это конечно прекрасно, но при чем тут конкретно IEEE 802.11 wi-fi я не понял.
Wifi -простите — думал это общеизвестно — внесу в заголовок пояснения
это я понимаю, я имею в виду, что теория, описанная в посте относится не к wifi в частности а в принципе к беспроводной цифровой передаче данных. Увидив заголовок я просто ожидал внутри нечто-более конкретное
это как раз довольно частный случай — тут технология расширения спектра методом прямой последовательности «DSSS» и фазовая модуляция — есть еще много различных способов кодирования и модуляции, но — как вы заметили — я действительно старался больше рассказывать об общих принципах, чем о конкретных деталях данного стандарта — просто удобно как пример его взять
Уширение спектра кодами Баркера и Уолша используется везде. Даже в брелках сигналки от автомобилей.
Хорошая статья, такими бы да книги писать. Наглядно, интересно.
объясните пожалуйста вот такую вещь.
Все говорят, что обнаружение заранее известного сигнала лучше делать корреляционной функцией.
И картинки у Вас красивые на этот счет. Но вот для меня непонятность такая.
Предположим после радио детектора прямоугольный искомый сигнал приходит слабый, а паразитный сигнал треугольный и сильный. Нарисуем треугольник повыше, а прямоугольник пониже.
В этом случае после корреляционной функции отклик будет сильнее на треугольный сигнал.
Как же так?
Мне кажется прежде чем вычислять корреляционную функцию из сигнала и из эталона нужно вычесть постоянную составляющую, тогда получится все правильно. Я прав или нет? Отсутствие осей на графиках в статье заставляет меня сомневаться в правильности моих размышлений.

И вот дальше по статье при вычислении корреляционной функции от цифровой последовательности 11100010010 фраза «при этом заменив 0 на -1» — это ли не попытка вычесть постоянную составляющую?
Хотя при 11 битах это убрать постоянку полностью не возможно.
Корреляционный метод является оптимальным для обнаружения сигналов на фоне БЕЛОГО ШУМА — про специфические помехи речи не было — там другие методы применяются. Понятие постоянная составляющая — она вообще говоря происходит из Фурье анализа — корреляцией можно пользоваться и без него, так что вычитать постоянную составляющую или нет — дело сугубо добровольное — ограничений на это никаких не накладывается. 0 на -1 заменяется, потому что 0 и 1 это уровни в компьютере, в передатчике же управляющие уровни 1 и -1 — размах в 2 раза больше, поэтому автокорреляция считается так
хм… причем белый шум… Вы же говорите об обнаружении сигналов как минимум двух видов, двух эталонов (ноль или единица для цифровых сетей)?
гипотетически предположим летят 2 самолета: у одного позывные треугольные импульсы, а у второго прямоугольные. Как отличить один самолет от другого? разве не корреляционная функция будет использоваться? думаю нужно вычислять 2 корреляционные функции от сигнала из эфира в скользящем временном окне с первым и вторым эталонами. Если отклик корреляционной функции выше некоторого порога, то считаем что сигнал соответствующий эталону обнаружен. Но тот же самый вопрос — нужно ли удалять постоянную составляющую? Ведь яркий входной сигнал (с постоянной составляющей) с любым эталоном легко превысит порог обнаружения.
допустим есть у вас зондирующий импульс I — вы его отправили, а вернулся он с какой то добавочной функцией F, тогда корреляция их будет I*(I+F) = I*I + I*F,(корреляция как и свертка ассоциативна) то есть к автокорреляционной функции I*I (которая для данного сигнала известна) прибавляется корреляционная функция I*F — предположим F это константа C + какой то шум q, тогда I*F = integral(I(t)*C*dt) + integral(I(t)*q(t — T)dt) = K + I*q. Что в итоге имеем — добавление к входному сигналу постоянной величины С — поднимает значение корреляционной функции на постоянную величину K, равную интегралу зондирующего импульса от минус до плюс бесконечности умноженного на эту константу, то есть если мы изначально выберем I — такой, что её интеграл равен 0 — нам плевать становится на входное постоянное смещение, если же нет, то — сколько у нас прибавится для неправильного сигнала — столько же и для правильного прибавится. От свертки с шумом — увы избавиться не получится — любой сигнал в той или иной мере похож на шум.
Цитата: «если мы изначально выберем I — такой, что её интеграл равен 0 — нам плевать становится на входное постоянное смещение» — и это правильно. Это то что я говорил — нужно избавиться от постоянной составляющей в эталоне. И еще нужно рисовать на картинках оси отсчета для ясности:



Цитата: «если же нет, то — сколько у нас прибавится для неправильного сигнала — столько же и для правильного прибавится» — а вот что с этим делать — это уже нужно подумать.
Вы предлагаете на ходу менять порог обнаружения? А как его вычислять по ходу работы устройства? Выбор порога обнаружения — это фундаментальный вопрос (кстати не описан в статье). От этого зависит будет сигнал обнаружен или нет.

Я всегда думал, что порог обнаружения выбирается скажем на уровне 0.7 от максимума автокорреляционной функции. И он константа для данной системы.
Теперь смотрите, рассмотрим корреляцию 2х похожих сигналов, но один с постоянной составляющей.



Не кажется ли Вам, что максимум отклика корреляционной функции для случая справа будет большим? Просто потому, что умножение минус на минус даст положительное число, которое добавится в интеграле. Получается, что удаление из входного сигнала постоянной составляющей так же помогает обнаружить сигнал «более лучше»?

Несмотря на кажущуюся тривиальность обнаружения детерминированного сигнала (эталона) с помощью корреляционной функции на мой взгляд тут есть довольно много ньюансов.
Например, мы еще не рассмотрели вопрос амплитуды входного сигнала. Как амплитуда входного сигнала влияет на отклик корреляционной функции? Отраженный сигнал от дальней цели будет иметь гораздо меньшую амплитуду сигнала. В результате на выходе коррелятора получится очень «небольшой максимум». И как тогда выбирать порог обнаружения? Еще раз замечу — выбор порога обнаружения — ключевой вопрос.

К сожалению, не могу утверждать, что я все отлично понимаю в распознавании сигналов. Просто как-то писал программу распознавания образов с помощью корреляционной функции и эталонов. Было трудно…

увеличение или уменьшение амплитуды принимаемого сигнала в N раз — уменьшит во столько же раз АКФ — следствие линейности свертки. Обычно постоянный уровень на входе системы определяется самим прибором — например смещение на пол питания операционного усилителя — и этот уровень из раза в раз постоянен — если вы его вычтете — на отношение сигнал/шум это не повлияет, но возможно будет удобней программировать. По картинке — давайте уж тогда вертикальные оси отметим — например сигнал треть периода имеет значение 0, потом 1, потом опять 0 — среднее значение за период равно 1/3 — вычтем это значение из эталонного сигнала(тогда его интеграл за период будет равен 0) и посчитаем корреляцию при полном совпадении с 1м и 2м сигналом на картинке — в первом случае будет 2/9, во втором 4/9 * 1/3 + 1/9 * 2/3 = 6/27 = 2/9 — то же самое, теоретическое обоснование — в коментарии выше — вытекает из ассоциативности свертки
каюсь, ступил. Наличие постоянки во входном сигнале видимо не влияет.
Правда не понял, как у Вас получились Ваши цифры по моим картинкам?
У меня вот так:
1й случай
0*(-1/3)+1*(2/3)+0*(-1/3)=2/3
2й случай
(-1/3)*(-1/3)+(2/3)*(2/3)+(-1/3)*(-1/3)=1/9+4/9+1/9=6/9=2/3
действительно то же самое.

итого, какой вывод?
1) все же из эталона нужно вычитать постоянку, так?
2) на каком уровне и как выбирать порог детектирования?
1) ну тут разграничьте просто то, что от Вас требует математика и что вам удобнее — по видимому удобней вычитать постоянку, хотя и не обязательно
2) уровень зависит от отношения сигнал/шум конкретной системы
Цифры такие, потому что еще нужно на период каждого значения умножать — это же интеграл
1. Надо вычитать.
2. А это просто так не объяснишь. Если биты равновероятные, то какая корреляция больше (для 0 или для 1), ту и берём.
Это как раз решает довольно легко дополнительным кодированием — что то вроде «дополнительная единица после каждых пяти нолей», либо иной бит-стафинг… Или вообще, добавлением хитрой чётности, как в некоторых протоколах — тогда и постоянную составляющую компенсируем и проверку корректности получаем. А можно это ещё и с синхронизацией совместить.
Эх, зашёл сюда, думая, что пойму.
Получилось, как всегда.
image


И да, много кто читает теги ;-)
так спрашивайте что непонятно — Хабр из тех сайтов, где из комментариев часто получаешь больше информации чем из топика)
Добавлю, что в 802.11 используются DBPSK и DQPSK, а не BPSK и QPSK, где D — Differential (относительная) фазовая модуляция. Сделано для синхронизации сигнала.
Прелесть кодов Баркера, 11 чипового — в том, что он расширяет спектр в 11 раз. Баркер используется в 802.11b и соответсвует скоростям в 1 и 2 мегабита.
По каким то причинам автор рассказал про Баркера, но не рассказал про CCK. Я дополню.
CCK (Complementary Code Keying) — 8 чиповый комплементарный код. Тоже используется для расширения спектра. В 802.11b при помощи cck ведется передача и прием на скоростях 5.5 и 11 мбит/с. символьная скорость передачи составляет 1,385×(10)^6 символов в секунду (11/8 = 5,5/4 = 1,385). Ширина спектра сигнала как при скорости 11 Мбит/с и 5,5 Мбит/с составляет 22 МГц. Метод использует DQPSK модуляцию и кодирование происходит дибитами. Элементы 8-чиповой последовательности могут принимать одно из следующих восьми значений: 1, –1, j, –j, 1+j, 1–j, –1+j, –1–j.
Восемь чипов информационного символа последовательно модулируют несущую с частотой модуляции 11 МГц.
Каждый чип представляет собой сигнал, определяемый формулой С=[с0,..., с7]={e^(j(φ1+φ2+φ3+φ4)),(e)^(j(φ1+φ3+φ4)),e^(j(φ1+φ2+φ4)),-e^(j(φ1+φ4)),e^(j(φ1+φ2+φ3)),e^(j(φ1+φ3)),-e^(j(φ1+φ2)),e^jφ1}.
φ1-определяет относительную модуляцию. остальные 3 параметра φ2...φ4 определяются по специальной таблице из rfc 802.11b.

Каждая такая последовательность мало коррелирует сама с собой при фазовом сдвиге – очень полезное свойство при борьбе с переотраженными сигналами. ССК модуляция представляет собой вид блочного кода, а потому достаточно проста при аппаратной реализации. Совокупность этих свойств и обеспечила ССК место в стандарте IEEE 802.11b в качестве обязательного вида модуляции.

Основное отличие CCK-последовательностей от рассмотренных ранее кодов Баркера заключается в том, что существует не строго заданная последовательность, посредством которой можно кодировать либо логический нуль, либо единицу, а целый набор последовательностей. Учитывая, что каждый элемент последовательности может принимать одно из восьми значений в зависимости от значения фаз, можно скомбинировать достаточно большое количество разных CCK-последовательностей. Это обстоятельство позволяет кодировать в одном передаваемом символе несколько информационных бит и тем самым повышать информационную скорость передачи.

Возможно это стоит добавить в основной топик, т.к. есть элемент недосказанности.
спасибо за дополнение. про CCK я решил, что уже перегрузка будет информацией — для неподготовленного человека и так много, можно было бы сюда еще и FHSS запихать и варианты и сложности технической реализации, но кому это реально интересно — найдет это в книгах, статья по возможности для широкой аудитории написана — поэтому многие вещи разжевываются. Про дифф передачу в конце упомянул, кстати. Если тема интерес вызывает — можно еще про сотовую связь, например, что то написать
Лучше про CCK с картинками :)
Интересно, эта последовательность также даст положительные пики в корреляции с последовательностью двух разных байт. Как отсеять такие?
бит вы хотели сказать? а вы посчитайте взаимную корреляцию прямой и инверсной последовательности Баркера и сравните
Я имел ввиду корреляцию Б1 и… Б1Б0…
Вы показали в статье, что корреляции Б1 с… Б1Б1… или… Б0Б0… принимают высокие значения ±11 только при нулевом смещении. Мой вопрос был, не получится также иметь пики и в корреляции Б1 с… Б1Б0… при ненулевом смещении. Проверка показала, что еще одно важное свойство последовательности в том, что эти корреляции тоже малы.
да — дельное замечание — забыл упомянуть
Сплошная математика… но хотябы вспомнил что такое свертки. Теперь бы научится их быстро считать на железе чтобы применить на практике.
Это к вопросу — для чего программисту математика) Приведу пример из жизни — как то работал над одним проектом с быстрой камерой (1200 кадров в секунду) на C++ — нужно было показывать фурье этих кадров, по всему кадру и по заданным областям — проект я получил от предыдущего программиста и все дико тормозило и не успевало. Оказалось, что БПФ выполнялось над каждым входным кадром, а затем 100 спектров усреднялись — программист не знал, что не имеет значения — усреднить 100 кадров, а потом сделать одно БПФ или сделать 100 БПФ, а затем их усреднить.для того, чтобы свертки считать даже процессоры специальные разработали — DSP — свертка это одна из основных операций в ЦОС — умножение с накоплением — одна из основных операций в DSP — делается за 1 такт, при этом — из памяти данных по одной шине — берется коэффициент, допустим какого то КИХ фильтра или значение эталонной функции, из оперативной памяти берется по другой шине входной отсчет, производится их перемножение, а результат прибавляется к аккумуляционному регистру — 4 операции за 1 такт — это удивительные устройства
Все-таки разъяснения практической реализации математических методов как раз и не хватает.
Формулы это одно, а вот перейти от математических формул к целочисленной арифметике учитывая особенность конкретных вычислительных устройств да еще обосновать этот переход — вот где настоящее инженерное искусство!

Уже давно мечтаю сделать простой индикатор спектра для усилителя, по меркам математики — требования весьма скромные, однако стоит непреодолимая пока преграда преобразование тех самых простых и ясных формул в алгоритм на конкретном железе так чтобы оно самое успевало вовремя все обрабатывать.
Смотрел множество готовых подобных решений — однако, они ВСЕ сделаны по принципу «работает и ладно» т.е. крайне частные и слабо переносимые решения, часто сделанные решением задачи «в лоб» да и еще соптимизированные на уровне кода до полной нечитабельности и без комментариев.
ну так не зря инженеры ЦОС свой хлеб едят — нужно и математику знать и программирование и устройство вычислительных систем и алгоритмы, уметь выбирать между различными аппаратными платформами — это вообще говоря непросто, но на этом сейчас построен мир вокруг нас на самом деле — все это работает, когда вы разговариваете по мобильнику, подключаетесь к вайфай в макдаке или заходите в интернет — за каждым простейшим с точки зрения обывателя действия — стоит зубодробительной сложности система, решающая проблемы о которых многие и не задумываются — подавление эха при разговоре например, подавление шумов — многие ли знают, что в любом мобильнике микрофона минимум 2 стоит и благодаря этому вы можете разговаривать в шумном месте, многие ли обращали внимание, что слышат собеседника одинаково хорошо, когда он тихо говорит и когда громко и таких проблем просто не перечислить
Сейчас мало где два стоит :( Шумы давят простой обработкой.
Можно ли простой обработкой подавить звук проезжающего рядом грузовика? Врятли же…
Беда в том что это все надо когда-то изучать, если хочешь использовать в своих разработках. Порой для «просто ради интереса» желание быстро пропадает.
Если честно, поначалу неочевидно, почему BPSK и QPSK имеют равную вероятность ошибки на графике.
Да и ваши слова:
Теперь за раз мы можем кодировать 2 бита. То есть скорость передачи возрастает вдвое. Но и вероятность ошибки при тоже неизбежно возрастет.
как-то смущают.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории