Для тех у кого MIMO прошло мимо…
Доброго времени суток, Хабр! Разбирая тему технологии MIMO (Multiple input-multiple output), которая сейчас используется повсеместно, я обнаружил насколько мало материала по этой тематике представлено в отечественной литературе. Хабр регулярно читаю около 3 лет и полного ликбеза по этому вопросу я здесь тоже не видел. Постараюсь исправить эту ситацию.
Как ЭТО работает и почему это актуально именно сегодня, а также история развития этой технологии. Кого заинтересовало прошу под кат.
Немножко истории
У большого числа технологий, которые имеют место в сегодняшней телекоммуникационной среде «ноги растут» из военных наработок. Технология ортогонального частотного мультиплексирования (OFDM), например, была предложена ещё в 80-х годах нашими американскими друзьями, но реализовать её удалось совсем недавно лишь потому, что она чрезвычайно требовательна к вычислительной мощности системы (всему виной пресловутое БПФ).
Основы WiFi: SISO, MIMO, MU-MIMO, beamforming, канал связи, расположение антенн на примерах
MIMO раньше представлялась только лишь как технология разнесенного приема (имеем одну передающую и N приемных антенн). Реализуя эту идею было выпущено несколько серий военных тропосферных станций (может кому и довелось послужить на таких) и в принципе на том этапе, расходы на разворачивание дополнительных антенн себя оправдывали.
Принцип обработки был прост как лопата: в двух приемных ветках сравнивалось отношение сигнал/шум и в соответствии с оценкой этого значения каждой ветке обработки назначались весовые коэффициенты, играющие роль при принятии решения, грубо говоря, что было передано: 0 или 1. Эта нехитрая система так и была названа критерием оптимального весового сложения (MRC).
Дальше-больше. В 1997 году ирано-американец Аламоути предлагает новинку основанную на уже известных тезисах, назвав её пространственно-временным блоковым кодом (STBC). После этого год от года увеличивается вал публикаций на тему MIMO и тема стает очень актуальной на фоне того, что частотно-энергетическую эффективность систем связи повышать стало все сложнее и сложнее (уже продуманы максимально эффективные сигнально-кодовые конструкции). А дальше пошло-поехало: пространственно-временное решетчатое кодирование, пространственное мультиплексирование, а также большое количество алгоритмов декодирования от простейшего «максимального правдоподобия (ML- max likehood)» до сферического турбодекодирования на GPU и т.д.
Как это работает
И ещё немного теории
Радиоканалы
Вообще эта классификация огромна и её обзор достоен отдельной статьи, но мы остановимся лишь на нескольких моментах.
Проходя путь от передатчика (T) к приемника ( R) наша радиоволна затухает (теряет в энергетике), причем то насколько она потеряет зависит то, есть ли между нашими T и R прямая видимость. Если она есть, то основная вина за потери ложится на потери среды распространения (path loss), если прямой видимости нет, то начинается самое интересное. Сталкиваясь с различными препятствиями волна идет к пункту назначения несколькими путями (многолучевое распространение) и соответственно каждый луч проходит разное расстояние. На приеме все эти лучи могут складывать с противофазе, что дополнительно снижает интенсивность сигнала, что заставляет уровень сигнала постоянно «плавать». Поэтому в зоне неуверенного приема ваши мобильники никак не могут определиться сколько «палочек сигнала» показывать.
Преимущества MIMO-антенны. Что такое технология MIMO?
Все это безобразие назвали замираниями. Бывают они разными и могут описывать разными законами. При наличии постоянной компоненты (наличии прямой видимости) подойдет распределение Райса, а при её отсутствии — Релеевское (частный вариант). Формул не буду приводить умышленно, они большие и страшные.
MIMO вот ОНО
Разбор того, как ЭТО работает проведем на самом простом примере. У нас есть 2 антенны на передаче и одна на приеме.
k — так называемая комплексная передаточная функция канала (определяющая его ФЧХ и АЧХ), причем различная для каждого момента времени для каждого из принятых сигналов. Главная изюминка как раз и заключается в том, что сигналы для каждой из приемных антенн проходят разные пути.
В соответствии с методом ПВБК, входной поток данных разбивается на пары [с1, с2], причем, на первом полутактовом интервале символ c1 передается через антенну Т1 и символ c2 передается через антенну Т2. На втором полутактовом интервале порядок передачи изменяется: через антенну Т1 передается инверсия символа c2 (на рисунке обозначен как (–c*2), а символ c1 передается через антенну Т2 (на рисунке обозначен как (c*1). Данный алгоритм удобно представить в виде матрицы, где номер строки будет соответствовать номеру передатчика, а номер столбца – номер полутакта (в общем случае – шаг такта) передачи. Символ «*» как уже многие догадались-комплексное сопряжение.
В итоге на входе мы получаем 2 сигнала (мультипликативные отклики за первый и второй такт), проведя ряд занимательных математических преобразований мы получаем исходный сигнал, а точнее пару этих сигналов. Собственно вся фишка и заключается в том, что каждый из этих сигналов передавался 2 раза.
Почему это возможно? Потому что k разный для каждого луча, а матрица Аламоути (рисунок выше) является ортогональной.
Практика
А теперь проведем моделирование и посмотрим выигрыш MIMO перед SISO(single in single out).
Все свои расчеты и моделирование я провожу в Matlab’e потому, что это самая лучшая в мире очень удобная для таких экспериментов среда.
Вот собственно кусок для расчета кривой Аламоути:
numOfBlk = 1e6; % число блоков для передачи qampoz = 4; % выбираем позиционность сигнала КАМ SNRdB = 6:1:40; %пределы изменения отношения сигнал/шум linColor = ‘b’; % цвет 1 linSym = ‘o’; % цвет 2 errRate = zeros(size(SNRdB)); %пустышка % Аламоути for i = 1 : length(SNRdB) txData = randint(numOfBlk*2,1,qampoz);%формируем инф поток temp = reshape(txData,numOfBlk,2); %разбиваем на подпотоки temp = qammod(temp,qampoz); %модулируем H = 1/sqrt(2) * (randn(numOfBlk,2) + sqrt(-1)*randn(numOfBlk,2)); %задаем канал(он релеевский) txMod(:,1) = H(:,1).* 1/sqrt(2).*temp(:,1) + H(:,2).* 1/sqrt(2).*temp(:,2) ; %обработка на приеме txMod(:,2) = -H(:,1).*(1/sqrt(2).*temp(:,2)’).’ + H(:,2).*(1/sqrt(2).*temp(:,1)’).’ ; txMod = awgn(txMod,SNRdB(i),’measured’); temp(:,1) = sqrt(2)*(H(:,1)’.’ .* txMod(:,1) + H(:,2) .* txMod(:,2)’.’)./(abs(H(:,1)).^2 + abs(H(:,2)).^2); temp(:,2) = sqrt(2)*(H(:,2)’.’ .* txMod(:,1) — H(:,1) .* txMod(:,2)’.’)./(abs(H(:,1)).^2 + abs(H(:,2)).^2); rxData(:,1) = qamdemod(temp(:,1),qampoz); %демодуляция rxData(:,2) = qamdemod(temp(:,2),qampoz); [numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,2)); %считаем ошибки end
Эта часть для классической схемы:
%SISO for i = 1 : length(SNRdB) temp = qammod(txData,qampoz); H = 1/sqrt(2) * (randn(numOfBlk*2,1) + sqrt(-1)*randn(numOfBlk*2,1));%тот же канал txMod = H.*temp; txMod = awgn(txMod,SNRdB(i),’measured’); temp = txMod./H; rxData = qamdemod(temp,qampoz); [numErr errRate(i)] = symerr(rxData,txData); end
Из графика видно что выигрыш для вероятности ошибки Pош=10^(-3) примерно 12 [дБ]. И это просто огромная величина.
В качестве заключения
- Одночастотный сигнал это хорошо, но в расчетах я принимал идеальный вариант когда точно известна КПФ канала на приеме, а как провести его оценку в реальности? Тут-то идеален OFDM сигнал в структуру которого можно встроить пилот-сигналы и по ним построить профиль канала (узнать КПФ для каждой поднесущей). Кстати они использовались ещё до MIMO (см. DVB-T например) для оценки помехоустойчивости
- Модель канала выбрана самая легкая и от реального далековата
- Модель сигнала выбрана самая простая, если брать сигнал OFDM, то его формирование само по себе непростое занятие + тогда должны быть другие условия к модели канала (канал-то частотно-селективный нужен)
- ПВБК не единственный и не самый эффективный из методов применяемых в технологии MIMO, но самый простой и легко реализуемый
- Выигрыш для КАМ-16,64 уменьшается с ростом позиционности, все дело в энергетике (причина — меньшее Евклидово расстояние между сигнальным точками)
- Беспроводные технологии
- Стандарты связи
Источник: habr.com
Обзор Mimo. Учимся программировать
Современный мир и развитие интернета позволяют научиться программировать в довольно короткие сроки без изучения литературы и толстых книжек. Есть очень много контента, который создается специально для вашего обучения, нужно лишь правильно распоряжаться этими знаниями. И, что самое главное, нужно всегда начинать изучение этой сферы с самого начала.
В большинстве обучающих курсов вам рассказывают об уже готовых монументальных правилах, тогда как какие-то базовые вещи никто не объясняет. У программы Mimo все наоборот — здесь на обучение самым простым вещам выделили тьму времени. Собственно, я сам попробовал, оценил, и теперь могу с вами поделиться своими впечатлениями. Учиться программировать на смартфоне очень даже интересно, особенно если вы давно хотели этим заняться, но боялись чего-то. Теперь просто достаете смартфон из кармана и запускаете курс.
Азы
Разработчики решили рассказать нам обо всех важных деталях, которые нужно знать перед началом программирования. Например, нам в довольно простой форме объясняют, что компьютер не умеет думать, он лишь выполняет те задачи, которые ему назначили. То есть, компьютер отлично посчитает вам любой пример по заданным правилам и функциям, но самостоятельно придумать что-либо он не может.
Дальше нас обучают правильному составлению правил и логическим цепочкам. Чтобы войти в комнату вам нужно открыть дверь, войти, закрыть за собой дверь. Тоже самое и с кодом — нужно написать пошаговые действия, чтобы компьютер понимал что ему делать шаг за шагом.
Обучение весьма простое, но оно позволит вам понимать, как именно работает система, как нужно прописывать правила и данные. Настоятельно советую пройти начальный курс. Там будет очень мало информации про код, зато другая полезная информация имеется.
Обучение
Постепенно сложность курсов будет повышаться — разработчики только в начале дают азы, потом идут сложные курсы с объяснением разнообразных примеров. Здесь уже лучше брать в руки блокнот с ручкой и записывать какие-то момент, так как запомнить весь этот код будет весьма проблематично.
Некоторые элементы легко запоминаются в памяти, некоторые требуют более детального изучения и тренировок. Главное, что курс становятся сложнее и вам приходится больше запоминать. Это явный путь к развитию в сфере программирования. Да и курсов здесь очень много, даже глаза разбегаются.
Курсы
Программа предоставляет вам громадный набор возможностей для изучения программирования. Вы можете попробовать изучать код для написания web-сайтов, можете посмотреть уроки для создания игр или программ на Android и iOS, можно еще тьму всего выучить. Конечно, советую сконцентрироваться на чем-то одном и изучать только эту тему, так как курсы длинные, по несколько часов к ряду, и требуют от вас полной концентрации. Лучше не совмещать несколько вариантов курсов, иначе вы просто запутаетесь. Хотя, в любой момент вы можете переключиться на другой курс, это не запрещается.
Итог
Мне очень понравилась реализация приложения. Здесь вас никто за пару часов не научит работать с программами и делать сложные игры или программы, но вы спокойно можете выучить основные правила и решить для себя, как двигаться дальше. Можно спокойно дальше изучать код через эту программу, предварительно выбрав направление, а можно взять и пойти в другой софт для более наглядных примеров и тренировок. Но, как мобильная версия учебника это прямо идеальный продукт. Особенно он подходит тем, кто ранее вообще этим не занимался и даже не представляет, как все это работает.
Источник: megaobzor.com
Mimo что это за программа
Mimo: Learn to Code
Версия: 3.108
Последнее обновление программы в шапке: 20.12.2022
Краткое описание:
Изучение языков программирования.
Присоединитесь к сообществу из 2 миллионов пользователей, чтобы научиться писать коды, создавать приложения/игры/сайты, автоматизировать свою жизнь, продвинуться в карьере и мн.др. Приложение будет полезным даже опытным специалистам и тем, у кого мало времени на обучение! Mimo создает персонализированный учебный план со множеством интересных и эффективных упражнений, проектов и заданий, которые скрасят ваш день и помогут вам оставаться в тонусе.
• «Вы сможете включить кодирование в вашу ежедневную рутину, уделяя ему всего несколько минут в день.» — TechCrunch
• «Эти крохотные уроки по кодированию легко впишутся даже в самый напряженный график.» — Нью-Йорк Таймс
Мы поможем Вам:
• Освоить азы программирования
• Научиться создавать приложения, игры и сайты
• Стать «этическим хакером»
• Автоматизировать вашу жизнь и мн. др.
Эти навыки включают в себя:
Python, Kotlin, Swift, HTML, CSS, JavaScript, SQL, PHP, Java, C#, C++, Ruby, Git, язык командной строки и другие языки программирования.
Mimo — это лучшие персонализированные курсы по кодированию для занятых людей. Следите за своим прогрессом, собирайте награды и значки и станьте частью сообщества из двух миллионов пользователей.
Возникли вопросы? Свяжитесь с нами по адресу [email protected]
Требуется Android: 6.0 и выше
Русский интерфейс: Нет
Источник: 4pda.to
Mimo — программирование на HTML, JavaScript, Python 3.69
6 скриншотов для Mimo — программирование на HTML, JavaScript, Python






Mimo: программирование на HTML, JavaScript и Python. Коллекция коротких уроков по разработке программ, приложений и игр с нуля для Android. Программа обучения рассчитана на ежедневное освоение нового материала и повторение уже изученного. Подходит для начинающих разработчиков и тех, кто еще не определился с предпочтительным языком программирования. Интегрирована среда разработки, в которой можно самостоятельно написать код, запустить, исправить ошибки и опубликовать готовую программу.
Возможности Mimo
Образовательная платформа предоставляет подробные курсы, направленные на изучение Python, JavaScript, HTML, SQL, CSS и других популярных языков. Подача материала выполнена в виде кратких уроков с подробным описанием каждого этапа разработки и дополнительным повторением ключевых моментов для полного понимания.
Основные направления платформы
- HTML для создания веб-страниц и веб-приложений;
- JavaScript для веб-программирования;
- Python в качестве универсального языка для многих направлений;
- SQL для создания баз данных;
- CSS для оформления внешнего вида веб-страниц.
Теоретический материал ориентирован на новичков, а практическая часть включает в себя разные задачи, которые подойдут и опытным разработчикам для дополнительной практики. Написанный учащимся код подробно анализируется программой. Пользователю предлагается подробный разбор ошибок и советы по улучшению качества кода. Написанную программу можно запустить в реальном режиме, доработать и сохранить проект для дальнейшей публикации.
Особенности программы
Пользовательский интерфейс представляет собой личный план обучения с отслеживанием хода прогресса и изученных тем. В комплексный курс можно самостоятельно включать необходимый набор лекций и упражнений по созданию отдельных элементов или целого проекта. Интегрированная среда разработки оптимизирована для комфортного набора кода на смартфонах и планшетах с небольшими экранами и клавиатурами.
Преимущества Mimo
- объемный комплекс материалов по популярным языкам программирования;
- практические задачи основаны на реальных примерах;
- возможность легкого написания кода прямо на телефоне;
- отслеживание прогресса обучения;
- удобная сортировка обучающих курсов по языкам и темам;
- теория включает в себя реальные примеры использования современных инструментов такими компаниями, как Google и Netflix.
Источник: biblsoft.ru
Mimo – научитесь программировать 3.106
Mimo – приложение для обучения основам программирования. Установите приложение на свой смартфон и присоединяйтесь к 5 миллионам пользователей, приобретайте новые знания.
Лучший Telegram-канал про технологии (возможно)
В данном приложении вы сможете научиться писать коды, создавать игры и сайты. Приложение полезно как опытным специалистам, так и новичкам в сфере программирования. В Mimo разработаны персонализированные учебные планы с увлекательными и эффективными упражнениями, проектами и заданиями. Отслеживайте свой прогресс, получайте награды за выполненные задания.
Особенности приложения Mimo:
- Возможность научиться программированию, уделяя занятиям всего несколько минут в день;
- Обучение азам кодинга;
- Обучение созданию приложений, игр и сайтов;
- Персональные учебные планы;
- Увлекательные задачи и упражнения;
- Возможность отслеживать свои достижения;
- Обучение основным языкам программирования.
Источник: trashbox.ru