-
17.04.2009, 02:14 #1
- Регистрация
- 06.02.2007
- Адрес
- СПб
- Сообщений
- 317
- Поблагодарили
- 21
- Поблагодарил
- 26
Новая программа для работы PSK
Собственно, обратиться к этой теме меня сподвигли частые сообщения о том, что цифровые виды связи это дескать не более чем щелкание мышью по экрану. И так было понятно, что по сложности цифровые виды ничуть не проще аналоговых, однако возникла мысль, почему бы не провести первую связь в PSK из своей собственной программы В дальнейшем пришлось углубиться в теорию гораздо более значительно (некоторое неясно и до сих пор), да и программа уже вышла за рамки тестовой, и её можно представить на всеобщее обозрение.
Итак, кому интересно, вначале описание теоретических принципов, кому неинтересно, можно перейти сразу в конец к описанию софта.
Итак, Программное (де)кодирование сигналов PSK
1) Теоретические основы
PSK относится к семейству протоколов с фазовой манипуляцией - диапазон изменения фаз может принимать дискретные значения, для любительской связи лежащие в диапазоне от 2 до 4.
Например, для BPSK имеем две фазы:
f1(t) = cos(f*t)
f2(t) = cos(f*t + PI)
Более подробно написано в Википедии - http://ru.wikipedia.org/wiki/Фазовая_манипуляция
Более точно, модуляция BPSK является дифференциальной - сравнивая последующий и предыдущий сигналы, мы определяем "0" или "1" получаем на выходе.
Для преобразования сигналов в текстовую форму используется алфавит Varicode, в основе которого лежат два удачных решения - более популярным символам соответствуют более короткие коды, плюс два подряд идущих нуля означают конец символа. Длина символов не фиксирована, что теоретически позволяет расширять varicode новыми символами без потери совместимости.
Пример кодов:
1 - пробел
11 - e
101 - t
11011 - l
11011111 - x
и пр
2) Декодирование
Схема бинарного декодера приведена в аттаче. По сути она сводится к выделению фазы принятого и опорного сигнала за один период, и сравнению разности этой фазы с предыдущим сигналов.
Основная формула приведена на картинке, по её сути берется интеграл от произведения входного сигнала с опорным. Арктангенс разности двух таких ингегралов позволяет выделить фазу сигнала.
Более подробно все это описано в книге "Цифровая связь", 2003 год, изд-во "Вильямс".
В идеале один сигнал по фазе совпадает с опорным, другой отличается на 180 градусов. Если это не так, значит настройка неточная. Данные о фазах как раз и выводятся на фазовую плоскость в программе.
На практике есть одна сложность - мы не знаем точного момента начала передачи, чтобы привязаться к смене фаз. Однако в BPSK есть ещё и амплитудная модуляция - сигнал уменьшается до нуля в местах смены фаз, за счет этого приходится искать эту точку, поиском минимума или максимума сигналов за некий период.
3) Запись сигналов в Windows
Для чтения сигналов придется использовать звуковую карту, как ни удивительно
Программный интерфейс доступа к ней давно описан, ничего нового тут в принципе нет. Схема такова:
- открытие устройства функцией waveInOpen
- подготовка буферов функцией waveInAddBuffer
- активация записи фунцией waveInStart
После неё периодически (в зависимости от длины буфера, обычно раз в секунду) системой активируется callback-функция, в которую автоматически передается указатель на текущий записанный буфер.
Единственная сложность тут в том, что буферы приходят не синхронно с периодами PSK, так что сигнал надо накапливать в другом буфере бОльшего объема и обрабатывать по мере его наполнения.
4) Фильтрация
Все было бы проще, если б в один момент времени передавала только одна станция Однако на практике такого не бывает, и сигнал перед декодированием надо фильтровать полосовым фильтром.
Есть два принципиально разных способа:
- через быстрое преобразование Фурье. Поскольку БПФ дает разложение сигнала в спектр, то обнулив нужные части спектра, получаем искомый фильтр. Проблема в достаточной затратности этого метода и большом количестве вычислений.
- через КИХ/БИХ фильтры. Значительно более быстрый способ, позволяющий фильтровать сигнал с помощью полинома, зависящего от предыдущих значений сигнала. Основная сложность в предвартельном расчете коэффициентов этого самого фильтра.
Существуют разные методы подбора коэффициентов, соответствующие разным вариантам фильтров (Чеышева, Баттерворта и пр). Более подробно есть в Википедии.
Собственно, с теорией все, объединив эти 4 части в единое целое, получаем программу декодирования сигналов. Обратный процесс заметно проще, и состоит в формировании "несущей" на заданной частоте и изменением её амплитуды и фазы в соответствии с "0" или "1" в передаваемом сигнале.
Как выглядит сигнал в процессе передачи, можно видеть непосредственно в программе.DmitryElj :: WR-G305e, Icom R75 (был) + magnetic loop
-
17.04.2009, 02:26 #2
- Регистрация
- 06.02.2007
- Адрес
- СПб
- Сообщений
- 317
- Поблагодарили
- 21
- Поблагодарил
- 26
Часть два - Программа для работы PSK
Для реализации всего вышеперечисленного, была написана программа, которая обладает основными возможностями:
- поддержка режимов BPSK32/64/125
- управлением трансивером через COM-порт
- поддержка макросов
Также программа должна была быть быстрой и иметь простой интерфейс.
Насколько это удалось, судить пользователям, скриншот и файл в аттаче.
Программа не требует инсталляции, состоит из одного файла размером всего 200Кб (дополнительно могут потребоваться библиотеки MFC и GDI+ но на всех компьютерах они уже есть). На моем целероне программа загружает проц всего на 5-10%, так что теоретически должно работать на любых компах кроме самых древних.
Идеи и дополнения к программе приветствуются Если это конечно вообще хоть кому-то интересно...
В ближайших планах - окончательный перевод программы на стандартную библиотеку PSKCore, введение многопоточного декодирования и подстройки частоты.
PS: Сегодня как и планировал, через 4 месяца после начала работы, провел с помощью этой программы первую радиосвязьDmitryElj :: WR-G305e, Icom R75 (был) + magnetic loop
-
17.04.2009, 05:14 #3
- Регистрация
- 23.04.2002
- Адрес
- Междуреченск
- Возраст
- 57
- Сообщений
- 1,734
- Поблагодарили
- 108
- Поблагодарил
- 76
Обязательно надо добавить выбор звукового устройства.
Лев (R9UHN) ex RK9UEM RA0SEM
-
17.04.2009, 06:16 #4
- Регистрация
- 26.08.2006
- Сообщений
- 4,042
- Поблагодарили
- 295
- Поблагодарил
- 103
-
17.04.2009, 10:23 #5
- Регистрация
- 06.02.2007
- Адрес
- СПб
- Сообщений
- 317
- Поблагодарили
- 21
- Поблагодарил
- 26
Программа бесплатная, файл PSKeyerApp.zip в аттаче к первому сообщению.
Выбор звуковой карты добавлю.DmitryElj :: WR-G305e, Icom R75 (был) + magnetic loop
-
17.04.2009, 11:00 #6
- Регистрация
- 16.04.2005
- Адрес
- Moscow_Лось
- Возраст
- 72
- Сообщений
- 2,321
- Поблагодарили
- 334
- Поблагодарил
- 217
..при работе в цифре многие пользуется миксой. Хорошо бы "воткнуть" в прогу маленький аппаратный журнальчик имеющий такой же сервис занесения данных с экрана как в миксе и (или) совместимый с аппаратником миксы ...
73! Евгений
-
17.04.2009, 12:21 #7
- Регистрация
- 12.11.2003
- Адрес
- Великий Новгород
- Возраст
- 64
- Сообщений
- 365
- Записей в дневнике
- 1
- Поблагодарили
- 33
- Поблагодарил
- 36
-
26.04.2009, 01:01 #8
- Регистрация
- 06.02.2007
- Адрес
- СПб
- Сообщений
- 317
- Поблагодарили
- 21
- Поблагодарил
- 26
2 All:
Обновил версию программы.
Добавлено следующее:
- многоканальный режим
- автоподстройка частоты
- ведение аппаратного журнала
- выбор звуковой карты (подробно не тестировался из-за отсутствия)
Скриншот и исполняемый файл в аттаче к данному сообщению.
Кому интересно, просьба потестировать. Программа бесплатная и не требует инсталляции.DmitryElj :: WR-G305e, Icom R75 (был) + magnetic loop
-
26.04.2009, 01:22 #9
- Регистрация
- 21.10.2005
- Адрес
- Раменское, Московская обл.
- Возраст
- 56
- Сообщений
- 4,781
- Записей в дневнике
- 2
- Поблагодарили
- 1636
- Поблагодарил
- 3569
При запуске в обоих версиях выдаёт: Приложение не было запущено, поскольку оно не корректно настроено. Повторная установка приложения может решить данную проблему.
Пробовал переустановить не решает...
Где настройка то?
Запускал на ХР хом эдишн SP3, четвёртый пень2,8, ОЗУ 3 гига, две звуковушки(одна встроеная).73! Игорь (позывной для работы в эфире теперь ищите в моём профиле) :: Правильно заданый вопрос - половина ответа!
-
26.04.2009, 01:33 #10
- Регистрация
- 06.02.2007
- Адрес
- СПб
- Сообщений
- 317
- Поблагодарили
- 21
- Поблагодарил
- 26
2 R3D-209:
У Вас на компьютере отсутствуют какие-то DLL необходимые для работы программы.
Выложил архив (в аттаче к этому сообщению) с обновленной версией, вроде должно заработать.DmitryElj :: WR-G305e, Icom R75 (был) + magnetic loop
-
26.04.2009, 02:43 #11
- Регистрация
- 21.10.2005
- Адрес
- Раменское, Московская обл.
- Возраст
- 56
- Сообщений
- 4,781
- Записей в дневнике
- 2
- Поблагодарили
- 1636
- Поблагодарил
- 3569
-
26.04.2009, 05:58 #12
- Регистрация
- 23.04.2002
- Адрес
- Междуреченск
- Возраст
- 57
- Сообщений
- 1,734
- Поблагодарили
- 108
- Поблагодарил
- 76
Работает. Пол ночи игрался на приём. Падений не было.
Лев (R9UHN) ex RK9UEM RA0SEM
-
26.04.2009, 06:03 #13
- Регистрация
- 26.08.2006
- Сообщений
- 4,042
- Поблагодарили
- 295
- Поблагодарил
- 103
-
26.04.2009, 08:31 #14
- Регистрация
- 30.11.2003
- Адрес
- Псков, Россия
- Возраст
- 61
- Сообщений
- 3,698
- Поблагодарили
- 834
- Поблагодарил
- 1561
На передачу у меня все программы сидят на СОМ6.
Выбор портов не велик
RA1WU Leo73. Леонид (RA1WU) :: Псков
-
26.04.2009, 08:55 #15
- Регистрация
- 23.04.2002
- Адрес
- Междуреченск
- Возраст
- 57
- Сообщений
- 1,734
- Поблагодарили
- 108
- Поблагодарил
- 76
2 UT2FF
только принимал ..Но вот сейчас попробовал - передаёт без проблем.Лев (R9UHN) ex RK9UEM RA0SEM
|
Социальные закладки