Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Multirate decimation filter
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Vitaliy_ARM
Доброе время суток.

Возникла необходимость сделать прореживающий фильтр с коэффициентами прореживания R = 512, 1024, 2048, 4096 на базе CIC + компенсирующий FIR. У альтеры в апноуте (AN 455) описан алгоритм расчета коэффициентов FIR-а для компенсации "односкоростного" CIC. Вопрос, как это применить для многоскоростного фильтра? Правильно ли будет разбить CIC на две части, первая допустим с коэффициентами прореживания 4,8,16,32, вторая с прореживанием на 128, и рассчитать компенсирующий FIR для второго CIC?
Михаил_K
Цитата(Vitaliy_ARM @ Dec 2 2009, 07:40) *
Возникла необходимость сделать прореживающий фильтр с коэффициентами прореживания R = 512, 1024, 2048, 4096 на базе CIC


А вам необходимы все коэффициенты одновременно (т.е. будете 4 канала обрабатывать), или они будут переключаться во время работы? Если второй вариант - нет смысла разбивать CIC на части.
Vitaliy_ARM
Цитата(Михаил_K @ Dec 2 2009, 09:58) *
А вам необходимы все коэффициенты одновременно (т.е. будете 4 канала обрабатывать), или они будут переключаться во время работы? Если второй вариант - нет смысла разбивать CIC на части.


Второй вариант. Т.е. если я рассчитаю для CIC с R = 512 коэффициенты компенсирующего FIR фильтра, то и на всех остальных R это будет тот же фильтр?
des00
Цитата(Vitaliy_ARM @ Dec 2 2009, 01:04) *
Второй вариант. Т.е. если я рассчитаю для CIC с R = 512 коэффициенты компенсирующего FIR фильтра, то и на всех остальных R это будет тот же фильтр?


нет, там фильтр будет другой, но в интересующей вас полосе разность частотных характеристик будет ~0.005Дб если вас это устроит то этим можно пренебречь %)

ЗЫ. Кстати считается такой фильтр элементарно в любом каде (Matlab/Matcad/Mapple) зная АЧХ цика %)
ЗЗЫ. Думаю очевидно что фильтр должен будет стоять ДО цика.
Vitaliy_ARM
Цитата(des00 @ Dec 2 2009, 11:47) *
нет, там фильтр будет другой, но в интересующей вас полосе разность частотных характеристик будет ~0.005Дб если вас это устроит то этим можно пренебречь %)

Меня интересует максимальная полоса на выходе, т.е. близкая к Fs/2. Т.е. может имеет смысл разбить цик на две части? Чтобы влияние первого ачх было как можно меньше

Цитата(des00 @ Dec 2 2009, 11:47) *
ЗЫ. Кстати считается такой фильтр элементарно в любом каде (Matlab/Matcad/Mapple) зная АЧХ цика %)

Я не силен пока в цифровой обработке сигналов, может подскажите ссылку на статью или информацию, что с чем связано и как это делать в матлабе?
Цитата(des00 @ Dec 2 2009, 11:47) *
ЗЗЫ. Думаю очевидно что фильтр должен будет стоять ДО цика.

Почему? Фирмы типа альтеры рекомендуют в дециматорах ставить после, в интерполяторах до. Вы имеете ввиду потерю динамического диапазона на краях АЧХ Цика?
serebr
Цитата(des00 @ Dec 2 2009, 14:47) *
ЗЗЫ. Думаю очевидно что фильтр должен будет стоять ДО цика.

Если фильтр децимальный, то FIR ставят после CIC и прореживания для сокращения количества вычислительных операций.
des00
Цитата(serebr @ Dec 2 2009, 04:48) *
Если фильтр децимальный, то FIR ставят после CIC и прореживания для сокращения количества вычислительных операций.


сыплю голову пеплом, писал ответ о дециматоре, а написал про интерполятор %)

Цитата(Vitaliy_ARM @ Dec 2 2009, 03:15) *
Меня интересует максимальная полоса на выходе, т.е. близкая к Fs/2. Т.е. может имеет смысл разбить цик на две части? Чтобы влияние первого ачх было как можно меньше


Но полоса то вам нужна после децимации верно ? Теперь оцените на сколько вы делаете децимацию и какую часть вашей полосы портит CIC. Сложно делать заявления без опоры на цифры(считать лень), но по опыту начиная с коэфф. децимации 8 АЧХ различаются не более чем на 0.1Дб для 6ти каскадов CIC. Незнаю ваших требований к CIC фильтру, но если входная разрядность ~16, число каскадов больше 3-х, и делаете вы это на фпга то лучше вам НЕ делать фильтр хогенауэра. Для проца смотреть надо %)

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


В атаче расчет RC фильтра с коррекцией АЧХ CIC фильтра, 13 маткад. Все комментарии на русском. Ничего сложного %)
Vitaliy_ARM
Цитата(des00 @ Dec 2 2009, 14:29) *
Но полоса то вам нужна после децимации верно ? Теперь оцените на сколько вы делаете децимацию и какую часть вашей полосы портит CIC. Сложно делать заявления без опоры на цифры(считать лень), но по опыту начиная с коэфф. децимации 8 АЧХ различаются не более чем на 0.1Дб для 6ти каскадов CIC. Незнаю ваших требований к CIC фильтру, но если входная разрядность ~16, число каскадов больше 3-х, и делаете вы это на фпга то лучше вам НЕ делать фильтр хогенауэра. Для проца смотреть надо %)

Разрядность 18бит, исполнение в FPGA. Полоса нужна после децимации, близкая к Fs/2, где Fs - частота дискретизации после прореживания. Неравномерность АЧХ должна быть как можно меньше, 0.05% устроит. Число каскадов цика можно выбирать от 3 до 8, чем меньше - тем лучше. Фильтр Хогенауэра лучший вариант при таких коэффициентах прореживания, важно, что занимает мало места.
Вопрос тот же. Как правильно построить фильтр Хогенауэра с переменным коэффициентом прореживания?
Цитата(des00 @ Dec 2 2009, 14:29) *
В атаче расчет RC фильтра с коррекцией АЧХ CIC фильтра, 13 маткад. Все комментарии на русском. Ничего сложного %)

Спасибо за информацию.
des00
Цитата(Vitaliy_ARM @ Dec 2 2009, 05:41) *
Фильтр Хогенауэра лучший вариант при таких коэффициентах прореживания, важно, что занимает мало места.


5 каскадов CIC, 18 бит на входе, R = 4096, M = 1, хогенауэр потребует первого интегратора на 78 бит (!!!), 3 каскада 54 бита. И это вы называете лучшим вариантом ? smile.gif Почитайте теорию хогенауэра для начала, перед тем как делать такие заявления %)

Цитата
Вопрос тот же. Как правильно построить фильтр Хогенауэра с переменным коэффициентом прореживания?


рассчитайте отдельные фильтры на все коэффициенты децимации, тогда вам станет ясно как сделать перестраиваемый %) Ответ там лежит на поверхности
serebr
Цитата(Vitaliy_ARM @ Dec 2 2009, 17:41) *
Разрядность 18бит, исполнение в FPGA. Полоса нужна после децимации, близкая к Fs/2, где Fs - частота дискретизации после прореживания. Неравномерность АЧХ должна быть как можно меньше, 0.05% устроит. Число каскадов цика можно выбирать от 3 до 8, чем меньше - тем лучше. Фильтр Хогенауэра лучший вариант при таких коэффициентах прореживания, важно, что занимает мало места.
Сказать, что нужна полоса после прореживания, близкая к Fs/2, это значит - ничего не сказать. Надо знать, насколько именно близко? На 1% от Fs/2 или на 0.01%? От этого порядок требуемого фильтра будет меняться в сотни раз, если есть требование подавления "зеркальных" частот при децимации.
В качестве аналогии могу привести такой пример: насколько сильно будут разгоняться протоны в Большом адронном коллайдере? Ответ - близко к скорости света. Так ведь это и ежу понятно, что близко, вопрос в том - насколько близко? На 1% от c или на 0.01%? Или ещё ближе? smile.gif Энергия протонов при этом тоже будет меняться на порядки.
Vitaliy_ARM
Цитата(serebr @ Dec 2 2009, 15:18) *
Сказать, что нужна полоса после прореживания, близкая к Fs/2, это значит - ничего не сказать. Надо знать, насколько именно близко? На 1% от Fs/2 или на 0.01%? От этого порядок требуемого фильтра будет меняться в сотни раз, если есть требование подавления "зеркальных" частот при децимации.
В качестве аналогии могу привести такой пример: насколько сильно будут разгоняться протоны в Большом адронном коллайдере? Ответ - близко к скорости света. Так ведь это и ежу понятно, что близко, вопрос в том - насколько близко? На 1% от c или на 0.01%? Или ещё ближе? smile.gif Энергия протонов при этом тоже будет меняться на порядки.


Уточню. На частоте Найквиста должно быть подавление не хуже 70дБ. Порядок FIR = 110.
des00
Цитата(Vitaliy_ARM @ Dec 2 2009, 07:35) *
Уточню. На частоте Найквиста должно быть подавление не хуже 70дБ. Порядок FIR = 110.


маловато будет информации smile.gif
MKS
В догонку, загляните еще в эту тему. Там решается похожая задача с примером в матлабе.
Успехов.
des00
подумал на досуге о вашей проблеме.

Варианта с нормальной производительностью/ресурсом вижу два
1. 5 каскадов циков с 30/34 бита арифметикой, правда придеться "поесть" памяти.
2. Каскадная децимация, сначала на 128 + FIR, потом уже хогенауэр. Арифметика будет "всего" 43 битная.

Что из этого будет в итоге "весить" меньше решать вам %)

ЗЫ. еще немаловажный вопрос время выхода фильтра на режим при перестройке полосы, помните что интегральные части циков надо сбрасывать.
Vitaliy_ARM
Цитата(MKS @ Dec 2 2009, 19:27) *
В догонку, загляните еще в эту тему. Там решается похожая задача с примером в матлабе.
Успехов.


К сожалению пока нет матлаба. Обязательно гляну при возможности.

Цитата(des00 @ Dec 3 2009, 07:04) *
подумал на досуге о вашей проблеме.

Варианта с нормальной производительностью/ресурсом вижу два
1. 5 каскадов циков с 30/34 бита арифметикой, правда придеться "поесть" памяти.
2. Каскадная децимация, сначала на 128 + FIR, потом уже хогенауэр. Арифметика будет "всего" 43 битная.

Что из этого будет в итоге "весить" меньше решать вам %)

ЗЫ. еще немаловажный вопрос время выхода фильтра на режим при перестройке полосы, помните что интегральные части циков надо сбрасывать.

Тогда вопрос, каким способом делать переменное прореживание?
Делаем прореживание в CICе и при этом используем один FIR, пренебрегая изменением АЧХ CICа?

Почему нельзя пользоваться усечением разрядности CIC?
p.s. приношу извинения за ламерские вопросы, не могу найти именно ответ на вопрос - как правильно сделать переменное прореживание в фильтре Хогенауэра.
des00
Цитата(Vitaliy_ARM @ Dec 2 2009, 23:11) *
Тогда вопрос, каким способом делать переменное прореживание?
Делаем прореживание в CICе и при этом используем один FIR, пренебрегая изменением АЧХ CICа?


как я понимаю вопрос у вас про каскадную децимацию ? Если да то считать надо насколько вы портите нужную вам полосу. Без цифр сложно судить.

Цитата
Почему нельзя пользоваться усечением разрядности CIC?


Если вы про фильтр хогенауэра, как уже сказал читайте теорию у первоисточников

"An Economical Class of Digital Filters for Decimation and Interpolation" EUGENE В. HOGENAUER -> Register Growth

Цитата
Not only is Bmax the MSB at the filter output, but it is also
the MSB for all stages of the filter. This can be shown by
applying modulo arithmetic to the filter output function. For
two’s complement arithmetic, the modulo operation can be
implemented by simply eliminating bit positions above Bmax .


Но если очень хочется то можно, но с умом, но это вам не сильно поможет. Все равно первый интегратор должен быть точным по разрядности. В других типах CIC фильтров усекать между ступенями фильтра можно.

Цитата
не могу найти именно ответ на вопрос - как правильно сделать переменное прореживание в фильтре Хогенауэра.


что сложного то ? логика здравого смысла + сделайте 4 разных цик фильтра и сравните. Перестройка частоты вообще делается элементарно, этот блок на виду у всех. Остается только сделать перестройку усиления фильтра, т.к. у циков он сильно зависит от коэфф. децимации.
Vitaliy_ARM
Сейчас окончательно определился с т.з.
У меня 80Мгц ацп, надо принимать сигналы с полосой 500кГц в диапазоне частот 1-30МГц.
При этом полоса должна переключаться: 500кГц, 250кГц, 125кГц, 62,5кГц, чтобы уменьшить трафик.
Скажите чего еще не хватает?
Цитата(des00 @ Dec 3 2009, 08:39) *
что сложного то ? логика здравого смысла + сделайте 4 разных цик фильтра и сравните. Перестройка частоты вообще делается элементарно, этот блок на виду у всех. Остается только сделать перестройку усиления фильтра, т.к. у циков он сильно зависит от коэфф. децимации.

Т.е. вы предлагаете сделать несколько циков и включать только нужное количество для децимации. При этом надо ставить еще умножители для коррекции усиления?

У меня родилась еще одна мысль, что если сделать один переменный цик + постоянный FIR. Только второму коэффициенты подгружать из вне. Получатеся, что не надо никаких умножителей дополнительных. Скорость переключаться будет один раз за сессию - очень редко. В этом случае нужно рассчитать 4 компенсирующих FIR. Что скажете?
serebr
Цитата(Vitaliy_ARM @ Dec 7 2009, 21:24) *
Сейчас окончательно определился с т.з.
У меня 80Мгц ацп, надо принимать сигналы с полосой 500кГц в диапазоне частот 1-30МГц.
При этом полоса должна переключаться: 500кГц, 250кГц, 125кГц, 62,5кГц, чтобы уменьшить трафик.
Скажите чего еще не хватает?

Постановка задачи кардинально отличается от первоначальной формулировки. Скорее всего потребуется переносить частоту 1-30 МГц в область низких частот и там уже заниматься фильтрацией.

Не хватает ещё требований к полосовому фильтру: диапазон пропускаемых частот, неравномерность АЧХ в нём, диапазон задерживаемых частот, коэффициент подавления в нём.
dmitry-tomsk
Цитата(Vitaliy_ARM @ Dec 3 2009, 09:11) *
К сожалению пока нет матлаба. Обязательно гляну при возможности.


Тогда вопрос, каким способом делать переменное прореживание?
Делаем прореживание в CICе и при этом используем один FIR, пренебрегая изменением АЧХ CICа?

Почему нельзя пользоваться усечением разрядности CIC?
p.s. приношу извинения за ламерские вопросы, не могу найти именно ответ на вопрос - как правильно сделать переменное прореживание в фильтре Хогенауэра.

А почему именно CIC, да потом ещё париться с коррекцией, вытягивать высшие гармоники, загубленные CIC, из шумов квантования? Не проще ли сразу ставить FIR, для таких коэффициентов прореживания два каскада вполне хватит, если совсем прямоугольную АЧХ надо, то три. Считать коэффициенты можно в matlab для ваших вариантов и делать несколько банков коэффициентов для разных коэффициентов прореживания. Если ПЛИС с DSP слайсами, то такие фильтры требуют очень мало ресурсов и работают на 450-550 МГЦ спокойно.
des00
Цитата(Vitaliy_ARM @ Dec 7 2009, 09:24) *
Сейчас окончательно определился с т.з.
У меня 80Мгц ацп, надо принимать сигналы с полосой 500кГц в диапазоне частот 1-30МГц.
При этом полоса должна переключаться: 500кГц, 250кГц, 125кГц, 62,5кГц, чтобы уменьшить трафик.
Скажите чего еще не хватает?


вы будет сносить в 0?

Цитата
Т.е. вы предлагаете сделать несколько циков и включать только нужное количество для децимации. При этом надо ставить еще умножители для коррекции усиления?


Я предлагаю вам сделать в матлабе/маткаде/верилоге нужные вам CIC фильтры и посмотреть что у них общего, а что у них специфическое. Но если исследовательская жилка в вас умерла то вот ответ : нужен перестраиваемый дециматор в середине фильтра (тот самый что везде рисуется со стрелкой вниз) + корректор усиления т.к децимирующий фильтр хогенауэра имеет усиление G = (R*M)^N.

Цитата
У меня родилась еще одна мысль, что если сделать один переменный цик + постоянный FIR. Только второму коэффициенты подгружать из вне. Получатеся, что не надо никаких умножителей дополнительных. Скорость переключаться будет один раз за сессию - очень редко. В этом случае нужно рассчитать 4 компенсирующих FIR. Что скажете?


Какой тогда смысл вообще использовать CIC ?

Цитата(dmitry-tomsk @ Dec 7 2009, 10:26) *
А почему именно CIC, да потом ещё париться с коррекцией, вытягивать высшие гармоники, загубленные CIC, из шумов квантования? Не проще ли сразу ставить FIR, для таких коэффициентов прореживания два каскада вполне хватит, если совсем прямоугольную АЧХ надо, то три. Считать коэффициенты можно в matlab для ваших вариантов и делать несколько банков коэффициентов для разных коэффициентов прореживания. Если ПЛИС с DSP слайсами, то такие фильтры требуют очень мало ресурсов и работают на 450-550 МГЦ спокойно.


Цик очень простой и очень просто перестраивается по частоте. Хотя в данном случае, при таком диком отношении тактовой к символьной проще сделать все с помошью фиров на маках.

2 Vitaliy_ARM

Кстати а основная селекция у вас где будет делаться? просто есть красивый вариант поставить сначала переменный CIC, а потом уже фиксированный FIR на 128. В этом случае CIC можно вообще не корректировать. Подставил ваши параметры в выложенный маткадовский файл, на частоте найквиста после децимации такой цик будет вам заваливать полосу, в худшем случае на дикие 0.00065дБ для 3-х каскадов и 0.00102 дБ для 5ти каскадов %)
hobgoblin
В догонку, на всякий случай, посмотрите вот этот файл:
http://www.mathworks.com/matlabcentral/fx_...1/firdesign.pdf

Там в конце пример расчета в Matlab фильтров для кристалла GC4016. Задача похожа на вашу, только полоса одна - 80 кГц и частота дискретизации в районе 70 Мегов. Может пригодиться.
Vitaliy_ARM
Цитата(serebr @ Dec 7 2009, 18:46) *
Постановка задачи кардинально отличается от первоначальной формулировки. Скорее всего потребуется переносить частоту 1-30 МГц в область низких частот и там уже заниматься фильтрацией.

Не хватает ещё требований к полосовому фильтру: диапазон пропускаемых частот, неравномерность АЧХ в нём, диапазон задерживаемых частот, коэффициент подавления в нём.

Да, надо сделать квадратурный приемник пачки радиоимпульсов (АМ) (в дальнейшем предполагается менять демодуляторы). Перенос на ПЧ. Остальное будет в DSP процессоре. На входе стоит NCO+аппаратные умножители, после них надо сделать прореживающий фильтр с перечислинными выше полосами, неравномерность ачх в полосе 0-450кГц не должна превышать 0,1%, подавление на частоте 500кГц и далее должно быть не хуже 80дБ. Под все остальные фильтры требования изменяются пропорционально полосе пропускания. На сколько мне известно, обычный фир с полосами пропускания меньшими 50..100 относительно частоты найквиста, потребляют больше ресурсов, чем CIC+FIR. Задача проредить полосу в 80/2 = 40МГц в полосу 0,5МГц. Нелинейность АЧХ не критична. Желательно залезть в 500..1000 Альтеровских ячеек с двумя фильтрами.

Цитата(des00 @ Dec 7 2009, 19:52) *
Кстати а основная селекция у вас где будет делаться? просто есть красивый вариант поставить сначала переменный CIC, а потом уже фиксированный FIR на 128. В этом случае CIC можно вообще не корректировать. Подставил ваши параметры в выложенный маткадовский файл, на частоте найквиста после децимации такой цик будет вам заваливать полосу, в худшем случае на дикие 0.00065дБ для 3-х каскадов и 0.00102 дБ для 5ти каскадов %)


Полученные IQ каналы будут подаваться на DSP процессор (причем это может подаваться как по проводному интерфейсу так и беспроводному, в общем имею то что имею, тз поставлено такое unsure.gif ), в котором так же будет стоять квадратурный смеситель и FIR с переменной полосой пропускания (основная селекция на нем), после этого демодулятор сигналов.

Забыл упомянуть. Фаза должна быть линейна.
анатолий
Посмотрите вот сюда http://kanyevsky.kpi.ua/Studentam/labexercise%203.pdf
Там есть Bireciprocal WDF - 2 таких каскада подряд дают ваши -80 дб,
а неравномерность в полосе пропускания - минимальная.
И умножителей не нужно.
des00
Цитата(анатолий @ Dec 8 2009, 11:54) *
Посмотрите вот сюда http://kanyevsky.kpi.ua/Studentam/labexercise%203.pdf
Там есть Bireciprocal WDF - 2 таких каскада подряд дают ваши -80 дб,
а неравномерность в полосе пропускания - минимальная.
И умножителей не нужно.


лаба конечно интересная, но
Цитата
A single filter stage can provide the downsamphng to R=2. To achieve the dovvnsampling to 4,8,16 etc. 2,3,4,... such downsamphng stages are connected in a chain.


явно двумя каскадами не обойдется + характеристики этого фильтра по полосе автора не должны устроить

2 Vitaliy_ARM

Цитата
Задача проредить полосу в 80/2 = 40МГц в полосу 0,5МГц.


Как я понял идет снос в 0 и задача изменить частоту дискретизации с 80МГц до 0.5/0.25/0.125/0.0625МГц, всего в 160/320/640/1280 раз. Я бы рассмотрел вариант 4 каскада CIC на 8/16/32/64 + FIR на 20. В этом случае подавление CIC ом зеркал будет не хуже 80 Дб, но влияние на сам сигнал будет ~0.12Дб. Но коррекцию можно перенести на стоящий дальше фир, который должен добить нужное вам затухание уже по основному каналу.

Цитата
Желательно залезть в 500..1000 Альтеровских ячеек с двумя фильтрами.


500 ячеек на канал, сильно сомневаюсь. Один CIC вылезет вам где то под 400/500 плиток + FIR, скорее всего не менее 64го порядка, раздует где то под ~5000 (это если на логике), или ~3000 (это на умножителях) или ~2000 (это на маках).

Цитата
Забыл упомянуть. Фаза должна быть линейна.


а какая еще она будет то у FIR (CIC это тот же FIR) %)


ЗЫ. я могу сильно ошибаться в расчетах ибо в ДСП еще ламер %)

PPS. так и есть ошибся в 2 раза с коэффициентом децимации, фир не на 20, а на 10ть надо %)
des00
Цитата(des00 @ Dec 8 2009, 22:33) *
500 ячеек на канал, сильно сомневаюсь. Один CIC вылезет вам где то под 400/500 плиток + FIR, скорее всего не менее 64го порядка, раздует где то под ~5000 (это если на логике), или ~3000 (это на умножителях) или ~2000 (это на маках).


кстати как вариант посмотрите еще реализацию на полифазных фирах в принципе можно ужаться по ресурсу, но умножители в любом случае потребуются.
dmitry-tomsk
Цитата(des00 @ Dec 9 2009, 20:24) *
кстати как вариант посмотрите еще реализацию на полифазных фирах в принципе можно ужаться по ресурсу, но умножители в любом случае потребуются.

А зачем, собственно, они нужны? Неужели нельзя подкопить данные в буфере и переставлять указатель в буфере не на 1, а на M (где M коэффициент прореживания). Для macc архитектуры буфер данных всячески есть, если прореживание в первом каскаде хотя бы в 16 раз (а можно и много больше, но неравномерность АЧХ возрастёт), то частота данных на выходе 80/16 = 5 МГц, для умножителя на 200 МГц (если какой-нибудь слабенький циклон) получаем порядок фильтра 180/5 = 36 с запасом на нестабильность тактовой. Если сделать симметричный фильтр, то уже 72, а это неплохо для первого каскада, 80 дБ подавление вполне можно сделать. Правда, не знаю как циклон справится с умножением и аккумуляцией на 24-25 разряда на 200 МГц, там нет DSP слайсов, spartan 3a или 6 влёгкую такую задачу решит.
des00
Цитата(dmitry-tomsk @ Dec 9 2009, 12:08) *
Неужели нельзя подкопить данные в буфере и переставлять указатель в буфере не на 1, а на M (где M коэффициент прореживания).


вам конечно виднее, но что то мне подсказывает что где то здесь есть подвох.

Цитата
Правда, не знаю как циклон справится с умножением и аккумуляцией на 24-25 разряда на 200 МГц, там нет DSP слайсов, spartan 3a или 6 влёгкую такую задачу решит.


Любите вы высокие частоты аж жуть %) правда оценка в 25 разрядов слишком уж оптимистична. Со смесителя пойдет около 14-18 ти битов, с выхода цика еще будет накинуто битов 6. Итого на фир прилетит ~24х бита и сам он накинет еще бит ~14 итого аккумы нужны будут бит на 38 %) Но автору виднее %)
dmitry-tomsk
Цитата(des00 @ Dec 11 2009, 07:49) *
вам конечно виднее, но что то мне подсказывает что где то здесь есть подвох.



Любите вы высокие частоты аж жуть %) правда оценка в 25 разрядов слишком уж оптимистична. Со смесителя пойдет около 14-18 ти битов, с выхода цика еще будет накинуто битов 6. Итого на фир прилетит ~24х бита и сам он накинет еще бит ~14 итого аккумы нужны будут бит на 38 %) Но автору виднее %)

А кто сказал, что нужен CIC? Я имею ввиду децимацию только на FIR, у меня подобную задачу решают два каскада FIR, дают 90 дБ в полосе запирания и 0.001 дБ неравномерность в полосе пропускания. Работают на частоте 400 МГц на virtex.
des00
Цитата(dmitry-tomsk @ Dec 11 2009, 01:02) *
Я имею ввиду децимацию только на FIR, у меня подобную задачу решают два каскада FIR, дают 90 дБ в полосе запирания и 0.001 дБ неравномерность в полосе пропускания. Работают на частоте 400 МГц на virtex.


огласите пожалуйста параметры символьных частот вашего фильтра? Символьная/тактовая на входе, символьная/тактовая на выходе ?
dmitry-tomsk
Цитата(des00 @ Dec 11 2009, 11:38) *
огласите пожалуйста параметры символьных частот вашего фильтра? Символьная/тактовая на входе, символьная/тактовая на выходе ?

параметры почти такие же, как и у автора топика
des00
Цитата(dmitry-tomsk @ Dec 11 2009, 02:07) *
параметры почти такие же, как и у автора топика

т.е. нарезка АЦП на 80МГц, интерполяция в 40 раз. Если я правильно понял вашу фразу
Цитата
Неужели нельзя подкопить данные в буфере и переставлять указатель в буфере не на 1, а на M (где M коэффициент прореживания).
вы непрерывно пишете в фильтр на 80МГц, потом берете каждый M ый записанный отсчет и считаете выход фильтра так ? На выходе фильтра у вас уже тактовая 1МГц.
dmitry-tomsk
Цитата(des00 @ Dec 11 2009, 11:10) *
т.е. нарезка АЦП на 80МГц, интерполяция в 40 раз. Если я правильно понял вашу фразу вы непрерывно пишете в фильтр на 80МГц, потом берете каждый M ый записанный отсчет и считаете выход фильтра так ? На выходе фильтра у вас уже тактовая 1МГц.

Примерно так, только не интерполяция, а децимация. Фильтр работает не так. Предположим в фильтре 36 коэффициентов и он симметричный, то есть порядок 72. Считаем свёртку на 36 коэффициентов с суммами двух отсчётов, согласно принципу работы симметричного фильтра (см. userguide на dsp48 virtex-4). Затем переставляем указатель на M входных отсчётов и считаем следующую свертку. В обычном fir считаются все отсчёты (указатель переставляется на 1), а затем M-1 выкидываются (то есть работаем зря, о чём и пишет автор Вашей статьи о полифазных фильтрах в первых строках статьи). Полифазный хорош был бы, если частота входных отсчётов очень большая, а коэффциент прореживания маленький, тогда пришлось бы использовать много умножителей и использовать особую структуру фильтра. Здесь же достаточно одного умножителя и обычного MACC фильтра (на каскад, один каскаж в данном случае хоть и обеспечит 70 дБ, но даст очень большую неравномерность в полосе пропуская, порядка 1 дБ).
des00
Цитата(dmitry-tomsk @ Dec 11 2009, 02:24) *
Примерно так, только не интерполяция, а децимация. Фильтр работает не так. Предположим в фильтре 36 коэффициентов и он симметричный, то есть порядок 72. Считаем свёртку на 36 коэффициентов с суммами двух отсчётов, согласно принципу работы симметричного фильтра (см. userguide на dsp48 virtex-4). Затем переставляем указатель на M входных отсчётов и считаем следующую свертку.


понятно, спасибо.

PS. а как вы его перестраиваете по полосе ? ну коэффициенты пересчитать это понятно, но ведь при сужении полосы должна изменятся длинна импульсной характеристики. Или фильтр считается на самую узкую полосу, а ИХ на более широких полосах добивается нулями?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.