В описании указано что частота сигнала меряется как количество переходов через ноль за отрезок времени (секунда). Как правило эта секунда "плывёт" по длительности в ПК. Соответственно и частота измеренная тоже будет плавать. Или эти изменения не критичны для точности ? Может стоит попробовать другой способ измерения частоты не так чувствительный к внутренним часам компьютера..?
Отрезок времени, отведенный на подсчет количества переходов через ноль в программе установлен равным 100 секунд. Считаются пересечения нуля как вниз, так и вверх. Каждая новая оценка частоты вычисляется один раз в 0.12 сек, используя часть старых и вновь поступившие отсчеты (скользящее окно длиной 100 сек). Эти оценки частоты запоминаются в кольцевом буфере и усредняются, длина "окна" усреднения 123 сек (2 минуты). Так сделано, чтобы не теряя точности можно было бы отслеживать дрейф частоты и видеть процесс в динамике.
Каким образом определяется, что 100 секунд истекли? По количеству обработанных от звуковой карты отсчетов. Частота дискретизации установлена 12 кГц, значит, когда мы получили 12000000 отсчетов, то 100 сек прошло.
Таким образом, точность измерения зависит от точности кварца звуковой карты. Разумеется, если в ней стоит кварц не очень точный, то и частота дискретизации окажется не 12000, а скажем 11996 Гц. Соответственно программа "насчитает" некоторый частотный сдвиг относительно эталона.
Но в этом и содержится весь смысл измерения частотного сдвига этой программой! Станция в эфире стоит точно. А вот частота дискретизации может немного отличаться от номинала. Плюс гетеродин приемника может быть несколько смещен. Суммарно мы увидим некоторый образовавшийся частотный сдвиг, состоящий, как я уже сказал, из настоящего сдвига (приемник) и сдвига, возникшего от неточного значения частоты дискретизации (кварц в звуковой карте).
Это нам и нужно, чтобы скомпенсировать (хотя бы предварительно) этот сдвиг с спектрумлабе или арго.