предискажение уровней сигналов в WSJT-X
Идея заключается в том чтобы после быстрого преобразования Фурье в символьном спектре внести
разную степень расширения диапазона малых уровней сигналов для второго и третьего
проходов с компрессией высоких уровней сигналов.
То есть на каждом проходе в спектре делаю разную зависимость выходных уровней от входных,
при этом для первого прохода использую функцию предложенную разработчиками.
В результате проведенных работ по оптимизации были выбраны следующие функции:
1-ый проход: s=real(c(i))**2 + aimag(c(i))**2
2-ой проход: s=SQRT(real(c(i))**2 + aimag(c(i))**2)
3-ий проход: s=(abs(real(c(i))) + abs(aimag(c(i))))**0.01
Для осуществления выбора функции в исходнике symspec65 в зависимости от номера прохода в
исходнике jt65_decode.f90 ввожу общую для двух подпроцедур переменную номера прохода npass.
Значение этой переменной присваивается в том месте кода где мы устанавливаем пороги под каждый проход,
строка common/igor/npass в начале обоих исходников позволяет совместное использование этой переменной обеими
подпроцедурами.
На основании значения этой переменной выбирается необходимая функция предискажения
уровней сигналов в спектре после быстрого преобразования Фурье в исходнике symspec65.f90
_____
В результате оптимизации функций получены следующие результаты в количестве JT65 декодирований:
Сравнение эффективности работы r6462mod3 c r6449.
Софт от разработчиков r6449:
файлы SDR с выключенной АРУ - 1066 правильных декодирований и 5 ложных
файлы SDR с включенной АРУ - всего 3064 декодирования
модифицированный релиз r6462mod3:
файлы SDR с выключенной АРУ - 1163 правильных декодирований и 5 ложных
файлы SDR с включенной АРУ - 3449 правильных декодирований и 8 ложных
Прирост в количестве правильно декодированных сообщений от 9.1 до 12.6 процента.
принудительное включение Robust Sync в зависимости от количества кандидатов
Steve K9AN в софте сделал принудительное включение Robust Sync если после использования полной функции корреляции количество кандидатов на проходе превышает 50.
Алгоритм следующий:
1. количество кандидатов на первом проходе определяется при помощи полной функции корреляции
2. если количество кандидатов более чем 50 то 'включается Robust Sync', количество кандидатов обнуляется и заново оценивается уже с помощью однобитной функции корреляции. Включившись на одном из проходов(обычно на втором, на первом проходе очень редко) Robust Sync остается включенным для всех оставшихся проходов приемного интервала.
Использование однобитной функции корреляции Robust Sync примерно на 0.5 дБ снижает чувствительность по декодированным сигналам.
При вычитании сигналов с SNR лучше чем -20 на следующем проходе количество кандидатов становится в пределах от 150 до 250, что связано скорее всего с расползанием спектра тона между бинами после быстрого преобразования Фурье и особенностью примененного точечного вычитания тонов в спектре.
Можно в софте выключить вычитание спектра после второго прохода если количество кандидатов на втором проходе менее 50, можно выключать в коде Robust Sync после каждого прохода декодирования.
Возможно эти два изменения позволят увеличить количество декодированных совсем слабых DX сигналов на почти закрытом диапазоне, за счет более низких порогов второго и третьего проходов и использования полной функции корреляции,
но чтобы проверить что такой подход даст эффект нужно несколько десятков звуковых файлов где SNR сигналов хуже чем -20 и есть один..два сигнала с SNR примерно -15...-20.
Если на файлах будет выигрыш то можно даже попробовать вывести на окно графического интерфейса квадратик с галочкой включающей/выключающей вычитание сигналов.
Нужна помощь в сборе таких файлов, желательно на сетапе с низким уровнем шума (антенна Яги или активная антенна).
Какие еще будут мысли?