[an error occurred while processing this directive]
|
При попадании частоты меж ДПФных точек результаты как бы шибко кривыми не вышли...
А про ФАПЧ например вот (простенькая реализация). Частоту получишь, а зная частоту сделать ДПФ именно на ней труда не составит.
1. Компаратор с гистерезисом. Реализуется так:
Xn - выборка с ацп. , +-(2^(N-1)-1) N - разрядность АЦП.
Yn - выходной сигнал
A - величина гистерезиса.| 1, если Xn > A
Y(n) = { Y(n-1), если A >= Xn >= -A
| 0, если Xn < -A2. Генератор прямоугольного сигнала, управляемый кодом (ГУК)
Например пустить таймер с автоперезагрузкой и в прерывании от
него инвертировать бит в памяти. Если для МК/ДСП
Или - регистр, в который каждый такт записывается число, равное
сумме значения, пропорц. частоте, и предыдущего значения.
Выход - старший бит. Это где угодно - ПЛИС, МК, ДСП.Далее его (ГУКа) сигнал будет называться Z(n)
3. Делитель частоты входного сигнала на 2. Необходим (точнее
желателен) для нейтрализации сдвига нуля у АЦП.
форма его выходного сигнала - меандр.DY - Выходной сигнал делителя.
Y - Сигнал от компаратора (0 или 1).| DY(n-1) XOR 1, если Y(n-1) = 0 и Y(n) = 1;
DY(n) = {
| DY(n-1) во всех остальных случаях.
3. Фазовый детектор.
Самое простое решение - цифровая реализация детектора работающего
по фронтам.FD1, FD2 - детекторы фронтов. (промежуточные переменные).
Z - сигнал с генератора, управляемого кодом.
DY - сигнал с делителя на 2.
PH - выходной сигнал.| 1, если DY(n-1) = 0 и DY(n) = 1 и Z(n) = 0
FD1(n) = { 0, если Z(n-1) = 0 и Z(n) = 1
| FD1(n-1) во всех остальных случаях
| 1, если Z(n-1) = 0 и Z(n) = 1 и DY(n) = 0
FD2(n) = { 0, если DY(n-1) = 0 и DY(n) = 1
| FD2(n-1) во всех остальных случаях
| +1, если FD1(n) = 1;
PH(n) = { -1, если FD2(n) = 1;
| 0 , во всех остальных случаях.
ну и на основании PH(n) корректировать частоту ГУК.
тут делов на несколько ячеек ПЛИСины.
E-mail: info@telesys.ru