Цитата(petrov @ Nov 28 2014, 18:35)

Да. Стоит ли слепо всё это повторять? Может лучше подобрать ФНЧ по минимуму межсимвольной интерференции и максимуму сигнал/шум.
В общем, алгоритм который я задумал, с поиском максимальной корреляции данных в FIFO с синхро-последовательностью, при поступлении каждого нового семпла, у меня так и не заработал как надо. Не понимаю в чем проблема. При потоковой передаче псевдослучайной-последовательности с целью замера BER, все получается, вплоть до уровня -115 ...-116 дБ (в качестве приемника/передатчика использую обычный аналоговый репитер). Но при реальной работе в эфире иногда (1 из 50 пакетов) проскакивают ошибки даже в ближней зоне.
Решил пока забить на этот алгоритм и начал изучать демодулятор из GNU Radio, с целью понять причину периодических ошибок во время его работы:
https://github.com/luizrenault/op25/blob/ma...emod_ff_impl.ccВ нем, для получения отсчетов во время каждого символа используют MMSE интерполяцию, но мне не ясно, как построили таблицу taps'ов для интерполяции и почему время подстраивают вот таким образов?
Код
// symbol clock tracking loop gain
const double K_SYMBOL_TIMING = 0.025;
if(interp_p1 < interp) {
d_symbol_clock += symbol_error * K_SYMBOL_TIMING;
} else {
d_symbol_clock -= symbol_error * K_SYMBOL_TIMING;
}
Плюс, может кто подскажет, почему используют такой непонятный способ борьбы с постоянной составляющей?
Код
// our output symbol will be interpolated value corrected for symbol_spread and frequency offset
interp -= fine_frequency_correction;
interp_p1 -= fine_frequency_correction;
...
// coarse tracking loop: for eventually frequency shift request generation
static const double K_COARSE_FREQUENCY = 0.00125; // time constant for coarse tracking loop
coarse_frequency_correction += ((fine_frequency_correction - coarse_frequency_correction) * K_COARSE_FREQUENCY);
// fine loop
static const double K_FINE_FREQUENCY = 0.125; // internal fast loop (must be this high to acquire symbol sync)
fine_frequency_correction += (symbol_error * K_FINE_FREQUENCY);
То есть, высчитывают постоянную составляющую исходя из текущей ошибки в отсчете символа.
Почему бы просто не пропустить через фильтр ВЧ с частотой среза 1-2 Гц?