Комментарии 37
Пока вам нужна точность 10% может и сойдет. А когда нужна стабильность долей герца для частот 1,5ГГц
То тут только единый клок для всех. Забавно воткнуть в спектроанализатор выход генератора (и там и там стоят высокостабильные генераторы) и смотреть как «палка» со временем ползет в сторону.
а вот, к сожалению, не во всех спектроанализаторах стоят хорошие опорники.
а если бОльшая точность нужна, то в любительских условях можно сверять частоту по GPS-приемнику (считай квантовый эталон).
Если для измерения звуковухой, вы поделите 10 МГц до скажем 10 кГц — эту частоту придется измерять с точностью до 1 миллигерца чтобы получить точность в 1 Гц на исходной частоте. То есть время измерения классическим способом подсчета составит от 2x1000 секунд. Уйдет в районе получаса на одно измерение.
Насчет термокомпенсированных опорников — они весьма разные по качеству исполнения, и как следствие по стабильности и фазовым шумам, хотя и зовутся вроде одинаково tcxo. Например в хорошем портативном частотомере опорник не сравнить со звуковушным. А для стационарного прибора обычно ставится ocxo, кварц в печке. Для максимально достижимой точности при сравнительно небольших затратах, кроме gps радиолюбители давно уже используют рубидиевые генераторы, снятые как правило со списанной импортной измериловки производства конца прошлого века. Да и китайцы ими тоже приторговывают.
То есть время измерения классическим способом подсчета составит от 2x1000 секунд. Уйдет в районе получаса на одно измерение.
ну давайте, чтобы не быть голословными, проведем маленький эксперимент:)
посмотрим какую точность сможем достичь, если продискретизируем сигнал с частой 10,12345 кГц.
пусть частота дискретизации 44100 Гц. сигнал на входе звуковой карты после делителя почти прямоугольный:
N = 100000
f0 = 1.000012345e4
fd = 44100.0
a_sig = np.sin(2.0*np.pi*f0/fd*np.arange(N)+0.01)
d_sig = np.array([1.0 if x > 0 else 0.0 for x in a_sig])
d_sig += np.random.normal(0.0, 0.1, size=len(d_sig))
f_sig = butter_bandpass_filter(d_sig, 1e4, 1.5e4, fd)[20:]
у меня сигнал на входе карты это d_sig. насыпим к нему шума. профильтруем его — сделаем из прямоугольника синус. и попытаемся пофитить. весь код целиком:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import differential_evolution
from scipy.signal import butter, lfilter
def butter_bandpass(lowcut, highcut, fs, order=6):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
def butter_bandpass_filter(data, lowcut, highcut, fs, order=6):
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = lfilter(b, a, data)
return y
def sig_estim(x, *args):
A = x[0]
f = x[1]
phi = x[2]
sig_len = len(args[0])
sig = np.sin(2.0*np.pi*f*np.arange(sig_len)+phi)
return np.sum((sig - args[0])**2)
N = 100000
f0 = 1.000012345e4
fd = 44100.0
a_sig = np.sin(2.0*np.pi*f0/fd*np.arange(N)+0.01)
d_sig = np.array([1.0 if x > 0 else 0.0 for x in a_sig])
d_sig += np.random.normal(0.0, 0.1, size=len(d_sig))
f_sig = butter_bandpass_filter(d_sig, 1e4, 1.5e4, fd)[20:]
bounds = [(0.1, 1.0), (1e4/fd, 1.5e4/fd), (-3.14, 3.14)]
result = differential_evolution(sig_estim, bounds, args = (f_sig,))
print(result.x, result.fun)
print(result.x[1]*fd)
в результате получим 10000.122856650896
итого 7 знаков правильно определили. и это за выборку в несколько секунд
Stage 1 until 70-ies Conventional counting
Stage 2 1980-ies Reciprocal counting (period measurement + inversion)
Stage 3 1990-ies Interpolating Reciprocal Counting
Stage 4 2000-ies Multiple Time Stamp Average Continuous Counting
По ней получается, что со второго периода — разрешение зависит только от времени измерения и не зависит от измеряемой частоты.
Измерение частоты так или иначе происходит через сравнение с эталонным источником. Есть специальные компараторы частот.
Тут еще возникает вопрос о стабильности приемника, который применял Автор текущей статьи. Есть ли в нем гетеродин? Если да, то точность будет напрямую зависеть от стабильности гетеродина.
Спасибо, теперь намного понятнее. Насколько понял, ваш метод оптимален в случае близкой к идеальной синусоиды, и не годится для измерения частоты или периода импульсов сложной формы.
Прибор по ссылке нужен не столько для сравнения частот (хотя в данном случае он бы как раз пригодился), сколько для оценки фазовых шумов — которые во многом определяют чувствительность РПУ. Например по этой причине в свое время не стали применять только что появившиеся dds серии 98xx в качестве гетеродина, именно из-за фазовых шумов.
Касательно стабильности приемника у автора статьи — долговременная стабильность и точность частоты тут не имеют значения, т.к. идет сравнение с эталоном. А приемник лишь визуализирует их. Опорник есть конечно и у DDC приемников. Кратковременная нестабильность, вплоть до фазовых шумов вызовет размытие меток по оси частот, что немного снизит точность сравнения.
На частотомерах измеряющих частоту вращения энергетических турбин используется умножение частоты входные 25/50(30/60) Гц умножается до частот порядка 10кГц и измеряется обычным счетом.
Но современные частотомеры работают несколько иначе. Для низких частот они измеряют период и пересчитывают в частоту. Могут даже и для высоких частот измерять период за счет расширения импульса за счет очень хитрой схемы. Но чаще работают в комбинированном режиме — измеряют период пачки импульсов, к примеру.
Нашел таки этот любительский проект частотомера. Весьма интересный частотомер. И очень подробно документирован.
https://prfreqmeter.000webhostapp.com/
И, я так понял, на графике разность отображена в нано-единицах? т.е. значение надо умножить на 0.001PPM?
2. в статье измерение десятков мегагерц с точностью до десятков килогерц — это почти что «на глаз».
3. Не стоит доверять встроенному измерителю частоты осциллографа, ох не стоит.
но тут есть один неприятный ньюанс… прием этих сигналов на больших расстояниях подвержен доплеровскому эффекту и в зависимости от состояния атмосферы и ионосферы принимаемая частота может плавать +-3Гц даже если исходный сигнал будет стоять как вкопаный.
Можно подробнее или ссылку на литературу?
Я не настоящий радиосвязист, поэтому предполагаю, что где-то там в ионосфере может незначительно меняться длина волны (за счёт чего и будет осуществляться рефракция), но несущая частота будет сохраняться. А если, при неподвижных приёмнике и передатчике, будут флуктуации длины радиотрассы из-за неоднородностей ионосферы, то это будет создавать допплеровские сдвиги для модулирующего сигнала (секундные импульсы и т.п., в зависимости от расписания станции), но не для несущей.
Напоминает рецепты из Домоводства: Если к вам внезапно пришли гости, а Вам совсем нечем их накормить, возьмите с ледника 3 фунта телятины, каперсы, маслины…
Для этого достаточно из эфира выловить сигнал станции точной частоты и времени. По минимуму, как гетеродинных приёмниках у Полякова, достаточно — комнатной антенны, колебательного контура, двух встречно-параллельных диодов, дросселя НЧ и усилителя НЧ на 1..2 транзисторах. Разность частоты станции и местного генератора (который мы настраиваем) будет слышна в телефонах. Считая мин. слышимую частоту за 20 Гц получим ориентировочную точность 2 * 20 Гц / 5 МГц ~ 8 ppm. «2» в числителе потому, что настраиваемый генератор имеет частоту вдвое меньше частоты станции, «5 МГц» в знаменателе — частота станции. Или нет?
Тут интерес как раз в том, что автор реализовал хоть и общеизвестный в радиотехнике, но в наше время не часто вспоминаемый способ. Так что как демонстрация эффекта — очень даже здорово! Правда не хватает фотографий железок для полноты картины.
В качестве контрольного приёмника использовался SoftRock RX Ensemble II с программой HDSDR.Похоже, ссылки в тексте статьи совсем не видны толком…
По первой ссылке: http://www.wb5rvz.org/ensemble_rx_ii/index?projectId=16 — подробное описание схемы, рисунок pcb и подробнейшая инструкция по монтажу и наладке. Гетеродин собран на синтезаторе si570 со встроенным кварцевым резонатором.
Купил набором, собрал и наладил сам. Использую около семи лет как контрольный приёмник.
Калибровал я этим приёмником по сигналам RWM синтезатор на si5351. si5351 сейчас используют как «очень бюджетный заменитель» si570.
SoftRock перекрывает все КВ-диапазоны. Неудобство только в неавтономности: нужна звуковая карта, вычислитель и программное обеспечение.
С RTL-SDR я игрался пару месяцев. Могу сказать, что работа устройства имеет качество, соответствующее цене. Хорош в качестве стартового набора: посмотреть на панорамном индикаторе вещание на FM, посмотреть сигналы устройств на 433 MHz и т.п.
Есть осцилл, наверняка на stm32f103, можно взять просто чип f103 и измерить частоту им.
Я измерял от долей герц, до 25МГц (источника большей частоты — не оказалось).
А 70-килограммовые Р250-М2 лично мне лет 25 не встречались.
Радиолюбительские измерения: когда нет частотомера