GOOGLE ADS

пятница, 6 мая 2022 г.

Как демодулировать (аудио) код Морзе

У меня есть радиоприемник. Звук этого радио поступает на мой компьютер. Выходной звук содержит азбуку Морзе на частоте около 440 Гц. Скорость азбуки Морзе может варьироваться от 2 до 20 слов в минуту. Я вроде как знаю, как выяснить, ведет ли другая станция передачу, но как мне взять это состояние передачи/не передачи и преобразовать его в текст? Я думал, что может быть лучшее решение, чем грубая сила.

Осложняющие факторы:

  • Я хочу, чтобы программа могла определить скорость передачи другой станции, а не указывать ее пользователем, как в большинстве программ азбуки Морзе.

  • есть шум

  • Передатчики азбуки Морзе не включаются и не выключаются мгновенно. Время нарастания и спада составляет порядка 4 миллисекунд.

  • Большая часть этой азбуки Морзе отправлена ​​​​людьми, и поэтому она не идеальна:
  • Например, пауза между словами должна состоять из 7 элементов, но может быть и от 5 до 8.

  • Скорость отправки людей может варьироваться примерно на 20% в одном разговоре.


  • Я хочу сделать это в более-менее реальном времени. Ничего страшного, если программа что-то выводит, понимает, что это ошибка, и исправляет ее.

  • Исходный код

    Пример вывода программы на данный момент. Он может преобразовывать звук в кодированный/неклавишный, но преобразование его в точки/тире не работает.

    ###########################################################__________________________
    _________________________________####################################################
    #####################################################################################
    #######################################______________________________________________
    _____________________________________________________________________________________
    _____________________________________________________________________________________
    _____________________________________________________________________________________
    _____________________________________________________________________________________
    _________________________

    Будут оценены любые коды/предложения по тому, что определяет передачу/не передачу и/или раздел, который разрешает это коду Морзе.


    Решение проблемы

    Насчет отделения точек от тире и пробелов друг от друга одна идея состоит в том, чтобы начать собирать статистику в начале разговора и поместить все события "XXms of keyed" в один массив (или что-то), а все "YY ms of noted" в другой массив (или что-то). Затем вы в конечном итоге получите гистограмму вероятности (t) для ключевого слова и то же самое для не ключевого значения. Эти гистограммы должны иметь некоторые максимумы и минимумы, видимые как человеку, так и некоторым алгоритмам. Итак, вы делаете некоторое округление кривых, разделяя их по этим минимумам, чтобы отделить точки слева от штрихов справа, то же самое, возможно, с более чем одним минимумом с пробелами. Этот подход действительно хорошо впишется в разговор, но не потребует настройки.

    Комментариев нет:

    Отправить комментарий

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...