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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Проблемы с реализацией CIC фильтров
alex_os
сообщение Aug 13 2010, 08:05
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(Art111 @ Aug 13 2010, 11:11) *
А вы не могли бы пояснить, в чём конкретно фантастичность задачи?
У нас следующая задача. Нужно сделать слудующий филтр: децимация 3, полоса пропускания 8 МГц, частота сэмплирования 100 МГц, затухание 110 Дб. Матлаб при расчёте фильтра с данными параметрами выдал 12 каскадов..


Никто не запрещает сделать CIC 12го порядка но
1) СIC дециматор в 10 раз 12го порядка будет уметь усиление 10^12 это потребует максимальную разрядность
в фильтре = число_разрядов_АЦП + 40
2) Полоса пропускания ну очень кривая будет (представляете sinc(x)^12 )
3) Почитайте описание микросхем DDC , врядли там найдете СIC больше 5го порядка.

p.s. Для Вашей задачи лучше всего FIR будет или CIC + FIR



--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
des00
сообщение Aug 13 2010, 08:18
Сообщение #17


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Art111 @ Aug 13 2010, 02:27) *
А есть люди, на форуме, которые CIC писали руками?

интеграторы неправильно сделали, нарисуйте реализацию сic фильтра в симулинке и наложите ее на свое железо. увидите разницу %)

и разрядность у вас не правильно выбрана, работать не будет. учите матчасть.

Цитата(alex_os @ Aug 13 2010, 03:05) *
Для Вашей задачи лучше всего FIR будет или CIC + FIR

+1. Тем более что полоса фиксирована и всё равно будете ставить компенсационный FIR %)


--------------------
Go to the top of the page
 
+Quote Post
729
сообщение Aug 13 2010, 08:25
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952



Цитата(Art111 @ Aug 13 2010, 11:11) *
А вы не могли бы пояснить, в чём конкретно фантастичность задачи?
У нас следующая задача. Нужно сделать слудующий филтр: децимация 3, полоса пропускания 8 МГц, частота сэмплирования 100 МГц, затухание 110 Дб. Матлаб при расчёте фильтра с данными параметрами выдал 12 каскадов..

Вам подойдет и 11-го порядка CIC - неравномерность на краю полосы (на 8 МГц) -8.21дБ, максимальная помеха от децимации на краю полосы -108дБ.

Прошу прощения - почему-то сначала увидел 100 дБ максимальной помехи. Действительно, только 12-ый порядок подойдет.


Сообщение отредактировал 729 - Aug 13 2010, 08:39
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 13 2010, 08:42
Сообщение #19


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Art111 @ Aug 13 2010, 11:53) *
Разница с матлабовской моделью небольшая

Обратите пристальное внимание на то, как вы делаете округление. Меня всегда ошибки преследовали именно в этом.
Go to the top of the page
 
+Quote Post
729
сообщение Aug 13 2010, 08:47
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952



Цитата(DmitryR @ Aug 13 2010, 12:42) *
Обратите пристальное внимание на то, как вы делаете округление. Меня всегда ошибки преследовали именно в этом.

Мы не делали округление, а просто отбрасывали, что вело к появлению некоторой постоянки. Но её легко замерить, а потом вычесть - работает вполне прилично.

Go to the top of the page
 
+Quote Post
Art111
сообщение Aug 13 2010, 08:57
Сообщение #21





Группа: Новичок
Сообщений: 9
Регистрация: 12-08-10
Пользователь №: 58 875



Цитата(des00 @ Aug 13 2010, 12:18) *
интеграторы неправильно сделали, нарисуйте реализацию сic фильтра в симулинке и наложите ее на свое железо. увидите разницу %)

и разрядность у вас не правильно выбрана, работать не будет. учите матчасть.


+1. Тем более что полоса фиксирована и всё равно будете ставить компенсационный FIR %)


C замечанием согласен. Исправлю, получившийся код выложу! Про разрядность - взял наобум. Потом планировал отрезать совсем другие разряды. Спасибо!
Go to the top of the page
 
+Quote Post
rloc
сообщение Aug 16 2010, 15:26
Сообщение #22


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



Цитата(Art111 @ Aug 13 2010, 09:29) *
А я не знаю импульсной характеристики фильтра. Количество каскадов мне выдал матлаб. И дельта-функция в этом случае мне никак не поможет, это же не КИХ - там, да - все коэффициенты высвечиваются сразу. Но не в нашем случае с CIC. Спасибо!

Вы глубоко заблуждаетесь, CIC фильтр эквивалентен N каскадам КИХ фильтров с прямоугольной импульсной характеристикой, соединенных последовательно (разница только в физической реализации). А суммарная импульсная характеристика фильтра определяется как свертка всех импульсных характеристик последовательно соединенных каскадов. Для примера, импульсная характеристика 2-х каскадов - равнобедренный треугольник, 3-х каскадов - параболический вид (сложно в уме прикинуть) и т.д.
Go to the top of the page
 
+Quote Post
PavPro
сообщение Jan 15 2015, 18:27
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 24-02-11
Пользователь №: 63 222



Хотелось бы прояснить для себя следующий момент касаемо в части реализации CIC-фильтров. К примеру есть 3 каскада интеграторов + гребенчатых фильтров, т.е. 3-х каскадный CIC-фильтр. При этом разрядность входных данных больше чем выходных (например in_data = 20 бит, out_data = 12 бит). Допускается ли в этом случае отбрасывать младшие биты в интеграторах согласно методики Хогенауера (Hogenauer, Eugene. An Economical Class of Digital Filters For Decimation and Interpolation, IEEE Transactions on Acoustics, Speech and Signal Processing, Vol. ASSP-29, pp. 155-162, April 1981.). Согласно алгоритму в данной статье, фильтр работает при разрядности входных данных меньшей чем разрядность выходных. В противном случае моделирование показывает что фильтр работает неправильно! Есть соображение, что когда разрядность входных данных больше чем выходных, отбрасывать младшие биты в интеграторах вообще нельзя. Так ли это, или я ошибаюсь?
Заранее благодарен за ответы.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 15 2015, 19:18
Сообщение #24


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(PavPro @ Jan 15 2015, 20:27) *
Хотелось бы прояснить для себя следующий момент касаемо в части реализации CIC-фильтров. К примеру есть 3 каскада интеграторов + гребенчатых фильтров, т.е. 3-х каскадный CIC-фильтр. При этом разрядность входных данных больше чем выходных (например in_data = 20 бит, out_data = 12 бит). Допускается ли в этом случае отбрасывать младшие биты в интеграторах согласно методики Хогенауера (Hogenauer, Eugene. An Economical Class of Digital Filters For Decimation and Interpolation, IEEE Transactions on Acoustics, Speech and Signal Processing, Vol. ASSP-29, pp. 155-162, April 1981.). Согласно алгоритму в данной статье, фильтр работает при разрядности входных данных меньшей чем разрядность выходных. В противном случае моделирование показывает что фильтр работает неправильно! Есть соображение, что когда разрядность входных данных больше чем выходных, отбрасывать младшие биты в интеграторах вообще нельзя. Так ли это, или я ошибаюсь?
Заранее благодарен за ответы.

нет, простое "обрезание" разрядности не подойдет

Возьмите промоделируйте - смотрите на выход СIC фильтра (полный выход со всеми разрядами) - уменьшите масштаб при моделировании (чтобы много выходных данных на экране видели) - смотрите какие биты меняются, а какие нет или практически не меняются.
В итоге берите только те которые меняются - значащие биты в необходимом количестве (чаще делают разрядность входа и выхода равными).
Если СIC фильтр перестраиваемый, то такую операцию нужно делать для каждого коэффициента. Можно взять несколько точек, а потом аппроксимировать...

Посмотрите как меняются входные данные и какие значащие биты там, постарайтесь чтобы выходные данные с СIC фильтра были аналогичными...

PS СIC фильтр делайте полный без "обрезания" на каскадах - совет
PS PS прошу прощения - ошибся - говорил про децимирующий СIC фильтр, но думаю в Вашем случае (интерполяции) все аналогично с точность до наоборот...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
PavPro
сообщение Jan 15 2015, 19:51
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 24-02-11
Пользователь №: 63 222



Цитата(Maverick @ Jan 15 2015, 23:18) *
нет, простое "обрезание" разрядности не подойдет

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

Ну делать подбор усечения в каждом каскаде с последующим моделированием это слишком расточительно по времени. Я спрашивал про методику усечения описываемую Хогенауером. Согласно этой методики, можно заранее вычислить сколько бит и в каком каскаде можно отбрасывать с минимальным ущербом для конечного результата.
Другое дело что фильтр перестает правильно работать, когда разрядность входных данных больше чем выходных.
К примеру: есть два трехкаскадных фильтра: 1)N=3 кол-во секций, R=32 коэфФ. прореживания, М=2 разностная задержка. Bin= 8 бит, Bout =10 бит.
2)N=3 кол-во секций, R=32 коэфФ. прореживания, М=2 разностная задержка. Bin= 18 бит, Bout =10 бит.
Согласно приведенной в статье методики: для первого фильтра имеем следующие разрядности в промежуточных каскадах: 1 каскад = 26 бит, 2-ой =21 бит,
3-й = 16 бит, 4-й = 14 бит, 5-й = 13, 6-й = 12 бит.
для второго фильтра имеем такие же результаты, но первый фильтр работает правильно, второй нет.
Возникает вопрос ПОЧЕМУ? Для первого фильтра максимальная разрядность 1-го интегратора вычисляется по формуле Bint1=Bin + N*log2(R*M) = 8 + 3*log2(64)= 26 бит.
Для второго 20 + 3*log2(64) = 38 бит из которых мы учитываем только 26 старших (согласно Хогенауеру). Так вот я хотел спросить у знающих
людей: можно ли пользоваться данной методикой когда входная разрядность больше выходной. У Altera ядро работает корректно в обоих случаях. У меня нет.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 15 2015, 20:01
Сообщение #26


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(PavPro @ Jan 15 2015, 21:51) *
Ну делать подбор усечения в каждом каскаде с последующим моделированием это слишком расточительно по времени. Я спрашивал про методику усечения описываемую Хогенауером. Согласно этой методики, можно заранее вычислить сколько бит и в каком каскаде можно отбрасывать с минимальным ущербом для конечного результата.
Другое дело что фильтр перестает правильно работать, когда разрядность входных данных больше чем выходных.
К примеру: есть два трехкаскадных фильтра: 1)N=3 кол-во секций, R=32 коэфФ. прореживания, М=2 разностная задержка. Bin= 8 бит, Bout =10 бит.
2)N=3 кол-во секций, R=32 коэфФ. прореживания, М=2 разностная задержка. Bin= 18 бит, Bout =10 бит.
Согласно приведенной в статье методики: для первого фильтра имеем следующие разрядности в промежуточных каскадах: 1 каскад = 26 бит, 2-ой =21 бит,
3-й = 16 бит, 4-й = 14 бит, 5-й = 13, 6-й = 12 бит.
для второго фильтра имеем такие же результаты, но первый фильтр работает правильно, второй нет.
Возникает вопрос ПОЧЕМУ? Для первого фильтра максимальная разрядность 1-го интегратора вычисляется по формуле Bint1=Bin + N*log2(R*M) = 8 + 3*log2(64)= 26 бит.
Для второго 20 + 3*log2(64) = 38 бит из которых мы учитываем только 26 старших (согласно Хогенауеру). Так вот я хотел спросить у знающих
людей: можно ли пользоваться данной методикой когда входная разрядность больше выходной. У Altera ядро работает корректно в обоих случаях. У меня нет.

нет Вы меня не поняли...

Цитата
PS СIC фильтр делайте полный без "обрезания" разрядности на каскадах - совет


а потом уже применяете только ко входу СIC фильтра (потому что у Вас интерполирующий) то, что я советовал ранее...

Выбирать значащие биты Вы будете делать столько раз - сколько каскадов фильтров... Никуда не денитесь... sm.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
PavPro
сообщение Jan 15 2015, 20:07
Сообщение #27


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 24-02-11
Пользователь №: 63 222



Цитата(Maverick @ Jan 16 2015, 00:01) *
нет Вы меня не поняли...



а потом уже применяете только ко входу то, что я советовал ранее...

Ваш метод понятен. Но во первых он основан на эмпирических подходах, что далеко не всегда удобно, а во вторых я все же спрашивал про метод описанный в статье.
У меня есть подозрение что я все таки что то не так: реализую, понимаю или может что-то упустил. Но все равно спасибо!
Фильтр децимирующий.

Сообщение отредактировал PavPro - Jan 15 2015, 20:34
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 16 2015, 00:31
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



тут смотрели? я по Хогенауэру делал, но не помню, в каких условиях проверял
Go to the top of the page
 
+Quote Post

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

 


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


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