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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> GAIN рекурсивного НЧ, синтезированного FDAtool MATLAB, почему GAIN отличается от расчетного
Sekat
сообщение Dec 14 2013, 10:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 13-02-12
Пользователь №: 70 242



Синтезирую простейший фильтр НЧ второго порядка по Баттерворту. Fs=2000, Fc=0,01. Естественно, что деноменаторные коэффициенты получаются с 4 девятками, а так же фильтр оказывается с высоким коэфф. усиления. Матлаб расчитывает требуемый GAIN как 2.5E-10. Однако работающий фильтр (float) имеет усиление в 60 раз меньше.
Схема эксперимента матлабе. На модель фильтра (самописную, а не встроенную функцию) подаю единичную ступеньку. Через большое число циклов виду устоявшийся уровень 0.0166.
Где собака порылась?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 16 2013, 06:27
Сообщение #2





Guests






В чем смысл такого большого отношения частот дискретизации и среза?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 16 2013, 13:06
Сообщение #3


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Sekat @ Dec 14 2013, 13:13) *
Где собака порылась?


Думаю виноват кривой FDAtool. Тоже пытался уменьшить усиления в секциях - безрезультатно.
Если увеличиваешь количество секций - тупо увеличивает подавление.
Если начинаешь ручками крутить нули/полюса - порядок GAIN становится зеркален порядку коэффициентов.
Как-то не хочется доверять результатом такой глючной тулзы.
Go to the top of the page
 
+Quote Post
Sekat
сообщение Dec 16 2013, 13:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 13-02-12
Пользователь №: 70 242



Цитата(TSerg @ Dec 16 2013, 10:27) *
В чем смысл такого большого отношения частот дискретизации и среза?


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

А по существу?
Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами,
Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 16 2013, 13:39
Сообщение #5





Guests






Цитата(Sekat @ Dec 16 2013, 17:07) *
Выделение постоянной составляющей на фоне большого уровня сигнала переменной частоты.

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


По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности.
Поставьте, к примеру, Fs=1 Гц и все получится.
Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc?
Go to the top of the page
 
+Quote Post
Sekat
сообщение Dec 16 2013, 15:46
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 13-02-12
Пользователь №: 70 242



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

А откуда известно, что IIR с такими параметрами заведомо выходит за пределы точности?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 16 2013, 17:08
Сообщение #7





Guests






Вы что-то слышали про вычитание близких чисел? 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
Go to the top of the page
 
+Quote Post
Sekat
сообщение Dec 16 2013, 17:21
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 13-02-12
Пользователь №: 70 242



Цитата(TSerg @ Dec 16 2013, 21:08) *
Вы что-то слышали про вычитание близких чисел? sm.gif

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

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

Да и бог с ним с гейном. неправильно считает - не проблема скорректировать ручками. Проблема в том что "Маленькая ложь рождает большое недоверие".
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 16 2013, 17:48
Сообщение #9





Guests






Цитата(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
Go to the top of the page
 
+Quote Post
Sekat
сообщение Dec 17 2013, 03:17
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 13-02-12
Пользователь №: 70 242



Цитата(TSerg @ Dec 16 2013, 21:48) *
Вы так и не поняли, что отношение частот 20E4, что Вы приняли для расчета, выходит далеко за рамки разумного ( читай любой разрядной сетки любого моделирующего инструмента, если только нет возможности использования "длинной" арифметики )

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


Использование С и float в реальном проекте с расчетными коэффициентами дает похожие результаты. Никаких "ступенек" не наблюдается. Мы говорим об одном и том же?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 17 2013, 07:07
Сообщение #11





Guests






Это я сам себя перехитрил - вводил Fs как Ts и при этом удивлялся - во как бываетsm.gif
Так, что "ступеньки" - это дискретизация по времени, а не по амплитуде.

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

С типом double при Fs=2000 все нормально, а на single фильтр разваливается.
Прикрепленное изображение
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 17 2013, 08:57
Сообщение #12


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(TSerg @ Dec 17 2013, 10:07) *
Но мое недоумение выбором столь высокого отношения частот остается.


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

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


Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 17 2013, 11:08
Сообщение #13





Guests






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


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

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


Даже на 8-битной платформе? sm.gif
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 17 2013, 11:36
Сообщение #14


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



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


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

Что до битности - то 32бита мне хватало при 64битном аккумуляторе.
И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции.
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 17 2013, 12:09
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



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

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


Да хоть на 2-битной. Реализовать можно любую точность.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 17 2013, 12:23
Сообщение #16





Guests






Цитата(_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 Гц и я его не знаю?
Нормальное желание.
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 17 2013, 12:28
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
TSerg:
неужели матлаб так дурит


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

Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 17 2013, 12:34
Сообщение #18





Guests






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


+1
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 18 2013, 14:35
Сообщение #19


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



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


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

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


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


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

Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 18 2013, 15:05
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



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

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


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

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


Ну, какие-то определенно должна иметь...
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 18 2013, 16:32
Сообщение #21





Guests






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


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

Для "fix" - зависит от типа фильтра и его пере-регулирования.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 19 2013, 08:09
Сообщение #22


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(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, и удивляться результатам коэффициента передачи фильтра...
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 19 2013, 08:37
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
_4afc_:
видно надо ещё что-то нажать


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

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


К-т передачи фильтра не зависит от обрабатываемого сигнала. Вообще-то ответ на вопрос топикстартера прозвучал. Обсуждать тут нечего.
Go to the top of the page
 
+Quote Post

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

 


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


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