dorian-kv 0 21 октября, 2014 Опубликовано 21 октября, 2014 (изменено) · Жалоба здравствуйте. у меня даже скорее не вопрос, а поиск совета. вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами). длительность бита 10 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются. вот и отсюда возник вопрос - реально ли тут добиться результата - не меняя ПЛИС и тп. а если возможно то, может выбранное мной направление решения тупиковое, и есть более интересные варианты? хотя бы направление поиска решения задать. спасибо Изменено 22 октября, 2014 пользователем Valentin-k Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба здравствуйте. у меня даже скорее не вопрос, а поиск совета. вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами). длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются. вот и отсюда возник вопрос - реально ли тут добиться результата - не меняя ПЛИС и тп. а если возможно то, может выбранное мной направление решения тупиковое, и есть более интересные варианты? хотя бы направление поиска решения задать. спасибо Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба здравствуйте. у меня даже скорее не вопрос, а поиск совета. вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами). длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц Расклад может быть такой. Все фильтры низкочастотные можно обрабатывать одним командоаппаратом. Т.е. считаете, во сколько раз проект в ПЛИС быстрее, чем требуется обработка 1 фильтра. И вот во столько раз можно обработать несколько потоков. Если ВЧ фильтры могут не успеть, то среднечастотные может быть можно успеть обработать по-байтно, а НЧ и вообще побитно... Я об этом написал в главе "многопоточность"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба длительность бита 100 мкс, полоса фильтра взята 90 КГц+30КГц на спад, коэффициенты считались с помощью матлаба, а затем грузились в корку. использую децимацию т.к. иначе не влезают фильтры. частота дискретизации 10 Мгц. частота нижнего канала 450 КГц и далее с шагом 240КГц. частота ПЛИС 100Мгц Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал. Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ. А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dorian-kv 0 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме. Эм, особого алгоритма в моем варианте и нет, просто на каждый канал по FIR-фильтру с децимацией(иначе не влезают). но в симулинке моделировал - на фильтрах с флоатами работало, на фиксированной точке из-за небольшой путаницы с отведением под целую часть и дробную не все работало, точнее местами отдельные фильтры показывали картинку хуже, нежели в железе(честно я не профи в симулинке) Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал. Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ. А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов? я использую FIR с децимацией. в принципе частотное разделение каналов вообще в данный момент у меня есть мысли про использование FFT, а в частности алгоритм Герцеля читаю, но не уверен что будет успевать, да и хватит ли 90 точек Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба ... так вот, когда в линии связи присутствует 4-5 частот - фильтры выделяют их нормально, а вот когда частот становится больше 7 и начинаются проблемы - частоты каналов выделяются раз на несколько посылок, а то и вовсе не выделяются. спасибо Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели. Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?:) Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dorian-kv 0 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Походу, Вы где-то про нормирование забыли. Каналы добавили -> диапазон сигнала увеличился - > АЦП/ЦАП в насыщение/переполнение улетели. Еще интересно: а как Вы в приемнике каждый канал в ноль скидываете?:) Про явный перенос по частоте ничего не видно. Или у Вас только косвенный перенос за счет децимирования работает? Уверены, что правильно все частоты выбрали? о переносе частоты мысли были, но пока не пробовал реализовать. а вот что значит правильно? я старался подбирать частоты чтобы не были кратными, нижнюю частоту выбирал исходя из того чтобы в длину единичной информационной посылки влезло 5-6 периодов. а вот в ноль я не скидываю, как то об этом не задумывался а на счет переполнения не совсем понял, сигнал на входе АЦП по амплитуде не изменяется от того сколько каналов. я рассчитал таблички для периода синусоиды на каждой частоте, но с одинаковым шагом, и на цап подаю суммарный код деленный на кол-во присутствующих каналов. - этот расчет проверен и в матлабе и в экселе и на осциллографе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба я использую FIR с децимацией. в принципе частотное разделение каналов вообще в данный момент у меня есть мысли про использование FFT, а в частности алгоритм Герцеля читаю, но не уверен что будет успевать, да и хватит ли 90 точек Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете? В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники. Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие. В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dorian-kv 0 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете? В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники. Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие. В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы. в данный момент я опрашиваю АЦП с частотой 10 МГц, в корке фильтра дискретизацию задаю 10 МГц, а частоту тактирования 100МГц, временных ограничений не прописывал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dorian-kv 0 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба вообщем попытка реализовать Герцеля не очень удалась, но причину пока найти не могу. расчет, в том числе и целочисленный в экселе дает нужный результат, но тут получается ерунда... 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться