Перейти к содержанию
    

вопрос по выделению нескольких каналов

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

 

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).

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

 

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

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

 

спасибо

Изменено пользователем Valentin-k

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).

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

 

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

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

 

спасибо

Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

вообщем есть два спартана 6xls9, цап и ацп. основная задумка сделать линию с 8-10 каналами на разных частотах(это основная мысль, есть запасной вариант с двумя частотами).

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

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

Я об этом написал в главе "многопоточность"...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал.

Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ.

А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы бы сначала на функциональном уровне свои идеи отладили (Матлаб,Симулинк, далее RTL и функциональная отладка в симуляторе) прежде чем всё это реализовывать в железе. Не исключено что ошибка у вас в алгоритме.

 

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

 

Вообще лучше модель для начала сделать и все отладить, как Bad0512 советовал.

Вы децимацию как делаете - просто частоту понижаете и все? Если да, то каким образом делаете пересинхронизацию? Обычно CIC - фильтры ставят для этих целей, а далее восстанавливающий ФНЧ.

А так информации вообще мало и лично я вообще ничего не понял. Вы хотите сделать частотное разделение каналов?

 

я использую FIR с децимацией.

в принципе частотное разделение каналов

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

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

 

спасибо

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

о переносе частоты мысли были, но пока не пробовал реализовать. а вот что значит правильно? я старался подбирать частоты чтобы не были кратными, нижнюю частоту выбирал исходя из того чтобы в длину единичной информационной посылки влезло 5-6 периодов. а вот в ноль я не скидываю, как то об этом не задумывался

а на счет переполнения не совсем понял, сигнал на входе АЦП по амплитуде не изменяется от того сколько каналов. я рассчитал таблички для периода синусоиды на каждой частоте, но с одинаковым шагом, и на цап подаю суммарный код деленный на кол-во присутствующих каналов. - этот расчет проверен и в матлабе и в экселе и на осциллографе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я использую FIR с децимацией.

в принципе частотное разделение каналов

 

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

 

Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете?

В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники.

Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие.

В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз - с какой частотой у Вас данные собираются после АЦП, на какой частоте работает фльтр, фильтр имеет собственную частоту или используется чип енэйбл (ce)? Временные ограничения прописываете?

В зависимости от ответов ситуаций может быть масса, нопример, данные после АЦП идут на частоте 100МГЦ и Вы берете каждый десятый отсчет и напрямую загоняете в фильтр, не прописывая ограничений - в этом случае будет сразу три ошибки - нет пересинхронизации при переходе от 100 к 10МГц и возможны гонки сигналов, нет ограничений и тоже не гарантируется правильная работа в принципе, беря каждый 10 отсчет будете хватать мусор и побочные гармоники.

Насчет БПФ - стоит вставить для того, чтобы посмотреть спектр входного сигнала (если другого способа нет посмотреть спектр после выхода АЦП), используйте готовую корку для начала и грамотно возьмите кол-во точек. В реальности БПФ - дорогое удовольствие.

В конкретно Вашем случае скорее всего подойдет классическая схема - на каждый канал ставить NCO на входе, потом цепочка из гребенчатых фильтров и ФНЧ на срез двойной частоты для переноса в ноль ну и ФАПЧ с обратной связью, но это уже надо писать в раздел по ЦОС, там другие спецы.

 

в данный момент я опрашиваю АЦП с частотой 10 МГц, в корке фильтра дискретизацию задаю 10 МГц, а частоту тактирования 100МГц, временных ограничений не прописывал.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...