вычитание JT65 сигналов в WSJT-X
Происходит в jt65_decode.f90 последовательно на каждом проходе по определенному предварительно списку кандидатов, логика следующая:
- определяется список кандидатов
- кандидаты по порядку декодируются из списка(этот порядок я в коде менял на обратный, прироста в количестве декодирований не было но декодирования немного отличались)
- после успешного декодирования первого в списке кандидата идет вызов процедуры вычитания сигналов subtract65.f90
- первый сигнал вычтен и после этого декодируется второй кандидат из списка, затем вычитается второй сигнал и т.д.
При вычитании сигналов используется массив dd() для чтения амплитуды сигнала до вычитания и записи амплитуды обратно в массив dd()
уже после вычитания сигнала. То есть значения амплитуд в этом массиве после каждого вычитания меняются.
Для вычитания сигнала в процедуре subtract65.f90, на основании известной sync последовательности тонов, общей для всех JT65 сигналов, и известной data последовательности тонов уже декодированного сигнала, по-тонально симулируется декодированный сигнал, перегоняется из временной области в частотную где применяется фильтр ФНЧ, после чего возвращается обратно во временную область, затем он вычитается из массива dd() с записью результата обратно в этот массив.
В процессе диагностики столкнулся с сценарием когда сигнал вычитается а в окошке не появляется декодированное сообщение, этот сценарий является результатом повторного декодирования уже ранее декодированного сообщения в рамках установленного в коде предела сдвига частот на повторное сообщение(freq-freq0 менее 3.0).