Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Altera NCO, Разложение сигнала на квадратуры
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Evgeniiy
Здравствуйте! Кто пользовался NCO, подскажите как с ним работать.
Передо мной стоит задача разложить сигнал на квадратурные составляющие, сигнал с частотой 28МГц оцифровывается 112МГц и поступает в ПЛИС, дальше как я понимаю можно просто брать четные или не четные отсчеты - это и будут квадратуры, а можно перемножать выходы NCO настроенного на частоту 28МГц с входами. Так вот по поводу NCO:
1) на вход clk мне подавать 112МГц и CLOCK RATE задавать 112МГц
2) фазу задавать константой которая высвечивается в мегавизарде для 112МГц и входной 28МГц это 1073741824?


Если делать как в пункте 1 и 2, то я получаю на выходе косинуса значения: 0, -32767 0, 32767, на выходе синуса соответственно 32767, 0 , -32767, 0, с этим и перемножать?? в чем тогда сложность составить таблицу из 2 чисел?
И что можно подавать кроме константы на вход фазы??
СПАСИБО! smile3046.gif
eugen_pcad_ru
Сейчас квартуса под рукой нет, но попробую объяснить.
Квадратурный перенос осуществляется с одной частоты на другую.
Т.е. Fрез = Fсигн - Fnco (или Fрез = Fnco - Freз кому как нравитсяsmile.gif), где Fрез - частота результирующего сигнала, Fnco - частота NCO, Fсигн - центральная частота сигнала.
Константа на входе - это код требуемой частоты.
Допустим имеется частота дискретизации 112 Мгц, частота сигнала 28 Мгц.
Если необходимо перенести "в ноль" (обычно как раз это и надо), то требуемая частота работы NCO тоже должна быть 28 МГц.
А частота дискретизации при этом (Sample rate) = 112 ММГц.
Код же частоты определяется через отношение Fnco/Fдискр с учетом масштабного коэффициента.
К примеру если требуется поставить NCO точно в центр анализируемого частотного диапазона, тогда как раз и можно ограничиться манипуляциями по пунктам 1 и 2.
P.S.: Вполне можно еще задать и начальную фазу, тольк5о в обычном случае это совсем ни к чему.
P.P.S: Да, чуть не заыл. Помимо разностной частоты возникает сигнал и на суммарной частоте, в связи с этим используют дополнительную фильтрацию "нежелательных" составляющих.
Evgeniiy
В чем тогда преимущество NCO, можно же тогда на эти два числа и умножать
alexadmin
Цитата(Evgeniiy @ Sep 30 2009, 17:17) *
В чем тогда преимущество NCO, можно же тогда на эти два числа и умножать


У вас вырожденный случай кратных частот: 28*4=112.
Если бы вместо 28 у вас сигнал был 27, то вы бы оценили преимущества ;-)

Вообще говоря, при подобных кратных частотах могут возникать неприятные эффекты, я бы вас посоветовал для начала помоделировать это и посмотреть на спектр. В Matlab/Simulink к примеру.
Evgeniiy
А что бы мне мешало взять частоту дискретизации 27*4 = 108?

Как мне эти значения в ручную посчитать, хотя бы несколько, я не очень доганяю как они получаются
alexadmin
Цитата(Evgeniiy @ Sep 30 2009, 17:25) *
А что бы мне мешало взять частоту дискретизации 27*4 = 108?


Ну если вам ничто не мешает - то хорошо. Вся проблема только в том, сможете ли вы с нужным качеством получить клок произвольной частоты под ваш входной сигнал. И что делать, если нужно настраиваться на разные частоты приема. Впрочем это тоже вопросы решаемые...
Evgeniiy
Цитата(alexadmin @ Sep 30 2009, 17:37) *
Ну если вам ничто не мешает - то хорошо. Вся проблема только в том, сможете ли вы с нужным качеством получить клок произвольной частоты под ваш входной сигнал. И что делать, если нужно настраиваться на разные частоты приема. Впрочем это тоже вопросы решаемые...



Спасибо, преимущество понял.
alexadmin
Цитата(Evgeniiy @ Sep 30 2009, 17:33) *
Как мне эти значения в ручную посчитать, хотя бы несколько, я не очень доганяю как они получаются


Какие конкретно значения? Для частот, кратных четырем - вы уже посчитали. В общем случае это
sin(Fs/Fnco*i*2Pi),
cos(Fs/Fnco*i*2Pi),
где i=0...(int(Fnco/Fs)-1). Соответственно, чем больше кратность частот, тем длиннее последовательность.

PS отмасштабированное, конечно, под вашу разрядную сетку
Evgeniiy
Цитата(alexadmin @ Sep 30 2009, 17:44) *
Какие конкретно значения? Для частот, кратных четырем - вы уже посчитали. В общем случае это
sin(Fs/Fnco*i*2Pi),
cos(Fs/Fnco*i*2Pi),
где i=0...(int(Fnco/Fs)-1). Соответственно, чем больше кратность частот, тем длиннее последовательность.

PS отмасштабированное, конечно, под вашу разрядную сетку


Как я уже писал, для частоты сигнала 28МГц и дискретизации 112МГц я получил на выходе NCO значения косинуса-->
0, -32767 0, 32767.
alexadmin
Цитата(Evgeniiy @ Oct 1 2009, 09:18) *
Как я уже писал, для частоты сигнала 28МГц и дискретизации 112МГц я получил на выходе NCO значения косинуса-->
0, -32767 0, 32767.


Вот, это оно и есть - значения из формулы выше, умноженные на 2^15-1 (16-ти разрядные знаковые числа).

Если вы, возьмете, к примеру, частоты 22.4 и 112 МГц (соотношение 1 к 5), то получится набор:

>> t=[0:4];

>> sin(1/5.*t*2*pi)*32767

ans =

0 31163 19260 -19260 -31163

>> cos(1/5.*t*2*pi)*32767

ans =

32767 10126 -26509 -26509 10126
Evgeniiy
Цитата(alexadmin @ Oct 1 2009, 11:36) *
Вот, это оно и есть - значения из формулы выше, умноженные на 2^15-1 (16-ти разрядные знаковые числа).

Если вы, возьмете, к примеру, частоты 22.4 и 112 МГц (соотношение 1 к 5), то получится набор:

>> t=[0:4];

>> sin(1/5.*t*2*pi)*32767

ans =

0 31163 19260 -19260 -31163

>> cos(1/5.*t*2*pi)*32767

ans =

32767 10126 -26509 -26509 10126





Спасибо
Evgeniiy
Цитата(Evgeniiy @ Oct 2 2009, 10:21) *
Спасибо



Кстате в NCO вроде как можно задавать частоты только целые, 22.4 не получится.
alexadmin
Цитата(Evgeniiy @ Oct 2 2009, 11:57) *
Кстате в NCO вроде как можно задавать частоты только целые, 22.4 не получится.


Не совсем так. В NCO можно задавать целые преращения фазы с шагом 1. В итоге разрешающая способность зависит от разрядности аккумулятора NCO и частоты работы. Таким образом, если взять рассмотреный уже пример, то получится следующее:
Для того, чтобы задать частоту 22.4 МГц необходимо установить константу 22.4/112*2^16=13107.2. Округляем до 13107 и получаем результирующую частоту 13107/2^16*112 = 22.399658203125 МГц.
В целом, для частоты 112 МГц и 16-разрядного аккумулятора макимальная ошибка по частоте составит
1/2*1/2^16*112MHz=0.0008544921875 MHz = 855 Hz
Evgeniiy
а если у меня частота меняется допустим от 22 до 28 с некоторым шагом и меняется плавно, тогда как ? нужно постоянно подстраивать NCO?
alexadmin
Цитата(Evgeniiy @ Oct 2 2009, 16:28) *
а если у меня частота меняется допустим от 22 до 28 с некоторым шагом и меняется плавно, тогда как ? нужно постоянно подстраивать NCO?


Естественно, как меняется частота - точно так же нужно управлять и NCO. При этом, повторюсь, ошибка по частоте будет почти всегда присутствовать, но не будет превышать для рассмотренного примера величины 855 Hz. Обычно такая ошибка не имеет практического значения.
Evgeniiy
Цитата(alexadmin @ Oct 2 2009, 18:22) *
Естественно, как меняется частота - точно так же нужно управлять и NCO. При этом, повторюсь, ошибка по частоте будет почти всегда присутствовать, но не будет превышать для рассмотренного примера величины 855 Hz. Обычно такая ошибка не имеет практического значения.


Если у меня ЛЧМ сигнал изменяющийся от 27 до 29 МГц за 300мкc, то мне нужно разбить этот интервал на части например на 100 и каждые 3 мкс изменять константу на фазовом входе? А если у меня входной сигнал не обязательно приходит в фазе с сигналом дискретизации?
Evgeniiy
05.gif
alexadmin
Цитата(Evgeniiy @ Oct 8 2009, 17:10) *
Если у меня ЛЧМ сигнал изменяющийся от 27 до 29 МГц за 300мкc, то мне нужно разбить этот интервал на части например на 100 и каждые 3 мкс изменять константу на фазовом входе? А если у меня входной сигнал не обязательно приходит в фазе с сигналом дискретизации?


Если я правильно помню, что такоtt ЛЧМ, то да. Но намного лучше будет изменят частоту не с таким большим дискретом,а действительно линейно.
То есть берете свой интервал 300 мкс и считаете, сколько на нем периодов тактовой частоты, допустим тех самых 112 МГц.
Получается 33600 тактов. На этом интервале вам надо, чтобы вход вашего управления NCO изменился с 27/112*2^16=15799 до 29/112*2^16=16969.
Таким образом счетчик должен считать со средней скоростью (19969-15799)/33600=0.1241... на каждом такте. Делаете высокоточный счетчик ( с дробной частью) в диапазоне от 0 до (19969-15799) с инкрементом 0.1241... прибавляете к нему начальное смещение 15799 и вперед. Естественно у вас будет накапливаться ошибка в виду конечной точности, но она будет несущественна. При этом счетчик не должен быть циклическим, а должен устанавливаться в начальное состояние по окончании целого периода. Как-то так. Наверное можно придумать и более изящное решение, но это "в лоб" наиболее очевидное.

Про второй ваш вопрос не очень понял, вы имеете в виду приход самих данных в другом тактовом домене или временнные метки управления NCO?
анатолий
Насчет NCO, квадратур и пр.
предлагаю глянуть на
h**p://kanyevsky.kpi.ua/VHDLlabenglish/studentam_VHDLlab.html
там design a simple signal decoder на VHDL
Evgeniiy
Вот еще вопросик такой, условие для выбора частоты среза ФНЧ это то что она должна быть меньше удвоенной частоты сигнала и все? т.е поласа фильтра может быть от 0 до скажем 2,3, или 30 МГц? И после фильтра с частотой дискретизации 112МГц, если например мне нужно выдавай данные с частотой 7МГц я должен складывать 16 чисел?
des00
Цитата(Evgeniiy @ Oct 27 2009, 01:31) *
Вот еще вопросик такой, условие для выбора частоты среза ФНЧ это то что она должна быть меньше удвоенной частоты сигнала и все? т.е поласа фильтра может быть от 0 до скажем 2,3, или 30 МГц? И после фильтра с частотой дискретизации 112МГц, если например мне нужно выдавай данные с частотой 7МГц я должен складывать 16 чисел?


вообще то эти вопросы обсуждаются в DSP ветке форума
Evgeniiy
Цитата(des00 @ Oct 27 2009, 11:53) *
вообще то эти вопросы обсуждаются в DSP ветке форума



я делаю свой проетк на FPGA и обсуждаю соответственно в разделе FPGA
des00
Цитата(Evgeniiy @ Oct 27 2009, 02:20) *
я делаю свой проетк на FPGA и обсуждаю соответственно в разделе FPGA


Не все фпгашники занимаются ДСП и не все дспешники являются фпгашниками smile.gif О модемах там много тем, начиная от теории заканчивая готовыми моделями модемов.
EvgenyV
Тут есть немного теории
http://allfpga.com/fpga/fpga-theory/ofdm-d...ory-scheme.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.