реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> вопрос по выделению нескольких каналов
Valentin-k
сообщение Oct 21 2014, 19:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



здравствуйте. у меня даже скорее не вопрос, а поиск совета.

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).
длительность бита 10 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц

так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются.
вот и отсюда возник вопрос - реально ли тут добиться результата - не меняя ПЛИС и тп. а если возможно то, может выбранное мной направление решения тупиковое, и есть более интересные варианты? хотя бы направление поиска решения задать.

спасибо

Сообщение отредактировал Valentin-k - Oct 22 2014, 16:06
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Oct 22 2014, 05:48
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Valentin-k @ Oct 22 2014, 02:38) *
здравствуйте. у меня даже скорее не вопрос, а поиск совета.

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).
длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц

так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются.
вот и отсюда возник вопрос - реально ли тут добиться результата - не меняя ПЛИС и тп. а если возможно то, может выбранное мной направление решения тупиковое, и есть более интересные варианты? хотя бы направление поиска решения задать.

спасибо

Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 22 2014, 07:04
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Valentin-k @ Oct 21 2014, 23:38) *
здравствуйте. у меня даже скорее не вопрос, а поиск совета.

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).
длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц

Расклад может быть такой. Все фильтры низкочастотные можно обрабатывать одним командоаппаратом. Т.е. считаете, во сколько раз проект в ПЛИС быстрее, чем требуется обработка 1 фильтра. И вот во столько раз можно обработать несколько потоков. Если ВЧ фильтры могут не успеть, то среднечастотные может быть можно успеть обработать по-байтно, а НЧ и вообще побитно...
Я об этом написал в главе "многопоточность"...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Oct 22 2014, 10:41
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Valentin-k @ Oct 21 2014, 23:38) *
длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц

Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал.
Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ.
А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов?
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Oct 22 2014, 15:22
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



Цитата(Bad0512 @ Oct 22 2014, 09:48) *
Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме.


Эм, особого алгоритма в моем варианте и нет, просто на каждый канал по FIR-фильтру с децимацией(иначе не влезают). но в симулинке моделировал - на фильтрах с флоатами работало, на фиксированной точке из-за небольшой путаницы с отведением под целую часть и дробную не все работало, точнее местами отдельные фильтры показывали картинку хуже, нежели в железе(честно я не профи в симулинке)

Цитата(bogaev_roman @ Oct 22 2014, 14:41) *
Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал.
Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ.
А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов?


я использую FIR с децимацией.
в принципе частотное разделение каналов

вообще в данный момент у меня есть мысли про использование FFT, а в частности алгоритм Герцеля читаю, но не уверен что будет успевать, да и хватит ли 90 точек
Go to the top of the page
 
+Quote Post
Самурай
сообщение Oct 22 2014, 15:33
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(Valentin-k @ Oct 21 2014, 23:38) *
...
так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются.

спасибо


Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели.

Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?sm.gif Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали?
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Oct 22 2014, 16:00
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



Цитата(Самурай @ Oct 22 2014, 18:33) *
Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели.

Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?sm.gif Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали?


о переносе частоты мысли были, но пока не пробовал реализовать. а вот что значит правильно? я старался подбирать частоты чтобы не были кратными, нижнюю частоту выбирал исходя из того чтобы в длину единичной информационной посылки влезло 5-6 периодов. а вот в ноль я не скидываю, как то об этом не задумывался
а на счет переполнения не совсем понял, сигнал на входе АЦП по амплитуде не изменяется от того сколько каналов. я рассчитал таблички для периода синусоиды на каждой частоте, но с одинаковым шагом, и на цап подаю суммарный код деленный на кол-во присутствующих каналов. - этот расчет проверен и в матлабе и в экселе и на осциллографе.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Oct 22 2014, 17:32
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Valentin-k @ Oct 22 2014, 19:22) *
я использую FIR с децимацией.
в принципе частотное разделение каналов

вообще в данный момент у меня есть мысли про использование FFT, а в частности алгоритм Герцеля читаю, но не уверен что будет успевать, да и хватит ли 90 точек


Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете?
В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники.
Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие.
В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы.
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Oct 22 2014, 18:18
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



Цитата(bogaev_roman @ Oct 22 2014, 20:32) *
Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете?
В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники.
Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие.
В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы.


в данный момент я опрашиваю АЦП с частотой 10 МГц, в корке фильтра дискретизацию задаю 10 МГц, а частоту тактирования 100МГц, временных ограничений не прописывал.
Go to the top of the page
 
+Quote Post
Valentin-k
сообщение Nov 10 2014, 15:51
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



вообщем попытка реализовать Герцеля не очень удалась, но причину пока найти не могу.
расчет, в том числе и целочисленный в экселе дает нужный результат, но тут получается ерунда...

CODE
entity gertsel is
Port ( reset : in STD_LOGIC;
clk : in STD_LOGIC;
x : in STD_LOGIC_VECTOR (9 downto 0);
en : in STD_LOGIC;
y : out STD_LOGIC_VECTOR (9 downto 0));
end gertsel;

architecture arc_gertsel of gertsel is
constant coeff0:signed(10 downto 0):=to_signed(485,11);--integer range 0 to 1024;
signal n: integer range 0 to 35;
signal q0:signed(10 downto 0);--integer range 0 to 2048;
signal q1:signed(10 downto 0);--integer range 0 to 2048;
signal q2:signed(10 downto 0);--integer range 0 to 2048;
signal input:signed(9 downto 0);--integer range 0 to 1024;
signal output:signed(9 downto 0);--integer range 0 to 1024;
signal mul1: signed(26 downto 0);
signal mul2: signed(31 downto 0);
signal mul3: signed(31 downto 0);
signal mul4: signed(42 downto 0);
signal sum1: signed(42 downto 0);
begin
process(clk)
begin
if(rising_edge(clk)) then
if(reset='1') then
n<=0;
--q0<=0;
--q1<=0;
--q2<=0;
--coeff0<=879;
--output<=0;
q0<=(others=>'0');
q1<=(others=>'0');
q2<=(others=>'0');
mul1<=(others=>'0');
mul2<=(others=>'0');
mul3<=(others=>'0');
mul4<=(others=>'0');
sum1<=(others=>'0');
input<=(others=>'0');
output<=(others=>'0');
else
--********************************
if(en='1' and clk='1') then
input<=signed(x);--to_INTEGER(unsigned(x(9 downto 0)));
--input<=input-to_signed(511,10);
n<=n+1;
q2<=q1;
q1<=q0;
end if;
mul1<=(coeff0*q1)/1024;
q0<=mul1(9 downto 0)+input-511-q2;
if(n=36 ) then
n<=n+1;
mul2<=q1*q1/1024;
mul3<=q2*q2/1024;
mul4<=coeff0*q1*q1/1024;
sum1<=(mul2+mul3-mul4);

output(9 downto 0)<=sum1(9 downto 0);
y<=std_logic_vector(output);
end if;
if(n=37) then
q1<=(others=>'0');
q2<=(others=>'0');
end if;

--********************************
end if;
end if;
end process;

end arc_gertsel;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016