Сделал в прошивке #X6100 необходимый минимум и решил таки приступить к самому интересному. Для начала реализовал декодер телеграфа.
Click to view
Основной алгоритм восстановления "таймингов" позаимствовал у K4ICY, там есть куда его улучшить, но пока оставил так. А вот обработку, поиск сигнала и пиковый детектор, придумал и написал сам.
История такая. Звук ко мне уже попадает после демодулятора и фильтров тот же самый, что слышно через динамик. Самое простое это просто посчитать RMS от сигнала "задушив" его узким CW фильтром. Но тогда нужно вводить какой-то пороговый уровень, чего очень не хочется. Я с этим еще в UHSDR наигрался. Хотелось чего-то автоматического! Ну и оказалось, что RMS дает очень плохую чувствительность. Cигнал на слух воспринимаю, а RMS меняется очень не значительно. Тогда мысль дальше - считаем спектр и ищем на нем максимум. Тем более, что я знаю где у меня стоит CW фильтр и искать нужно только в этой области. Ладно, максимум нашли. А если нет сигнала - как понять? Нужно как-то посчитать SNR. Сначала взял максимум за сигнал, а окрестности от него за шум. Но когда сигнал сильный из-за растекания спектра SNR не сильно меняется. И тут меня осенило - нужно просто отсортировать спектр! Все что будет с одного края - это сигнал, все что с другого шум. И оказалось, что сигнал это не больше 1-2 отсчетов на спектре. Т.е. берем среднее от этих 2 отсчетов и среднее от всего остального. Для надежности пропустил весь спектр через LPF, потом еще через один LPF отдельно среднее от сигнала, и через третий отдельно среднее от шума. Потом уже брал разницу - это и получается SNR.
Планировал принимать на скоростях телеграфа до 50wpm - на тестах показано, что такой детектор уверенно ловит серию "точек" при SNR >10дб. Не плохо, но хочется еще лучше. Свербила мысль, что нужно как-то накапливать спектр для повышения чувствительности. Тогда сделал скользящее окно с перекрытием 1/8 - все 8 предыдущих окон сохраняю и на каждой итерации считаю среднее между ними. Ну и дополнительно выкинул первый LPF. Та-дам! Чувствительность повысилась до >7дб.
Дальше надо улучшать алгоритм восстановления таймингов. Понятно что делать, но пока не продумал как сделать красивей (; А пока суть да дело, реализовал еще и RTTY декодер. После CW это уже оказалась просто (;
Click to view