Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Рассуждения на тему ЦОС на ПЛИС - а нужен ли NCO(цифровой DDS)?
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
ovs_pavel
День добрый. Вот рассуждаю не тему нужен ли в данном конкретном случае модуль NCO (Numerically Controlled Oscillator)?

Входной сигнал после АЦП с Fd = 112 МГц поступает на ПЛИС.
Внутри ПЛИС раскладывается на квадратуры (умножается на sin и cos, который формируется NCO).
Ситуация интересна тем, что NCO формирует частоту 28 МГц и получаем, что один период 28 МГц - это ровно 4 отсчета частоты дискретизации (112 МГц).

Даже в самой простой ситуации (начальная фаза NCO = 0) получаем:

COS: Vmax, 0, Vmin, 0 ....... (далее повтор)
SIN: 0, Vmin, 0, Vmax ....... (далее повтор)

Т.е. получается если необходимая частота генерации кратна частоте дискретизации, то следовательно данный модуль можно заменить на простой мультиплексор заданных отсчетов.
des00
Цитата(ovs_pavel @ Jul 7 2016, 15:57) *
Т.е. получается если необходимая частота генерации кратна частоте дискретизации, то следовательно данный модуль можно заменить на простой мультиплексор заданных отсчетов.

если не нужна подстройка по фазе, то не нужен.
ovs_pavel
Цитата(des00 @ Jul 7 2016, 12:03) *
если не нужна подстройка по фазе, то не нужен.


Необходимости в подстройке фазы вроде нет (имеется в виду начальной фазы). Просто интересен сам момент что 2 из 4-ех отсчетов могут быть нулями, хотя с теоретической точки зрения это вполне нормально.
С практической надо будет смотреть.
disel
Все правильно, тут подробно: http://www.chipinfo.ru/literature/chipnews/200008/2.html
Этот факт также позволяет упростить фильтры, поскольку половина коэфициентов нулевые.
Leka
У меня получается, что без NCO можно обойтись и в более общем случае (в задаче переноса спектра с децимацией). Вместо перемножения каждого отсчета АЦП на sin/cos от NCO c последующей децимирующей фильтрацией (символ "ж" - свертка):
i = (s * cos) ж h
q = (s * sin) ж h
пропускать отсчеты АЦП сразу через децимирующие фильтры:
i = s ж hc
q = s ж hs
где заранее просчитанные фильтры:
hc = h * cos
hs = h * sin
- а потом повернуть каждую пару отсчетов i(n) q(n) на угол const*n.
Вычислений меньше, тк поворот после децимации.
Не напутал ли где (еще не пробовал)?
Krys
А откуда следует, что умножение на синусоиду и последующую децимацию-фильтрацию можно заменить на децимацию-фильтрацию с синусом? И откуда следует, что потом ещё нужен доворот на линейно нарастающую фазу? А такой поворот на линейно нарастающую фазу не является ли синусом?
Не пробовали в матлабе отмоделировать?
Leka
Выводится непосредственно из определения свертки, exp(jw(t-x)) разлагается на exp(jwt)*exp(-jwx), и exp(jwt) выводится из-под знака интеграла по dx.
Делал амплитудный детектор, поэтому не поворачивал.
С поворотом не моделировал, амплитудный детектор сразу в железо зашил, получил, что хотел.
ovs_pavel
День добрый коллеги. Вообщем наконец получил железо и теоретические изыскания попытался переложить на железо.

Вкратце:
- частота дискретизации 112 МГц;
- входной сигнал (тестовый) подается частотой 85 МГц (ПЧ = 84 МГц и сдвиг по частоте 1 МГц);
- внутри ПЛИС раскладывается на квадратуры (умножается на sin и cos, причем косинус это 1, 0, -1, 0 и синус это 0, 1, 0, -1).
- внутри ПЛИС реализуем фильтр для подавления зеркальной составляющей.

Получаем первую картинку - с фильтром без децимации:



На этой картинке показана вся частотная шкала (112 МГц) для БПВ 32768. Видна основная гармоника - 1 МГц и подавленная зеркальная составляющая.

Вторая картинка показывает результат децимации после этого фильтра:



На этой картинке вся шкала уже 56 МГц. Также основная гармоника и зеркальная составляющая переехала вправо (хотя физически осталась на месте). Вроде все как и должно быть.

Но при попытке реализовать фильтр-дециматор с учетом того, что у нас после АЦП спектр оказался на частоте Fd/4 и отбрасывания соответствующих нулевых составляющих, практика и теория не совпадает. Картинка:



На этой картинке вся шкала также 56 МГц. Есть основная гармоника (слева), а вот справа появилось что-то, чего быть не должно (должна быть вроде как задавленная зеркалка).

ovs_pavel
Более детальный анализ:

входная последовательность: x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10]...;

для получения синфазной составляющей умножаем ее на 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1... (косинус 28 МГц при частоте дискретизации 112 МГц);

после перемножения: Хm[0], 0, -Хm[2], 0, Хm[4], 0, -Хm[6], 0, Хm[8], 0, -Хm[10]...;

коэффициенты фильтра h[0], h[1], h[2], h[3], h[4], h[5]....

Выход фильтра:
для t=0 y[0] = Xm[0]*h[0];
для t=1 y[1] = 0*h[0] + Xm[0]*h[1];
для t=2 y[2] = -Xm[2]*h[0] + 0*h[1] + Xm[0]*h[2];
для t=3 y[2] = 0*h[0] -Xm[2]*h[1] + 0*h[2] + Xm[0]*h[3];
для t=4 y[4] = Xm[4]*h[0] + 0*h[1] -Xm[2]*h[2] + 0*h[3] + Xm[0]*h[4];
для t=5 y[5] = 0*h[0] + Xm[4]*h[1] + 0*h[2] -Xm[2]*h[3] + 0*h[4] + Xm[0]*h[5];
................

При децимации внутри фильтра отбрасываем составляющие для t=1,3,5... и не учитывая нулевые произведения получим:
y[0] = Xm[0]*h[0]
y[2] = Xm[0]*h[2] - Xm[2]*h[0]
y[4] = Xm[0]*h[4] - Xm[2]*h[2] + Xm[4]*h[0]
y[6] = Xm[0]*h[6] - Xm[2]*h[4] + Xm[4]*h[2] - Xm[6]*h[0]
y[8] = Xm[0]*h[8] - Xm[2]*h[6] + Xm[4]*h[4] - Xm[6]*h[2] + Xm[8]*h[0]
.......................

Для квадратурной составляющей будут нечетные коэффициены. Вроде так получается, но на выходе - беда.

ovs_pavel
Задача разрешилась.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.