Русская азбука Mорзе. Обучение

Программа Morse Trial генерирует радиограммы азбукой Морзе с изменяемой скоростью, паузами и тоном. Возможна загрузка текста из вашего файла, а также случайная генерация текста. Есть возможность добавления шумов при прослушивании радиограмм для большей реалистичности.

Азбука Морзе, код Морзе, «Морзянка» - способ кодирования букв алфавита при помощи длинных и коротких сигналов, так называемых «тире» и «точек» (а также пауз, разделяющих буквы). За единицу времени принимается длительность одной точки. Длительность тире равна трём точкам. Пауза между знаками в букве - одна точка, между буквами в слове - 3 точки, между словами - 7 точек. Была названа в честь американского изобретателя Сэмюэля Морзе, который изобрёл её в 1835. Азбука Морзе является первым цифровым способом передачи информации. Телеграф и радиотелеграф первоначально использовали азбуку Морзе; позже стали применяться код Бодо и ASCII, которые более удобны для автоматизации. Впрочем, сейчас и для азбуки Морзе есть средства автоматической генерации и распознавания. Для передачи русских букв использовалось коды сходных латинских букв; это соответствие алфавитов позже перешло в МТК-2, а потом в КОИ-7 и КОИ-8 (однако в азбуке Морзе букве Q соответствует Щ, а в МТК и КОИ-Я).

Основное предназначение программы Morse Trial — улучшение навыков приема телеграфа. Скачать программу для тренировок Morse Trial можно

Но если вы еще не владеете азбукой Морзе , — то пройти самостоятельное обучение можно на сайте LCWO по методу Коха

Метод Коха - простой путь прямой выработки рефлексов. Однако он требует либо наличия компьютера с соответствующим программным обеспечением либо персонального тренера. Именно по этой причине метод Коха игнорировался так много лет. Теперь, когда компьютер занял привычное место на столе радиолюбителя у метода Коха есть все шансы стать стандартом подготовки радиооператора-телеграфиста.

Обучение происходит следующим образом:

  • Вы настраиваете вашу программу, чтобы она генерировала сигналы телеграфной азбуки со скоростью порядка 20 слов в минуту для знака, но с несколько увеличенными паузами (эффективная скорость должна быть порядка 15 слов в минуту).
  • Затем вы берете бумагу и карандаш и начинаете принимать. На первом уроке компьютер должен передавать только два символа. То есть на первом уроке вам надо распознать только два варианта. Принимаете текст 5 минут, затем проверяете правильность принятого текста, и рассчитываете процент верных знаков.

LCWO — этот интернет помощник именно для самостоятельного изучения телеграфа. Сайт после Вашей регистрации станет Вашим персональным учителем. Вы будете овладевать телеграфом в процессе игры в «угадайку» — будете вырабатывать условные рефлексы на звучание знаков и их запись — хотите — рукой, хотите — на клавиатуре. Метод разработан достопочтенным Людвигом Кохом специально для индивидуального обучения. На сайте вам предложат пройти 40 уроков, к следующему уроку переходите только после освоения предыдущего. От Вас требуется только регулярность занятий, частота и продолжительность четко не регламентируются. Ничего грузить в компьютер не нужно. Заниматься можете с любого компьютера, имеющего выход в интернет дома, на работе, интернет-кафе.

Приложение "" - это очень удобный способ выучить морзянку в свободное время, так как заниматься изучением на компьютере не слишком удобно, а вот мобильный девайс с платформой Андроид в кармане.

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

Представленное обучающее приложение "" поможет быстро освоить такой язык.

Интерфейс и принцип работы
Обучающий бесплатный проект выполнен стильно и красиво. Перед пользователем появляется простой интерфейс с понятным и лаконичным меню. Всего программа представлена десятью основными уроками, каждый из них содержит по три упражнения.
1. Режим "Запоминания", где пользователь на слух воспринимает новые представленные звуки и новые буквы.


2. Упражнение "Прием". Здесь пользователю предлагается самостоятельно определять звуки, выученые на слух.
3. Режим "Передача". В этом упражнении искусственный интеллект будет предлагать определенные звуки, что потребуется передавать.
Как удобную особенность следует отметить, что программа фиксирует все совершенные ошибки и в дальнейшем делает акцент на ошибках, чтобы закрепить знания и помочь запомнить их и не ошибаться в дальнейшем.

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

Здесь все также 10 уроков, но они уже состоять будут из 2 упражнений: прием и передача. В игровой форме многим намного проще запоминать новые данные.

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

24 сентября 2015 в 11:18

Программа для генерации звукового кода Морзе

  • Программирование ,
  • C++ ,

Последнее время я занимаюсь изучением азбуки Морзе с помощью данной программы . Но она рассчитана на изучение кодов кириллических букв, что является неактуальным в современной радиосвязи (все используют латинский алфавит, кроме нашей доблестной армии).

В качестве инструмента реализации идеи был выбран С++ в связке с Qt.

Основная идея программы

Атомом (единицей времени) кода Морзе является точка, относительно нее формируется длительность всех остальных элементов:
  1. Тире равняется трем звучащим точкам;
  2. Пауза между элементами одного символа (знака) - одна незвучащая точка;
  3. Между знаками - три точки;
  4. Между словами - семь точек.
Как видите, любой код, основанный на азбуке морзе, можно представить в виде набора звучащих и незвучащих точек: от этой идеи я и отталкивался, причем такое решение мне показалось достаточно оригинальным.

Первоначальный вариант реализации

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

Как вы уже поняли, для получения конечного сигнала я всего лишь «дергал» звук с некоторой задержкой (с помощью таймера, равного длительности точки в миллисекундах) при бесконечно воспроизводящемся.wav файле с записью синуса. Но данный подход имел значительный минус и заключался он в том, что приходилось каждую точку загружать отдельно с помощью перегруженного оператора или специального метода. Из-за такого подхода пришлось писать отдельный макрос для каждой буквы (вроде такого - #define I DOT << false << DOT) и создать огромный жуткий switch для воспроизведения переданной строки. Это было ужасно, но если вам любопытно, то вы можете ознакомиться
с первой версией программы (у меня не получилось полностью загрузить на GitHub локальный репозиторий - только последнюю версию).

Кусочек жуткого свитча:

bool Morse::StringToMorse (QString &line) { line += "\0"; for (int i = 0; i < line.size () - 1; ++i) { switch (line.at(i).unicode ()) { case "A": *this << A; if (line.at (i + 1) == " ") continue; else *this << MINI_SPACE; break; case "B": *this << B; if (line.at (i + 1) == " ") continue; else *this << MINI_SPACE; break; // И так далее


А вот так происходило включение и выключение звука (собственно, генерация звукового кода):

void Morse::PlayLinePoints () { QTimer::singleShot (duration_point_, this, SLOT (Mute ())); sound_.play (); } void Morse::Mute () { if (line_points_.empty ()) { //Останавливаем воспроизведение sound_.stop (); return; } if (line_points_.at (0)) { //Включаем звук sound_.setMuted (false); line_points_.remove (0); QTimer::singleShot (duration_point_, this, SLOT (Mute ())); return; } else { sound_.setMuted (true); //Выключаем звук line_points_.remove (0); QTimer::singleShot (duration_point_, this, SLOT (Mute ())); return; } }

Окончательная версия

Очень уж оказались эти макросы громоздки, и мой перфекционизм не смог больше смотреть на эти монструозные конструкции. Поразмыслив немного, пришел к мысли, что идея у меня хорошая, но хранение кодов в виде макросов очень неудобно и, если решить эту проблему, то все будет хорошо. В итоге для хранения кодов стал использоваться QMap:

//Хранит соответствующие комбинации точек и тире символов QMap codes_;
Такой подход оказался очень удобным. Теперь я всего лишь использовал текущий воспроизводимый символ в качестве ключа и получал готовый
для воспроизведения код (набор булевых значений), правда, алгоритм воспроизведения немного усложнился: понадобилось ввести счетчик текущего элемента символа и счетчик символов в строке:

Новая реализация воспроизведения:

void Morse::MiniSpace () { if (stop_) { this->Stop (); return; } sound_.setMuted (true); ++id_element_; //Преходим на другой элемент кода if (id_element_ == codes_.value (string_to_play_.at (id_char_)).size ()) { ++id_char_; id_element_ = 0; QTimer::singleShot (duration_dot_ * 3, this, SLOT (Mute())); //Пауза между символами return; } QTimer::singleShot (duration_dot_, this, SLOT (Mute())); //Пауза между элементами символа } void Morse::Space () { if (stop_) { this->Stop (); return; } sound_.setMuted (true); //Пауза длится 7 точек //Но так как после символа идет пауза в три точки, то доп паузу нужно выставить длиной в 4 точки QTimer::singleShot (duration_dot_ * 4, this, SLOT (Mute())); } void Morse::Mute () { if (stop_) { this->Stop (); return; } if (id_char_ == string_to_play_.size ()) { // Строка закончилась this->Stop (); return; } if (string_to_play_.at (id_char_) == " ") { Space(); ++id_char_; //Преходим на другой элемент кода return; } if (codes_.find (string_to_play_.at (id_char_)) == codes_.end ()) { qDebug() << string_to_play_.at (id_char_) << ": No code!"; sound_.stop (); return; } sound_.setMuted (false); //Включаем звук if (codes_.value (string_to_play_.at (id_char_)).at (id_element_)) { QTimer::singleShot (duration_dot_, this, SLOT (MiniSpace())); //Воспроизводим точку } else { QTimer::singleShot (duration_dot_ * 3, this, SLOT (MiniSpace())); //Воспроизводим тире } } bool Morse::Play () { if (!stop_) return false; if (string_to_play_ == "") return false; stop_ = false; id_char_ = 0; id_element_ = 0; sound_.setMuted (true); //Выключаем звук sound_.play (); Mute (); } void Morse::Stop () { if (stop_) return; sound_.stop (); id_char_ = 0; id_element_ = 0; stop_ = true; }


Флаг stop_ был введен для предотвращения некорректной работы программы (два вызова подряд Play() и прочих нехороших вещей).
Остальную часть исходных кодов и заголовочные файлы не вижу смысла приводить в теле статьи, так как там все достаточно очевидно и прозрачно.

Полный набор исходников последней версии вы можете скачать на

Вверх