|
|
  |
вопрос по выделению нескольких каналов |
|
|
|
Oct 21 2014, 19:38
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Oct 22 2014, 05:48
|
Знающий
   
Группа: Свой
Сообщений: 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 и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме.
|
|
|
|
|
Oct 22 2014, 07:04
|
Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Oct 22 2014, 10:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(Valentin-k @ Oct 21 2014, 23:38)  длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал. Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ. А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов?
|
|
|
|
|
Oct 22 2014, 15:22
|
Участник

Группа: Участник
Сообщений: 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 точек
|
|
|
|
|
Oct 22 2014, 15:33
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(Valentin-k @ Oct 21 2014, 23:38)  ... так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются.
спасибо Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели. Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?  Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали?
|
|
|
|
|
Oct 22 2014, 16:00
|
Участник

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

|
Цитата(Самурай @ Oct 22 2014, 18:33)  Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели. Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?  Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали? о переносе частоты мысли были, но пока не пробовал реализовать. а вот что значит правильно? я старался подбирать частоты чтобы не были кратными, нижнюю частоту выбирал исходя из того чтобы в длину единичной информационной посылки влезло 5-6 периодов. а вот в ноль я не скидываю, как то об этом не задумывался а на счет переполнения не совсем понял, сигнал на входе АЦП по амплитуде не изменяется от того сколько каналов. я рассчитал таблички для периода синусоиды на каждой частоте, но с одинаковым шагом, и на цап подаю суммарный код деленный на кол-во присутствующих каналов. - этот расчет проверен и в матлабе и в экселе и на осциллографе.
|
|
|
|
|
Oct 22 2014, 17:32
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

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

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

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

Группа: Участник
Сообщений: 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;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|