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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Коэффициент усиления цифрового фильтра
Verizon
сообщение Feb 12 2016, 10:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Имеется структурная схема алгоритма цифровой обработки информации в которой есть цифровые КИХ фильтры. Данные на отдельный фильтр поступают в формате 12 бит со знаком. Коэффициенты в формате 16 бит со знаком. Как в этом случае рассчитывается коэффициент усиления такого фильтра?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 11:20
Сообщение #2





Guests






Коэффициент усиления не имеет отношения к разрядности и формату и задается на этапе проектирования фильтра.
В процессе трансформации разрядности вы можете выбрать коэффициент масштабирования самостоятельно.
Go to the top of the page
 
+Quote Post
Verizon
сообщение Feb 12 2016, 12:33
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Цитата(TSerg @ Feb 12 2016, 13:20) *
Коэффициент усиления не имеет отношения к разрядности и формату и задается на этапе проектирования фильтра.
В процессе трансформации разрядности вы можете выбрать коэффициент масштабирования самостоятельно.

Спасибо. Да, масштабирование это понятно. Но в принципе как считается коэффициент усиления КИХ? Я так полагаю, что необходимо просуммировать разрядность, кроме знака и учесть число ненулевых коэффициентов. Тоесть если сигнал имеет разрядность 12 бит со знаком, а коэффициенты имеют разрядность 16 бит со знаком и предположим что число ненулевых коэффициентов 25 (вмещается в 2 в степени 5), то выходная разрядность должна быть 12 + 16 + 5 = 33. Поскольку знаковый разряд один для всех то получается 32 бита. Тоесть если предположить, что сигнал который имеет заполнение все 12 бит подать на фильтр то на выходе он возрастет на 20 бит 32 - 12. Если считать каждый разряд как 6 dB то получится 6*20 = 120 dB. Это при условии, что коэффициенты по модулю имеют максимальные значения в пределах 16 бит.

Я сомневаюсь в таких рассуждениях. Поскольку не все коэффициенты имеют значения по модулю с заполнением 16 бит. Только некоторые. И вообще не понятно во сколько раз в этом случае (при указанных выше данных) увеличится сигнал... Кому не лень, подскажите пожалуйста популярно как все считается.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 12 2016, 12:47
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



По-моему, нужно сложить все коэффициенты КИХ, без учета знака. На какой-то частоте они все сложатся со знаком +. Это и будет коэффициент усиления фильтра.
А разрядность - это другое.
При желании, можете пропорционально изменить все коэффициенты, чтобы получить нужное усиление. Например, 1. На форме АЧХ это не скажется.
Go to the top of the page
 
+Quote Post
Verizon
сообщение Feb 12 2016, 13:22
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Цитата(ViKo @ Feb 12 2016, 14:47) *
По-моему, нужно сложить все коэффициенты КИХ, без учета знака. На какой-то частоте они все сложатся со знаком +. Это и будет коэффициент усиления фильтра.
А разрядность - это другое.
При желании, можете пропорционально изменить все коэффициенты, чтобы получить нужное усиление. Например, 1. На форме АЧХ это не скажется.

Спасибо. Допустим имеются коэффициенты
Код
Коэффициенты фильтра: const int16_T B[51] = {
           0,        116,            0,      -214,            0,        354,            0,       -540,            0,
       772,            0,    -1042,            0,      1339,            0,     -1645,            0,      1939,
           0,    -2199,            0,      2403,            0,     -2533,            0,      2577,            0,
   -2533,            0,      2403,            0,     -2199,            0,      1939,            0,     -1645,
          0,      1339,            0,     -1042,            0,        772,             0,      -540,             0,
      354,            0,        214,             0,       116,            0
};

Явно, что они симметричны. Если сложить все без знака будет 17673. Достаточно круто. Получается, что если на вход фильтра подать сигнал уровнем 1 то он должен увеличиться на 17673 на нужной частоте?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 13:35
Сообщение #6





Guests






Цитата(Verizon @ Feb 12 2016, 15:33) *
Я сомневаюсь в таких рассуждениях.


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

1. На основе данных о сигнале определяются:
- физический предельный диапазон сигнала;
- отношение сигнал шум;
- возможность предварительной аналоговой фильтрации для его повышения;
- применение аналогового антиалис-фильтра;
- выбор АЦП по разрядности и быстродействию и C/Ш.

2. На основе требований к ЦОС определяется та или иная динамическая система ( к примеру - ФНЧ ).
Выполняется математическое проектирование ФНЧ и определяется потенциал перерегулирования ( на основе step-функции ).
В общем случае, все равно потребуется выяснение предельных режимов работы ДС.

3. На основе требования к быстродействию и другим параметрам делается выбор аппаратной платформы и принимается решение о вычислениях в той или иной сетке в том или ином формате.
Если float-формат - тут все спокойней и ближе к чистой математике.
Если выбран фиксированная точка - тут свои ньюансы.
Если целочисленный формат - тут во все тяжкие sm.gif

К примеру, выбран АЦП 12 р. С учетом разрядности платформы операции могут выполняться аппаратно на 16р и программно - кратно 16р.
К примеру: имеется умножитель аппаратный 16x16=32
Для большей точности вычислений целесообразно использовать представление входных данных 12р как подмножество 16р, вычисления выполнять в максимальном варианте ( аккумулятор на 32р), а результат выдавать в 16р, но в диапазоне входных данных 12р.

С учетом возможного перерегулирования ( к примеру ФНЧ Баттерворта имеет до 20%) - мы могли бы выдавать в формате значащих 13р и не имели бы переполнения.
Ну а так, имеет смысл выдавать в формате 16р в соответствии с возможностями платформы по интерфейсу.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 12 2016, 13:36
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Verizon @ Feb 12 2016, 16:22) *
Если сложить все без знака будет 17673. Достаточно круто. Получается, что если на вход фильтра подать сигнал уровнем 1 то он должен увеличиться на 17673 на нужной частоте?

Да. Можно сообразить, что умножение, например, на 2577 даром не пройдет. rolleyes.gif
Можно просто иначе интерпретировать разряды в выходных данных, чтобы вернуться к 1.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 13:39
Сообщение #8





Guests






Цитата(Verizon @ Feb 12 2016, 16:22) *
Спасибо. Допустим имеются коэффициенты
Явно, что они симметричны. Если сложить все без знака будет 17673. Достаточно круто. Получается, что если на вход фильтра подать сигнал уровнем 1 то он должен увеличиться на 17673 на нужной частоте?


Нет, не так. Если 1 - это максимальный возможный сигнал, то выполните последовательное суммирование коэффициентов и, после каждой суммы, смотрите на частный результат. Это будет реакцией на step-функцию. После завершения переходного процесса, вы получите некоторую сумму, которая и будет gain на нулевой частоте.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 12 2016, 13:41
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(TSerg @ Feb 12 2016, 16:39) *
После завершения переходного процесса, вы получите некоторую сумму, которая и будет gain на нулевой частоте.

Но на некой другой частоте gain будет больше.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 14:05
Сообщение #10





Guests






Цитата(ViKo @ Feb 12 2016, 16:41) *
Но на некой другой частоте gain будет больше.


Да, конечно. Для этого и надо знать изначальную задачу. Судя по коэфф. - это некий резонансный фильтр с небольшим остатком gain на постоянке ( если только это не погрешности вычисления коэф. )

Реакция на step-функцию:
Прикрепленное изображение


Остаток = 505, что дает gain(0) = 505/(2^16-1) =~ 0.008
Go to the top of the page
 
+Quote Post
Verizon
сообщение Feb 12 2016, 14:10
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Цитата
Судя по коэфф. - это некий резонансный фильтр с небольшим остатком gain на постоянке

Это полосовой фильтр с окном Чебышева.
Цитата(TSerg @ Feb 12 2016, 15:39) *
Нет, не так. Если 1 - это максимальный возможный сигнал, то выполните последовательное суммирование коэффициентов и, после каждой суммы, смотрите на частный результат. Это будет реакцией на step-функцию. После завершения переходного процесса, вы получите некоторую сумму, которая и будет gain на нулевой частоте.

Я предположил, что 1 это минимально возможный сигнал. Максимально возможный при 12 битах данных со знаком 2048. При данных коэффициентах насколько возрастет эта 1? Если сложить все коэффициенты то получится больше чем 84 dB (> 17000 раз). Очевидно это не верно. А как верно?

Сообщение отредактировал Verizon - Feb 12 2016, 14:11
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 14:27
Сообщение #12





Guests






Еще раз, не имеет смысла говорить в терминах платформы, алгоритмов вычисления, принятой сетки и формата данных о каком либо коэффициенте усиления.
Ваша задача - не допустить переполнения сетки. Исходить нужно из вышесказанного, т.е. определить наихудший вариант для аккумулятора.
После умножения: 12+16=28. Число значимых коэффициентов у Вас 26 ( принимаем 2^5 = 32 < 26). Т.е. теоретический максимум аккумулятора 28 + 5 = 33 бит, что почти укладывается в акк. 32 бит. В реальности, с учетом ограниченности значений коэффициентов (< 2^16) и их числа (26<32) - укладка в 32р обеспечена.
Go to the top of the page
 
+Quote Post
Verizon
сообщение Feb 12 2016, 14:40
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Цитата(TSerg @ Feb 12 2016, 16:27) *
Еще раз, не имеет смысла говорить в терминах платформы, алгоритмов вычисления, принятой сетки и формата данных о каком либо коэффициенте усиления.
Ваша задача - не допустить переполнения сетки. Исходить нужно из вышесказанного, т.е. определить наихудший вариант для аккумулятора.
После умножения: 12+16=18. Число значимых коэффициентов у Вас 26 ( принимаем 2^5 = 32 < 26). Т.е. теоретический максимум аккумулятора 18 + 5 = 23 бит, что укладывается с большим запасом в акк. 32 бит.

12+16 = 28, 28+5 = 33. Поскольку знаковый бит один для всех то 32 бита. Это понятно. И тем не менее если предположить, что на цифровой фильтр с известным набором коэффициентов подан сигнал в формате 12 бит со знаком. Выходной сигнал с фильтра имеет формат 32 бита со знаком. Грубо во сколько раз возрастет сигнал на выходе фильтра по отношению ко входу?

Сообщение отредактировал Verizon - Feb 12 2016, 14:44
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Feb 12 2016, 14:50
Сообщение #14





Guests






Что тут непонятного?

У Вас есть (к примеру) всеполосный КИХ-фильтр ( длиной K taps ), т.е. все коэффициенты = 1 ( в терминах сетки M, к примеру)
Есть входной сигнал разрядностью N.
Задача - сохранить динамический диапазон.

Используем умножитель M * N, (при желании можно и M * M, без ограничения сказанного)
Разрядность на выходе умножителя MN = M + N
Поскольку необходимо накопить в аккумуляторе за время одного цикла K-значений с разрядностью MN, то необходимо иметь разрядность аккумулятора больше или равной R = MN + T, где T >= log2(K)

После вычисления суммы можно использовать результат с разрядностью от N и выше.

P.S.
Это максималистский подход.
Go to the top of the page
 
+Quote Post
Verizon
сообщение Feb 12 2016, 15:00
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-01-16
Пользователь №: 90 225



Цитата(TSerg @ Feb 12 2016, 16:50) *
Что тут не понятного?

У Вас есть (к примеру) всеполосный КИХ-фильтр ( длиной K taps ), т.е. все коэффициенты = 1 ( в терминах сетки M, к примеру)
Есть входной сигнал разрядностью N.
Задача - сохранить динамический диапазон.

Используем умножитель M * N
Разрядность на выходе умножителя MN = M + N
Поскольку необходимо накопить в аккумуляторе за время одного цикла K-значений с разрядностью MN, то необходимо иметь разрядность аккумулятора больше или равной R = MN + T, где T >= log2(K)

После вычисления суммы можно использовать результат с разрядностью от N и выше.

С разрядностью все понятно. Вопрос в том как определить на сколько возрастет сигнал на выходе фильтра по отношению ко входу при данных конкретных коэффициентах.
Код
Коэффициенты фильтра: const int16_T B[51] = {
           0,        116,            0,      -214,            0,        354,            0,       -540,            0,
       772,            0,    -1042,            0,      1339,            0,     -1645,            0,      1939,
           0,    -2199,            0,      2403,            0,     -2533,            0,      2577,            0,
   -2533,            0,      2403,            0,     -2199,            0,      1939,            0,     -1645,
          0,      1339,            0,     -1042,            0,        772,             0,      -540,             0,
      354,            0,        214,             0,       116,            0
};

Явно, что при другом наборе коэффициентов картина изменится.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 00:41
Рейтинг@Mail.ru


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