Перейти к содержанию
    

GAIN рекурсивного НЧ, синтезированного FDAtool MATLAB

Синтезирую простейший фильтр НЧ второго порядка по Баттерворту. Fs=2000, Fc=0,01. Естественно, что деноменаторные коэффициенты получаются с 4 девятками, а так же фильтр оказывается с высоким коэфф. усиления. Матлаб расчитывает требуемый GAIN как 2.5E-10. Однако работающий фильтр (float) имеет усиление в 60 раз меньше.

Схема эксперимента матлабе. На модель фильтра (самописную, а не встроенную функцию) подаю единичную ступеньку. Через большое число циклов виду устоявшийся уровень 0.0166.

Где собака порылась?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где собака порылась?

 

Думаю виноват кривой FDAtool. Тоже пытался уменьшить усиления в секциях - безрезультатно.

Если увеличиваешь количество секций - тупо увеличивает подавление.

Если начинаешь ручками крутить нули/полюса - порядок GAIN становится зеркален порядку коэффициентов.

Как-то не хочется доверять результатом такой глючной тулзы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В чем смысл такого большого отношения частот дискретизации и среза?

 

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

 

А по существу?

Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами,

Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

А по существу?

Ну просто интересно. Уже вставил в проект, пересчитав фильтр с несколько иными параметрами,

Fc=0,01, Fs=300. Gain, выданный FDA, не соответствовал реальному в 0.56 раз.

 

По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности.

Поставьте, к примеру, Fs=1 Гц и все получится.

Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По существу - не надо верить в чудеса математики, если заведомо выходите за пределы точности.

Поставьте, к примеру, Fs=1 Гц и все получится.

Поэтому еще раз спрашиваю - зачем такое большое отношение Fs/Fc?

А откуда известно, что IIR с такими параметрами заведомо выходит за пределы точности?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость TSerg

Вы что-то слышали про вычитание близких чисел? :)

 

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

 

float a, b, c;

a=123456789;

b=123456788;

c=a-b;

 

Что мы должны получить? Конечно же 1.

Но,

printf("Result: %f\n", f);

дает ответ: 8.

 

Неплохо, да?

Т.е. при наличии относительной погрешности представления исходных данных около 3E-8, мы получили относительную погрешность результата более чем в 2E+8 раз больше :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы что-то слышали про вычитание близких чисел? :)

 

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

...

Это понятно. Но..

В моем примере из 7 мантисных чисел действующих не менее 3х!.

Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость TSerg
Это понятно. Но..

В моем примере из 7 мантисных чисел действующих не менее 3х!.

Много это или мало? Сам же FDA tool имеет замечательные инструменты для ответа на такие вопросы. Как для INT, так и для FLOAT.

 

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

 

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

 

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

 

Аналоговый

post-29537-1387215662_thumb.png

 

Цифровой Fs=1 Hz

post-29537-1387215711_thumb.png

 

Цифровой Fs=10 Hz

post-29537-1387215737_thumb.png

 

Цифровой Fs=300 Hz

post-29537-1387215759_thumb.png

 

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

 

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

post-29537-1387215967_thumb.png

 

post-29537-1387216011_thumb.png

 

Вот у нас Gain и поплыл и это при абсолютно здравой Fs=1 Hz и в расчетной сетке 64 бита ( double ).

А если бы взяли 100; 300; 2000 Hz ? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

post-70242-1387249778_thumb.jpg

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость TSerg

Это я сам себя перехитрил - вводил Fs как Ts и при этом удивлялся - во как бывает:)

Так, что "ступеньки" - это дискретизация по времени, а не по амплитуде.

 

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

 

С типом double при Fs=2000 все нормально, а на single фильтр разваливается.

post-29537-1387264139_thumb.jpg post-29537-1387264052_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

С типом double при Fs=2000 все нормально, а на single фильтр разваливается.

 

Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Даже если выполнить фильтры FDA в целочисленной математике - результат усиления сойдётся с double.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я о другом. Проблема не в том, что фильтр работает в плавающей точке.

Даже если заменить плавающую точку на фиксированную - ошибка сохранится.

Т.е. это матлаб дурит рассчитывая коэффициенты и усиление.

 

Что до битности - то 32бита мне хватало при 64битном аккумуляторе.

И эти параметры можно было бы снизить ещё, если бы была возможность уменьшить усиление в секции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

TSerg:

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

 

Да хоть на 2-битной. Реализовать можно любую точность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...