sekat 0 14 декабря, 2013 Опубликовано 14 декабря, 2013 · Жалоба Синтезирую простейший фильтр НЧ второго порядка по Баттерворту. Fs=2000, Fc=0,01. Естественно, что деноменаторные коэффициенты получаются с 4 девятками, а так же фильтр оказывается с высоким коэфф. усиления. Матлаб расчитывает требуемый GAIN как 2.5E-10. Однако работающий фильтр (float) имеет усиление в 60 раз меньше. Схема эксперимента матлабе. На модель фильтра (самописную, а не встроенную функцию) подаю единичную ступеньку. Через большое число циклов виду устоявшийся уровень 0.0166. Где собака порылась? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба В чем смысл такого большого отношения частот дискретизации и среза? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Где собака порылась? Думаю виноват кривой FDAtool. Тоже пытался уменьшить усиления в секциях - безрезультатно. Если увеличиваешь количество секций - тупо увеличивает подавление. Если начинаешь ручками крутить нули/полюса - порядок GAIN становится зеркален порядку коэффициентов. Как-то не хочется доверять результатом такой глючной тулзы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sekat 0 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба В чем смысл такого большого отношения частот дискретизации и среза? Выделение постоянной составляющей на фоне большого уровня сигнала переменной частоты. А по существу? Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами, Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Выделение постоянной составляющей на фоне большого уровня сигнала переменной частоты. А по существу? Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами, Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз. По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности. Поставьте, к примеру, Fs=1 Гц и все получится. Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sekat 0 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности. Поставьте, к примеру, Fs=1 Гц и все получится. Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc? А откуда известно, что IIR с такими параметрами заведомо выходит за пределы точности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Вы что-то слышали про вычитание близких чисел? :) Или вот еще пример опасной редукции: float a, b, c; a=123456789; b=123456788; c=a-b; Что мы должны получить? Конечно же 1. Но, printf("Result: %f\n", f); дает ответ: 8. Неплохо, да? Т.е. при наличии относительной погрешности представления исходных данных около 3E-8, мы получили относительную погрешность результата более чем в 2E+8 раз больше :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sekat 0 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Вы что-то слышали про вычитание близких чисел? :) Или вот еще пример опасной редукции: ... Это понятно. Но.. В моем примере из 7 мантисных чисел действующих не менее 3х!. Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT. Да и бог с ним с гейном. неправильно считает - не проблема скорректировать ручками. Проблема в том что "Маленькая ложь рождает большое недоверие". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 16 декабря, 2013 Опубликовано 16 декабря, 2013 · Жалоба Это понятно. Но.. В моем примере из 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 ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sekat 0 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Вы так и не поняли, что отношение частот 20E4, что Вы приняли для расчета, выходит далеко за рамки разумного ( читай любой разрядной сетки любого моделирующего инструмента, если только нет возможности использования "длинной" арифметики ) Вот, аналогичная вашему 4-му рисунку, переходная характеристика из FDA Tool (Fc=0.01, Fs=300). Использование С и float в реальном проекте с расчетными коэффициентами дает похожие результаты. Никаких "ступенек" не наблюдается. Мы говорим об одном и том же? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Это я сам себя перехитрил - вводил Fs как Ts и при этом удивлялся - во как бывает:) Так, что "ступеньки" - это дискретизация по времени, а не по амплитуде. Но мое недоумение выбором столь высокого отношения частот остается. С типом double при Fs=2000 все нормально, а на single фильтр разваливается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Но мое недоумение выбором столь высокого отношения частот остается. Например при фильтрации сигнала с выхода дельта-сигма 3-4 порядка приходится делать фильтры 1:200 и подавлением сотни Дб на октаву. С типом double при Fs=2000 все нормально, а на single фильтр разваливается. Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Например при фильтрации сигнала с выхода дельта-сигма 3-4 порядка приходится делать фильтры 1:200 и подавлением сотни Дб на октаву. Я про данный случай. Разве, что облегчить требования к предварительному аналоговому фильтру? Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double. Даже на 8-битной платформе? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Даже на 8-битной платформе? :) Я о другом. Проблема не в том, что фильтр работает в плавающей точке. Даже если заменить плавающую точку на фиксированную - ошибка сохранится. Т.е. это матлаб дурит рассчитывая коэффициенты и усиление. Что до битности - то 32бита мне хватало при 64битном аккумуляторе. И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 17 декабря, 2013 Опубликовано 17 декабря, 2013 · Жалоба Честно говоря, не понял проблемы. Квантование к-тов 23-мя битами приводит к полюсу на единичной окружности. Тупое усечение мантиссы приводит к к-ту передачи фильтра 1/60. В обоих случаях ачх разваливается. На фоне такого безобразия вопрос о разрядности аккумулятора даже не стоит. Вывод: Данный фильтр в формате float не может быть реализован. Чо тут обсуждать-то? TSerg: Даже на 8-битной платформе? Да хоть на 2-битной. Реализовать можно любую точность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться