Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цифровая коррекция АЧХ, что-то типа цифрового фильтра
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
MSP430F
Всем доброго времени суток!
Коллеги, помогите пожалуйста. Такая вот задача.
Реализовал в цифре полосовой фильтр 50-250 Гц с крутизной спада -50 дБ/октава с пульсацией в полосе пропускания 0,15 дБ и срезом на границах полосы пропускания на этом же уровне (ФНЧ с частотой среза 250 Гц + ФВЧ с частотой среза 50 Гц). Частота дискретизации = 1250 выб/с. И тут выясняется, что аналоговая часть схемы, с которой на АЦП приходит сигнал имеет АЧХ как на рисунке ниже.



В цифрах это выглядит так:
F, Гц A, дБ
50 -1.072
60 -0.726
70 -0.502
80 -0.352
90 -0.242
100 -0.165
110 -0.107
120 -0.066
130 -0.036
140 -0.016
150 -0.004
160 0.000
До 250 Гц 0 дБ сохраняется. АЧХ объясняется в основном наличием конденсаторов не очень высокой емкости в цепи прохождения сигнала. Необходимо эту АЧХ нейтрализовать в цифре.
Было предложение подкрутить коэффициенты фильтра ФВЧ (тот, который на 50 Гц), но мне этот вариант как-то не очень нравится, так как фильтр эллиптический 5-го порядка, коэффициентов в нем 14 штук, рассчитаны с помощью fdatool в Матлабе и что и как крутить не ясно, да и стремно как-то – может и зазвенеть фильтр.
Более приемлемым кажется добавление некого корректирующего цифрового звена. Вот только как его рассчитать ? Еще момент. Экстраполяция в Excel этого графика АЧХ показала, что на частоте 25 Гц спад будет около -2,5 дБ. Если корректирующее звено даст такой же подъем, это не страшно, так как запас по крутизне небольшой есть. Но вот на более низких частотах что будет ? То есть было бы очень желательно, чтобы корректирующее звено давало необходимый подъем на 1.072 дБ на 50 Гц, а на более низких частотах этот подъем не превышал бы +2..+3 дБ. Понятно, что в точности скомпенсировать АЧХ вряд ли возможно, даже результируюшие -0,3 дБ на 50 Гц вместо имеющихся -1,072 дБ было бы очень хорошо!
Подскажите, как мне рассчитать такое корректирующее звено ? (а то проект уже горит).
Fat Robot
Там где ваш аналоговый фильтр ослабляет, корректирующий цифровой должен усиливать.

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

doc fdesign.arbmag

или в fdatool найти опцию Arbitrary Magnitude

А затем те пожелания по АЧХ, которые вы здесь так подробно изложили, нужно в формальном виде сообщить матлабу.

Можно совместить функцию корректора ачх с вашим эллиптическим фвч (я бы поступил именно так), задав результирующую ачх, а можно сделать отдельное звено.
iosifk
Цитата(MSP430F @ Jun 11 2014, 19:51) *
Реализовал в цифре полосовой фильтр 50-250 Гц с крутизной спада -50 дБ/октава с пульсацией в полосе пропускания 0,15 дБ и срезом на границах полосы пропускания на этом же уровне (ФНЧ с частотой среза 250 Гц + ФВЧ с частотой среза 50 Гц). Частота дискретизации = 1250 выб/с. И тут выясняется, что аналоговая часть схемы, с которой на АЦП приходит сигнал имеет АЧХ как на рисунке ниже.


Подскажите, как мне рассчитать такое корректирующее звено ? (а то проект уже горит).

Поднимите усиление на 50-100 Гц и все сетевые помехи будут ваши! Так можно сделать только если аналоговый тракт низкоомный и не подвержен помехам...
И еще. Если в аналоговом сигнале есть пульсации, то они тоже усилятся. Чтобы это проверить попросите в аналоговом тракте поставить побольше конденсаторов. И проверьте, что получится...
Fat Robot
Т.е. вы серьезно считаете, что затухание в 1 дб позволяет побороть сетевые помехи?

Цитата(iosifk @ Jun 11 2014, 19:08) *
Поднимите усиление на 50-100 Гц и все сетевые помехи будут ваши! Так можно сделать только если аналоговый тракт низкоомный и не подвержен помехам...
ViKo
Цитата(MSP430F @ Jun 11 2014, 18:51) *
АЧХ объясняется в основном наличием конденсаторов не очень высокой емкости в цепи прохождения сигнала. Необходимо эту АЧХ нейтрализовать в цифре.

"Зачем делать сложным то, что проще простого?" Добавьте емкости, навесьте параллельно. И шабаш.
MSP430F
Цитата(ViKo @ Jun 12 2014, 12:15) *
"Зачем делать сложным то, что проще простого?" Добавьте емкости, навесьте параллельно. И шабаш.


Вашими бы устами да медку!
Там все очень не просто. Кондеры и так взяли с максимальной емкостью, габариты девайса не позволяют уже бОльшие номиналы.
iosifk
Цитата(MSP430F @ Jun 13 2014, 01:41) *
Вашими бы устами да медку!
Там все очень не просто. Кондеры и так взяли с максимальной емкостью, габариты девайса не позволяют уже бОльшие номиналы.

А если сделать без конденсаторов вообще. Как усилитель постоянного тока. Взять операционники с малым дрейфом?
ViKo
Цитата(MSP430F @ Jun 13 2014, 00:41) *
Там все очень не просто. Кондеры и так взяли с максимальной емкостью, габариты девайса не позволяют уже бОльшие номиналы.

ФВЧ состоит из двух компонентов - конденсатора и резистора. rolleyes.gif
BratherLU
http://www.dsplib.ru/content/allpasseq/allpasseq.html

как вариант
_Anatoliy
Цитата(MSP430F @ Jun 11 2014, 14:41) *
Более приемлемым кажется добавление некого корректирующего цифрового звена. Вот только как его рассчитать ?

Делал как-то корректор интерливинга двух АЦП,нужно было компенсировать разность неравномерностей АЧХ порядка 0,3дБ в полосе 500МГц. Применил обычный фильтр КИХ, его ИХ рассчитывал методом частотных выборок. Получился очень даже неплохой результат.
MSP430F
Цитата(Fat Robot @ Jun 11 2014, 16:20) *
Там где ваш аналоговый фильтр ослабляет, корректирующий цифровой должен усиливать.

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

doc fdesign.arbmag

или в fdatool найти опцию Arbitrary Magnitude

А затем те пожелания по АЧХ, которые вы здесь так подробно изложили, нужно в формальном виде сообщить матлабу.

Можно совместить функцию корректора ачх с вашим эллиптическим фвч (я бы поступил именно так), задав результирующую ачх, а можно сделать отдельное звено.


Спасибо за совет.
Вот наконец-то кончились праздники и я занялся MATLABом. Решил сделать корректирующее звено.
Нашел в fdatool опцию Arbitrary Magnitude. Чуть модифицировал default пример и получил фильтр 2-го порядка с похожей на желаемую формой АЧХ. Форма-то похожа, но точность 0,5 дБ, так как я менял в Freq vector, Freq edges, Mag vector, Weight vector только те 4 элемента, которые там и были. Догадываюсь, что надо загнать в них все мои точки желаемой АЧХ, которых 12 штук.
Даже привел частоты к нормальному виду (в частоте Найквиста) и усиление в 1, а не в дБ. Получил вот что:
частоты 0.08 0.096 0.112 0.128 0.144 0.16 0.176 0.192 0.208 0.224 0.24 0.256
усиление 1.131 1.087 1.059 1.041 1.028 1.019 1.012 1.008 1.004 1.002 1.000 1.000 .

Вот только не понимаю и гугл мне не помог, как все эти четыре вектора ( Freq vector, Freq edges, Mag vector, Weight vector ) правильно оформить с моими данными ???
Fat Robot
Вы невероятно далеко продвинулись в деле проектирования корректора. Осталось совсем чуть-чуть.

Freq edges - для multiband фильтра границы полос. у вас 2 полосы если фвч, и 1 полоса, если корректор. Оптимизация делается в каждой полосе отдельно, а на границах полос - что получится.

Freq vector - Вектор частот.

Mag vector - Вектор амплитуд, соответствующий частотам из Freq vector

Weight vector - вектор весов. Т.е. насколько точно должно быть выполнено требование по амплитуде Mag_vector(i) на частоте Freq_vector(i) относительно других точек. Начните с равновесной оптимизации: всем точкам одинаковые веса.

посмотрите здесь примеры
http://www.mathworks.co.uk/help/signal/ref...ign.arbmag.html
думаю, вы сможете даже найти что-то близкое к вашему случаю

Цитата(MSP430F @ Jun 16 2014, 10:51) *
Даже привел частоты к нормальному виду (в частоте Найквиста) и усиление в 1, а не в дБ.
MSP430F
Цитата(Fat Robot @ Jun 16 2014, 15:15) *
Weight vector - вектор весов. Т.е. насколько точно должно быть выполнено требование по амплитуде Mag_vector(i) на частоте Freq_vector(i) относительно других точек. Начните с равновесной оптимизации: всем точкам одинаковые веса.


Решил последовать Вашему совету и рассчитал ФВЧ сразу с коррекцией. Получилось. ФВЧ 5-го порядка и спад АЧХ имеет около 50 дБ/октаву и филигранно компенсирует неравномерность АЧХ аналогового тракта. Огромное человеческое Вам СПАСИБО!

Но осталось два вопроса.

1. В чем разница опций Least Pth-norm и Constrained least Pth-norm ?

2. Если я задаю вектор Weight vector [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10], получаю одни коэффициенты, если
[100 100 100 100 100 100 100 100 100 100 100 100 100 100 100] - другие.
Если в векторе Weight vector задать на 1 элемент меньше, то вылезает ошибка "The frequency, desired value, and error weighting must be vectors of the same length.". Из чего можно сделать опосредованный вывод, что этот вектор определяет какие-то error weighting ?
Это подтверждает также то, что если задать вектор, состоящий из единиц, то получается очень неточная компенсация АЧХ.
Так в каких же единицах задается этот вектор ?

Fat Robot
На здоровье. Хорошо, что у вас все получилось хорошо.

По поводу costrained/unconstrained начните отсюда:
http://www.mathworks.co.uk/help/optim/ug/fminunc.html
http://www.mathworks.co.uk/help/optim/ug/u...ms.html#brnoxxo
http://www.mathworks.co.uk/help/optim/ug/c...l?s_tid=doc_12b
ну а дальше, как пойдет. При проектировании несложных фильтров разница не должна быть заметна.

Про вектор весов я написал в своем предыдущем сообщении. И здесь
http://www.mathworks.co.uk/help/dsp/ref/iirlpnormc.html

Что касается единиц весов, то я не знаю, почему так получается. Я до настоящего момента считал, что веса нормируются внутри полос. Посмотрите код функции iirlpnormc, что там вызывается, во что пересчитываются веса, как они используются. Заодно и здесь расскажете. Будет интересно.


Цитата(MSP430F @ Jun 16 2014, 13:44) *
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.