-
27.02.2016, 14:33 #736
- Регистрация
- 18.01.2015
- Адрес
- новосибирск
- Возраст
- 70
- Сообщений
- 1,683
- Поблагодарили
- 127
- Поблагодарил
- 55
-
27.02.2016, 15:20 #737
- Регистрация
- 10.07.2012
- Адрес
- Тюмень
- Возраст
- 60
- Сообщений
- 361
- Поблагодарили
- 87
- Поблагодарил
- 34
С Уважением, Андрей UA9LEW
-
27.02.2016, 17:07 #738
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
Временно прекратил попытки оптимизации вычитания сигналов в исходнике subtract65 по причине утечки памяти в WSJT-X, проявляющейся в периодическом отсутствии доступа к дробной части массива dd().
Этот массив содержит отсчеты(samples) входного цифрового звукового потока и является основой всего происходящего в WSJT-X.
Часто бывает что при первичном чтении массива получаю например такие данные (номер отсчета, значение):
dd 2201 19.0000000
dd 2202 16.0000000
dd 2203 12.0000000
dd 2204 4.00000000
dd 2205 -16.0000000
dd 2206 -29.0000000
dd 2207 -10.0000000
При вычитании декодированного сигнала идет запись в массив dd() после чего часто ситуация возвращается к нормальной, например:
dd 2201 19.0524387
dd 2202 15.4829807
dd 2203 23.0843353
dd 2204 55.9010811
dd 2205 33.9535789
dd 2206 -26.7643013
dd 2207 -44.2844543
Такой же сбой доступа к памяти происходит и в обратном порядке, если изначально значения с массива считываются с дробной частью то после вычитания сигнала и записи в массив доступ к дробной части может исчезнуть.
Эффект на декодирование непредсказуемый, поэтому в присутствии этого дефекта в коде считаю вообще бессмысленной какую либо оптимизацию декодирования.
Дефект наблюдаю как в модифицированном r6462mod6 так и немодифицированном WSJT-X r6496, также в r6229.
Если есть желание пощупать диагностику самостоятельно то в исходник subtract65.f90 необходимо добавить следующий код(всего три строки прямо перед блоком вычитания сигнала):
.....
+ do i=1,20
+ print *, 'dd',2200+i,dd(nstart+2200+i)
+ enddo
! Subtract the reconstructed signal
call timer('subtr_3 ',0)
.....
В этом коде nstart означает стартовый отсчет с учетом DT вычитаемого сигнала/сообщения, отсчет 2200 примерно середина первого sync тона этого сигнала (точно середина - отсчет 2229).
Само декодированное сообщение в окошке будет ниже распечатанных значений напряжения отсчетов кодом диагностики.
Сразу можно только сказать что этот дефект скорее всего приводит к хаотическому уменьшению динамического диапазона сигналов, срезая примерно каждый второй слабый сигнал.
Информацию о дефекте передал разработчикам, жду ответа.Последний раз редактировалось UA3DJY; 27.02.2016 в 17:29.
-
27.02.2016, 17:36 #739
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
вычитание JT65 сигналов в WSJT-X
Происходит в jt65_decode.f90 последовательно на каждом проходе по определенному предварительно списку кандидатов, логика следующая:
- определяется список кандидатов
- кандидаты по порядку декодируются из списка(этот порядок я в коде менял на обратный, прироста в количестве декодирований не было но декодирования немного отличались)
- после успешного декодирования первого в списке кандидата идет вызов процедуры вычитания сигналов subtract65.f90
- первый сигнал вычтен и после этого декодируется второй кандидат из списка, затем вычитается второй сигнал и т.д.
При вычитании сигналов используется массив dd() для чтения амплитуды сигнала до вычитания и записи амплитуды обратно в массив dd()
уже после вычитания сигнала. То есть значения амплитуд в этом массиве после каждого вычитания меняются.
Для вычитания сигнала в процедуре subtract65.f90, на основании известной sync последовательности тонов, общей для всех JT65 сигналов, и известной data последовательности тонов уже декодированного сигнала, по-тонально симулируется декодированный сигнал, перегоняется из временной области в частотную где применяется фильтр ФНЧ, после чего возвращается обратно во временную область, затем он вычитается из массива dd() с записью результата обратно в этот массив.
В процессе диагностики столкнулся с сценарием когда сигнал вычитается а в окошке не появляется декодированное сообщение, этот сценарий является результатом повторного декодирования уже ранее декодированного сообщения в рамках установленного в коде предела сдвига частот на повторное сообщение(freq-freq0 менее 3.0).Последний раз редактировалось UA3DJY; 27.02.2016 в 17:54.
-
28.02.2016, 00:22 #740
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
После продолжительного обсуждения этой темы с разработчиками получил подтверждение об отсутствии проблем в коде.
Сигнал с АЦП (или цифрового потока SDR) проходит через изменение частоты дискретизации и ФНЧ (исходник fil4.f90) после чего записывается в массив dd(). При первоначальной записи используются целые числа и затем последующая обработка с плавающей запятой. Диапазон значений в массиве -32767...+32767, что соответствует примерно 90 дБ динамического диапазона (20*log10(32767)) при максимально возможной амплитуде сигнала.
В процессе обработки на декодер уже попадают тона отфильтрованные полосой бина 2.69 Гц что увеличивает динамический диапазон еще на 10*log10(6000/2.69)= 33 дБ снизу за счет уменьшения мощности шума после узкополосного полосового фильтра.
Значит эффект подавления слабых сигналов сильным при использовании SDR с выключенной АРУ и цифровым аудио потоком связан исключительно со ступенькой боковых излучений за пределами передаваемой полосы JT65 сигнала, то есть с чистотой формирования сигнала в системе компьютер-трансивер-усилитель (паразитная амплитудная модуляция + ее интермодуляционные составляющие, использование линейного участка микрофонного тракта).
Отдельной темой является одновременная работа на передачу в JT9 и JT65 в одном интервале, особенно в части используемой на передачу мощности.Последний раз редактировалось UA3DJY; 28.02.2016 в 00:41.
-
28.02.2016, 10:25 #741
- Регистрация
- 31.05.2012
- Адрес
- Железногорск
- Возраст
- 68
- Сообщений
- 729
- Поблагодарили
- 353
- Поблагодарил
- 18
-
28.02.2016, 11:23 #742
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
В этой формуле 6000 это полоса приема WSJT-X получаемая из частоты дискретизации 12000 поделенной на 2(теорема Котельникова или Найквиста-Шеннона), Гц.
Если на приемнике полоса ограничена 2500 Гц или менее, то дополнительное снижение нижней планки динамического диапазона за счет узкой полосы бина будет соответственно приведенной выше формуле меньше.
И большой плюс от сужения полосы фильтра приемника на классике - снижаются требования по верхней планке динамического диапазона к звуковому тракту приемника при выключенной АРУ, часто при сильных сигналах на диапазоне при работе на общий вызов мы вынуждены включать узкий кварцевый фильтр.Последний раз редактировалось UA3DJY; 28.02.2016 в 11:26.
-
29.02.2016, 06:40 #743
- Регистрация
- 03.11.2007
- Адрес
- Абинск
- Возраст
- 67
- Сообщений
- 632
- Поблагодарили
- 126
- Поблагодарил
- 322
Уважаемый Игорь! Во многих цифровых программах есть очень полезная функция быстрого перехода на заранее запрограммированную, (любимую) частоту. Эта функция называется по-разному: - в MMVARI -> Align, в FlDigi -> QSY. Разница энергетики в полосе частот от 100 Гц до 2.4 кГц очень большая. Можно ли ввести подобную функцию и в WSJT-X?
Николай, RV7C ex: UL7KAE, UL7KE, UN7KA, RW9FN, R9FN
-
29.02.2016, 07:38 #744
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
Николай, приветствую!
Думаю что можно, но я до сих пор считал что энергетика в спектре одинакова - обусловлено узкополосной побиновой фильтрацией тонов сигнала в WSJT-X.
На классике есть завал фильтров внизу и вверху спектра, что на передачу и прием может привести к разной энергетике тонов JT65 сигнала на частотах ниже 300 Гц и выше 2500 Гц, для узкого спектра JT9 разница невелика.
Почему Вы думаете что энергетика на определенной частоте может быть больше?
В программах MMVARI и FlDigi эта функция может быть востребована для работы в соревнованиях.
При использовании перестраиваемого узкополосного фильтра на классике (кварцевый в ПЧ и/или конденсаторный в НЧ) я обычно ориентируюсь на картинку водопада для точной установки частоты передачи в полосу фильтра, и поскольку расположение сигналов в спектре в моде JT65 очень быстро меняется мне приходится довольно часто перестраивать узкий фильтр на другую(свободную) частоту для работы на общий вызов.
73 ИгорьПоследний раз редактировалось UA3DJY; 29.02.2016 в 07:53.
-
29.02.2016, 14:15 #745
- Регистрация
- 03.11.2007
- Адрес
- Абинск
- Возраст
- 67
- Сообщений
- 632
- Поблагодарили
- 126
- Поблагодарил
- 322
-
29.02.2016, 14:58 #746
- Регистрация
- 16.03.2013
- Адрес
- Москва
- Возраст
- 74
- Сообщений
- 1,035
- Поблагодарили
- 322
- Поблагодарил
- 41
-
29.02.2016, 18:53 #747
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
И при поднятии уровня звука на передачу чтобы достичь 10 Ватт выходной мощности приходится выходить на нелинейный участок микрофонного тракта. Если бы не эта особенность классики то можно было бы попросить разработчиков сделать в софте калибровку положения ползунка PWR в зависимости от частоты передачи с записью корректирующего коэффициента значений в wsjtx.ini.
Похожая морока у классики при работе в JT возникает при использовании VOX для управления передачей, также с выходом на нелинейный участок.
Можно менять частоту на трансивере как предложил Виталий UA3ALE, но при этом выпадает верхняя часть JT участка.
Увы, классика неудачный вариант для JT.Последний раз редактировалось UA3DJY; 29.02.2016 в 18:57.
-
29.02.2016, 19:48 #748
- Регистрация
- 03.11.2007
- Адрес
- Абинск
- Возраст
- 67
- Сообщений
- 632
- Поблагодарили
- 126
- Поблагодарил
- 322
-
29.02.2016, 22:29 #749
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
Насчет калибровки выходного уровня по частоте написал письмо на форум разработчиков, несмотря на проблемы с линейностью микрофонного тракта это все же полезный функционал, потому что пользователь все равно добавляет уровень работая на краях диапазона и бывает забывает его снизить вернувшись в полосу фильтра.
По части кнопки "домашняя частота" надо подумать, если делать то скорее всего это будет окошко в которую забивается эта частота и кнопка вызывающая переход на нее, еще кнопка добавления текущей частоты в домашнюю. То есть одно окошко и две кнопки, здесь надо хорошо продумать.
-
01.03.2016, 09:00 #750
- Регистрация
- 05.03.2015
- Сообщений
- 5,322
- Поблагодарили
- 7715
- Поблагодарил
- 792
планы на выпуск mod7
Решил немного отвлечься от математики и вернулся к оптимизации, получил прорыв в декодированиях.
Всем кто хочет сейчас попробовать - поставьте nbirdie=5 в исходнике extract.f90. Наблюдаю ощутимое увеличение количества правильных декодирований и снижение ложных в режиме Preamp, прирост общего количества декодирований.
Продолжаю тестирование с поиском оптимального значения nbirdie, готовлюсь к выпуску mod7.Последний раз редактировалось UA3DJY; 01.03.2016 в 09:05.
Социальные закладки