Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GAIN рекурсивного НЧ, синтезированного FDAtool MATLAB
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Sekat
Синтезирую простейший фильтр НЧ второго порядка по Баттерворту. Fs=2000, Fc=0,01. Естественно, что деноменаторные коэффициенты получаются с 4 девятками, а так же фильтр оказывается с высоким коэфф. усиления. Матлаб расчитывает требуемый GAIN как 2.5E-10. Однако работающий фильтр (float) имеет усиление в 60 раз меньше.
Схема эксперимента матлабе. На модель фильтра (самописную, а не встроенную функцию) подаю единичную ступеньку. Через большое число циклов виду устоявшийся уровень 0.0166.
Где собака порылась?
TSerg
В чем смысл такого большого отношения частот дискретизации и среза?
_4afc_
Цитата(Sekat @ Dec 14 2013, 13:13) *
Где собака порылась?


Думаю виноват кривой FDAtool. Тоже пытался уменьшить усиления в секциях - безрезультатно.
Если увеличиваешь количество секций - тупо увеличивает подавление.
Если начинаешь ручками крутить нули/полюса - порядок GAIN становится зеркален порядку коэффициентов.
Как-то не хочется доверять результатом такой глючной тулзы.
Sekat
Цитата(TSerg @ Dec 16 2013, 10:27) *
В чем смысл такого большого отношения частот дискретизации и среза?


Выделение постоянной составляющей на фоне большого уровня сигнала переменной частоты.

А по существу?
Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами,
Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз.
TSerg
Цитата(Sekat @ Dec 16 2013, 17:07) *
Выделение постоянной составляющей на фоне большого уровня сигнала переменной частоты.

А по существу?
Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами,
Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз.


По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности.
Поставьте, к примеру, Fs=1 Гц и все получится.
Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc?
Sekat
Цитата(TSerg @ Dec 16 2013, 17:39) *
По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности.
Поставьте, к примеру, Fs=1 Гц и все получится.
Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc?

А откуда известно, что IIR с такими параметрами заведомо выходит за пределы точности?
TSerg
Вы что-то слышали про вычитание близких чисел? sm.gif

Или вот еще пример опасной редукции:

float a, b, c;
a=123456789;
b=123456788;
c=a-b;

Что мы должны получить? Конечно же 1.
Но,
printf("Result: %f\n", f);
дает ответ: 8.

Неплохо, да?
Т.е. при наличии относительной погрешности представления исходных данных около 3E-8, мы получили относительную погрешность результата более чем в 2E+8 раз больше sm.gif
Sekat
Цитата(TSerg @ Dec 16 2013, 21:08) *
Вы что-то слышали про вычитание близких чисел? sm.gif

Или вот еще пример опасной редукции:
...

Это понятно. Но..
В моем примере из 7 мантисных чисел действующих не менее 3х!.
Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT.

Да и бог с ним с гейном. неправильно считает - не проблема скорректировать ручками. Проблема в том что "Маленькая ложь рождает большое недоверие".
TSerg
Цитата(Sekat @ Dec 16 2013, 21:21) *
Это понятно. Но..
В моем примере из 7 мантисных чисел действующих не менее 3х!.
Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT.

Да и бог с ним с гейном. неправильно считает - не проблема скорректировать ручками. Проблема в том что "Маленькая ложь рождает большое недоверие".


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

Для примера, как ведет себя ФНЧ Баттерворта 2 порядка Fc=0.01 при разных Fs ( аналог; цифровой: 1; 10; 300 Гц) при точности double.

Аналоговый
Нажмите для просмотра прикрепленного файла

Цифровой Fs=1 Hz
Нажмите для просмотра прикрепленного файла

Цифровой Fs=10 Hz
Нажмите для просмотра прикрепленного файла

Цифровой Fs=300 Hz
Нажмите для просмотра прикрепленного файла

Как видим, начиная с 10 Гц, уже пошли проблемы с точностью в переходных режимах, хотя Gain=1

А теперь синтезируем фильтр через Filter Solution ( Fs = 1 Hz) и, не долго думая, оставим 5 значащих дес. цифр:
Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

Вот у нас Gain и поплыл и это при абсолютно здравой Fs=1 Hz и в расчетной сетке 64 бита ( double ).
А если бы взяли 100; 300; 2000 Hz ? sm.gif
Sekat
Цитата(TSerg @ Dec 16 2013, 21:48) *
Вы так и не поняли, что отношение частот 20E4, что Вы приняли для расчета, выходит далеко за рамки разумного ( читай любой разрядной сетки любого моделирующего инструмента, если только нет возможности использования "длинной" арифметики )

Вот, аналогичная вашему 4-му рисунку, переходная характеристика из FDA Tool (Fc=0.01, Fs=300).
Нажмите для просмотра прикрепленного файла

Использование С и float в реальном проекте с расчетными коэффициентами дает похожие результаты. Никаких "ступенек" не наблюдается. Мы говорим об одном и том же?
TSerg
Это я сам себя перехитрил - вводил Fs как Ts и при этом удивлялся - во как бываетsm.gif
Так, что "ступеньки" - это дискретизация по времени, а не по амплитуде.

Но мое недоумение выбором столь высокого отношения частот остается.

С типом double при Fs=2000 все нормально, а на single фильтр разваливается.
Нажмите для просмотра прикрепленного файла Нажмите для просмотра прикрепленного файла
_4afc_
Цитата(TSerg @ Dec 17 2013, 10:07) *
Но мое недоумение выбором столь высокого отношения частот остается.


Например при фильтрации сигнала с выхода дельта-сигма 3-4 порядка приходится делать фильтры 1:200 и подавлением сотни Дб на октаву.

Цитата(TSerg @ Dec 17 2013, 10:07) *
С типом double при Fs=2000 все нормально, а на single фильтр разваливается.


Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double.
TSerg
Цитата(_4afc_ @ Dec 17 2013, 12:57) *
Например при фильтрации сигнала с выхода дельта-сигма 3-4 порядка приходится делать фильтры 1:200 и подавлением сотни Дб на октаву.


Я про данный случай. Разве, что облегчить требования к предварительному аналоговому фильтру?

Цитата(_4afc_ @ Dec 17 2013, 12:57) *
Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double.


Даже на 8-битной платформе? sm.gif
_4afc_
Цитата(TSerg @ Dec 17 2013, 14:08) *
Даже на 8-битной платформе? sm.gif


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

Что до битности - то 32бита мне хватало при 64битном аккумуляторе.
И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции.
thermit
Честно говоря, не понял проблемы. Квантование к-тов 23-мя битами приводит к полюсу на единичной окружности. Тупое усечение мантиссы приводит к к-ту передачи фильтра 1/60. В обоих случаях ачх разваливается. На фоне такого безобразия вопрос о разрядности аккумулятора даже не стоит. Вывод: Данный фильтр в формате float не может быть реализован. Чо тут обсуждать-то?

Цитата
TSerg:
Даже на 8-битной платформе?


Да хоть на 2-битной. Реализовать можно любую точность.
TSerg
Цитата(_4afc_ @ Dec 17 2013, 15:36) *
Т.е. это матлаб дурит рассчитывая коэффициенты и усиление.


Мей би. Знатоки матлаба может и подскажут.

Цитата(_4afc_ @ Dec 17 2013, 15:36) *
Что до битности - то 32бита мне хватало при 64битном аккумуляторе.
И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции.


32 и 64 - это приличный диапазон и явно больше single:)


Цитата(thermit @ Dec 17 2013, 16:09) *
Чо тут обсуждать-то?


Да я и не обсуждаю, просто пытаюсь уточнить в чем может быть проблема, да и самому понять - неужели матлаб так дурит

Цитата(thermit @ Dec 17 2013, 16:09) *
Да хоть на 2-битной. Реализовать можно любую точность.


Это понятно, я о принятой для вычислений сетке.

P.S.
Т.е. плавно подвожу к мысли, что в обсуждаемом случае снижение отношения Fs/Fc снижает требование к разрядности.
Заодно хочу все же понять - может есть какой высший смысл для фильтра 2 порядка при Fc=0.01 Гц использовать Fs=2000 Гц и я его не знаю?
Нормальное желание.
thermit
Цитата
TSerg:
неужели матлаб так дурит


За 17 лет пользования матлабом не сталкивался с ситуацией, когда матлаб дурит. Как правило, пользователь дурит сам себя. Случай топикстартера классический в этом смысле.

TSerg
Цитата(thermit @ Dec 17 2013, 16:28) *
Как правило, пользователь дурит сам себя. Случай топикстартера классический в этом смысле.


+1
_4afc_
Цитата(thermit @ Dec 17 2013, 15:28) *
За 17 лет пользования матлабом не сталкивался с ситуацией, когда матлаб дурит.


Вот если бы у вас был опыт 17 лет пользования FDAtool - тогда да. А так...

Возьмите фильтр из нескольких секций, сохраните коэффициенты.
Перейдите в нули/полюса и слегка измените Gain в одной из секций, сохраните коэффициенты.
Сравните Gain в обоих файлах - они стали идти в обратном порядке. Это глюк или фича?
Глюк был замечен при попытке сделать 7-звенный фильтр с теми же характеристиками, что и 6-звенный, но с меньшими Gain в звеньях.


Цитата(Sekat @ Dec 14 2013, 13:13) *
Схема эксперимента матлабе. На модель фильтра (самописную, а не встроенную функцию) подаю единичную ступеньку. Через большое число циклов виду устоявшийся уровень 0.0166.
Где собака порылась?


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

thermit
Цитата
_4afc_:
Вот если бы у вас был опыт 17 лет пользования FDAtool - тогда да. А так...

Возьмите фильтр из нескольких секций, сохраните коэффициенты.
Перейдите в нули/полюса и слегка измените Gain в одной из секций, сохраните коэффициенты.
Сравните Gain в обоих файлах - они стали идти в обратном порядке. Это глюк или фича?
Глюк был замечен при попытке сделать 7-звенный фильтр с теми же характеристиками, что и 6-звенный, но с меньшими Gain в звеньях.


Дык, это не матлаба глюки, а fdatol. Да и на кой сдалась эта апликуха? Всю жизнь без нее прекрасно обходился. Кстати говоря, в matlab r2012b ничего подобного не наблюдаю. Да и расстановка усилений по звеньям, вообще говоря, не такая уж тривиальная задача, если рассматривать ее в контексте минимизации шумов уже цифровых фильтров. Вообще, анализу шумов цифровых фильтров в матлабе ничего не посвещено, хотя тема весьма актуальна.

Цитата
Мне вот тут подумалось, а какие уровни должна иметь "единичная ступенька"?


Ну, какие-то определенно должна иметь...
TSerg
Цитата(_4afc_ @ Dec 18 2013, 18:35) *
Мне вот тут подумалось, а какие уровни должна иметь "единичная ступенька"?


Для "float" - буквально 1.0 sm.gif

Для "fix" - зависит от типа фильтра и его пере-регулирования.
_4afc_
Цитата(thermit @ Dec 18 2013, 18:05) *
Кстати говоря, в matlab r2012b ничего подобного не наблюдаю.


Лично мучался с этим глюком в FDAtool r2012b несколько дней назад. Причём даже перезапуск FDAtool не помогал.
Сейчас - глюк исчез и пока повторить его я не могу - видно надо ещё что-то нажать...


Цитата(TSerg @ Dec 18 2013, 19:32) *
Для "float" - буквально 1.0 sm.gif


Это при условии, что затем у нас сигнал на такой фильтр будет подаваться в диапазоне от -1.0 до +1.0 sm.gif

Можно ведь подавать и от 0 до 1.0, и от -0.5 до +0.5, и удивляться результатам коэффициента передачи фильтра...
thermit
Цитата
_4afc_:
видно надо ещё что-то нажать


я же говорю, проблемы пользователя, но не матлаба.

Цитата
Можно ведь подавать и от 0 до 1.0, и от -0.5 до +0.5, и удивляться результатам коэффициента передачи фильтра...


К-т передачи фильтра не зависит от обрабатываемого сигнала. Вообще-то ответ на вопрос топикстартера прозвучал. Обсуждать тут нечего.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.