|
GAIN рекурсивного НЧ, синтезированного FDAtool MATLAB, почему GAIN отличается от расчетного |
|
|
|
Dec 14 2013, 10:13
|
Участник

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

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

|
В чем смысл такого большого отношения частот дискретизации и среза?
|
|
|
|
|
Dec 16 2013, 13:06
|

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

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

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

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

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

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

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

|
Вы что-то слышали про вычитание близких чисел?  Или вот еще пример опасной редукции: float a, b, c; a=123456789; b=123456788; c=a-b; Что мы должны получить? Конечно же 1. Но, printf("Result: %f\n", f); дает ответ: 8. Неплохо, да? Т.е. при наличии относительной погрешности представления исходных данных около 3E-8, мы получили относительную погрешность результата более чем в 2E+8 раз больше
|
|
|
|
|
Dec 16 2013, 17:21
|
Участник

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

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

|
Цитата(Sekat @ Dec 16 2013, 21:21)  Это понятно. Но.. В моем примере из 7 мантисных чисел действующих не менее 3х!. Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT.
Да и бог с ним с гейном. неправильно считает - не проблема скорректировать ручками. Проблема в том что "Маленькая ложь рождает большое недоверие". Вы так и не поняли, что отношение частот 20E4, что Вы приняли для расчета, выходит далеко за рамки разумного ( читай любой разрядной сетки любого моделирующего инструмента, если только нет возможности использования "длинной" арифметики ) Для примера, как ведет себя ФНЧ Баттерворта 2 порядка Fc=0.01 при разных Fs ( аналог; цифровой: 1; 10; 300 Гц) при точности double. Аналоговый
 Уменьшено до 67%
523 x 590 (10.24 килобайт)
|
Цифровой Fs=1 Hz
 Уменьшено до 67%
521 x 588 (10.8 килобайт)
|
Цифровой Fs=10 Hz
 Уменьшено до 67%
525 x 586 (10.63 килобайт)
|
Цифровой Fs=300 Hz
 Уменьшено до 67%
521 x 587 (10.59 килобайт)
|
Как видим, начиная с 10 Гц, уже пошли проблемы с точностью в переходных режимах, хотя Gain=1 А теперь синтезируем фильтр через Filter Solution ( Fs = 1 Hz) и, не долго думая, оставим 5 значащих дес. цифр:
 Уменьшено до 65%
493 x 97 (3.75 килобайт)
|
 Уменьшено до 67%
516 x 590 (10.05 килобайт)
|
Вот у нас Gain и поплыл и это при абсолютно здравой Fs=1 Hz и в расчетной сетке 64 бита ( double ). А если бы взяли 100; 300; 2000 Hz ?
|
|
|
|
|
Dec 17 2013, 03:17
|
Участник

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

|
Цитата(TSerg @ Dec 16 2013, 21:48)  Вы так и не поняли, что отношение частот 20E4, что Вы приняли для расчета, выходит далеко за рамки разумного ( читай любой разрядной сетки любого моделирующего инструмента, если только нет возможности использования "длинной" арифметики ) Вот, аналогичная вашему 4-му рисунку, переходная характеристика из FDA Tool (Fc=0.01, Fs=300).
 Уменьшено до 82%
927 x 591 (96.59 килобайт)
|
Использование С и float в реальном проекте с расчетными коэффициентами дает похожие результаты. Никаких "ступенек" не наблюдается. Мы говорим об одном и том же?
|
|
|
|
Guest_TSerg_*
|
Dec 17 2013, 07:07
|
Guests

|
Это я сам себя перехитрил - вводил Fs как Ts и при этом удивлялся - во как бывает  Так, что "ступеньки" - это дискретизация по времени, а не по амплитуде. Но мое недоумение выбором столь высокого отношения частот остается. С типом double при Fs=2000 все нормально, а на single фильтр разваливается.
 Уменьшено до 72%
601 x 489 (56.29 килобайт)
|
 Уменьшено до 71%
596 x 485 (60.49 килобайт)
|
|
|
|
|
|
Dec 17 2013, 08:57
|

Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
Guest_TSerg_*
|
Dec 17 2013, 11:08
|
Guests

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

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

|
Цитата(TSerg @ Dec 17 2013, 14:08)  Даже на 8-битной платформе?  Я о другом. Проблема не в том, что фильтр работает в плавающей точке. Даже если заменить плавающую точку на фиксированную - ошибка сохранится. Т.е. это матлаб дурит рассчитывая коэффициенты и усиление. Что до битности - то 32бита мне хватало при 64битном аккумуляторе. И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции.
|
|
|
|
|
Dec 17 2013, 12:09
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Честно говоря, не понял проблемы. Квантование к-тов 23-мя битами приводит к полюсу на единичной окружности. Тупое усечение мантиссы приводит к к-ту передачи фильтра 1/60. В обоих случаях ачх разваливается. На фоне такого безобразия вопрос о разрядности аккумулятора даже не стоит. Вывод: Данный фильтр в формате float не может быть реализован. Чо тут обсуждать-то? Цитата TSerg: Даже на 8-битной платформе? Да хоть на 2-битной. Реализовать можно любую точность.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|