Русская азбука 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.
Основная идея программы
Атомом (единицей времени) кода Морзе является точка, относительно нее формируется длительность всех остальных элементов:- Тире равняется трем звучащим точкам;
- Пауза между элементами одного символа (знака) - одна незвучащая точка;
- Между знаками - три точки;
- Между словами - семь точек.
Первоначальный вариант реализации
В первой версии программы комбинация звучащих и незвучащих точек хранилась в виде вектора с булевыми элементами, где 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
Такой подход оказался очень удобным. Теперь я всего лишь использовал текущий воспроизводимый символ в качестве ключа и получал готовый
для воспроизведения код (набор булевых значений), правда, алгоритм воспроизведения немного усложнился: понадобилось ввести счетчик текущего элемента символа и счетчик символов в строке:
Новая реализация воспроизведения:
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() и прочих нехороших вещей).
Остальную часть исходных кодов и заголовочные файлы не вижу смысла приводить в теле статьи, так как там все достаточно очевидно и прозрачно.
Полный набор исходников последней версии вы можете скачать на