Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Коэффициент усиления цифрового фильтра
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Verizon
Имеется структурная схема алгоритма цифровой обработки информации в которой есть цифровые КИХ фильтры. Данные на отдельный фильтр поступают в формате 12 бит со знаком. Коэффициенты в формате 16 бит со знаком. Как в этом случае рассчитывается коэффициент усиления такого фильтра?
TSerg
Коэффициент усиления не имеет отношения к разрядности и формату и задается на этапе проектирования фильтра.
В процессе трансформации разрядности вы можете выбрать коэффициент масштабирования самостоятельно.
Verizon
Цитата(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 бит. Только некоторые. И вообще не понятно во сколько раз в этом случае (при указанных выше данных) увеличится сигнал... Кому не лень, подскажите пожалуйста популярно как все считается.
ViKo
По-моему, нужно сложить все коэффициенты КИХ, без учета знака. На какой-то частоте они все сложатся со знаком +. Это и будет коэффициент усиления фильтра.
А разрядность - это другое.
При желании, можете пропорционально изменить все коэффициенты, чтобы получить нужное усиление. Например, 1. На форме АЧХ это не скажется.
Verizon
Цитата(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 на нужной частоте?
TSerg
Цитата(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р в соответствии с возможностями платформы по интерфейсу.
ViKo
Цитата(Verizon @ Feb 12 2016, 16:22) *
Если сложить все без знака будет 17673. Достаточно круто. Получается, что если на вход фильтра подать сигнал уровнем 1 то он должен увеличиться на 17673 на нужной частоте?

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


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

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


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

Реакция на step-функцию:
Нажмите для просмотра прикрепленного файла

Остаток = 505, что дает gain(0) = 505/(2^16-1) =~ 0.008
Verizon
Цитата
Судя по коэфф. - это некий резонансный фильтр с небольшим остатком gain на постоянке

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

Я предположил, что 1 это минимально возможный сигнал. Максимально возможный при 12 битах данных со знаком 2048. При данных коэффициентах насколько возрастет эта 1? Если сложить все коэффициенты то получится больше чем 84 dB (> 17000 раз). Очевидно это не верно. А как верно?
TSerg
Еще раз, не имеет смысла говорить в терминах платформы, алгоритмов вычисления, принятой сетки и формата данных о каком либо коэффициенте усиления.
Ваша задача - не допустить переполнения сетки. Исходить нужно из вышесказанного, т.е. определить наихудший вариант для аккумулятора.
После умножения: 12+16=28. Число значимых коэффициентов у Вас 26 ( принимаем 2^5 = 32 < 26). Т.е. теоретический максимум аккумулятора 28 + 5 = 33 бит, что почти укладывается в акк. 32 бит. В реальности, с учетом ограниченности значений коэффициентов (< 2^16) и их числа (26<32) - укладка в 32р обеспечена.
Verizon
Цитата(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 бита со знаком. Грубо во сколько раз возрастет сигнал на выходе фильтра по отношению ко входу?
TSerg
Что тут непонятного?

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

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

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

P.S.
Это максималистский подход.
Verizon
Цитата(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
};

Явно, что при другом наборе коэффициентов картина изменится.
TSerg
Ви так ничего и не поняли.

Цитата(Verizon @ Feb 12 2016, 18:00) *
С разрядностью все понятно.


Сомневаюсь, сильно.

Цитата(Verizon @ Feb 12 2016, 18:00) *
Явно, что при другом наборе коэффициентов картина изменится.


Конечно, но Вам были предоставлены несколько вариантов: от Viko - конкретный, от меня - максималистский (в общем) и еще один:

См. максималистский, с уточнениями:
Вместо 2^16 (в максимальном по разрядности Вашем случае), используем для конкретного случая набора коэффициентов - максимальный по модулю коэффициент и полагаем его константой на все K-taps.

Что это дает, для Вашего случае, смотрим далее:

Максимальный коэффициент по модулю: 2577
Максимальное входное число (12р): 2047
Максимальное произведение: 2577*2047 = 5 275 119
Максимальная сумма ( с учетом 26-ти ненулевых const коэффициентов = 2577 ) = 26 * 5 275 119 = 137 153 094
Число потребных разрядов для аккумулятора:
N = logN(26*2577*2047;2) = 27,03

Как их интерпретировать и сколько оставить - это Ваша задача.
Verizon
Цитата(TSerg @ Feb 12 2016, 17:34) *
Конечно, но Вам были предоставлены несколько вариантов: от Viko - конкретный, от меня - максималистский (в общем) и еще один:

Больше подходит конкретный. Получается коэффициент усиления порядка 17 000. Круто.
Если сделать масштабирование и выбросить младшие 12 бит то 17 000 необходимо поделить на 2^12 или на 4096 Получится 4. Если это так то вопрос с коэффициентом усиления цифрового фильтра ясен.
TSerg
Вы опять о чем-то своем.. ну да ладно.
Нет понятия "коэффициент усиления" для цифровой системы из-за разрядности данных или операций.
ViKo
Цитата(Verizon @ Feb 12 2016, 20:17) *
Больше подходит конкретный. Получается коэффициент усиления порядка 17 000. Круто.
Если сделать масштабирование и выбросить младшие 12 бит то 17 000 необходимо поделить на 2^12 или на 4096 Получится 4. Если это так то вопрос с коэффициентом усиления цифрового фильтра ясен.

Вам нужно в Матлабе промоделировать. Или в другом симуляторе фильтров.
Verizon
Цитата(TSerg @ Feb 12 2016, 21:06) *
Вы опять о чем-то своем.. ну да ладно.
Нет понятия "коэффициент усиления" для цифровой системы из-за разрядности данных или операций.

Может и нет. Это условность. Но необходимая.
Вообще спасибо за полезную информацию.
V_G
Ваши космические коэффициенты фильтра образуются из того, что вы считаете диапазоном 16-разрядного знакового числа -32768...+32767. Тогда как в ЦСП имеется понятие формата с фиксированной точкой. Для формата 1.15 диапазон будет -1...+1. Пересчитайте свои целые коэффициенты в этот формат, и усиление станет порядка 1.
Так что "усиление" - действительно условность, зависящая от выбора формата.
Verizon
Цитата(V_G @ Feb 13 2016, 00:53) *
Ваши космические коэффициенты фильтра образуются из того, что вы считаете диапазоном 16-разрядного знакового числа -32768...+32767. Тогда как в ЦСП имеется понятие формата с фиксированной точкой. Для формата 1.15 диапазон будет -1...+1. Пересчитайте свои целые коэффициенты в этот формат, и усиление станет порядка 1.
Так что "усиление" - действительно условность, зависящая от выбора формата.

Тоесть Вы хотите сказать, что такого понятия как "усиление" в цифровой системе в принципе не существует? Я тоже с этим согласен. Посоветуйте пожалуйста как популярно и коротко убедить в этом старшего коллегу, который зациклился на этом "усилении". Я так понимаю, что цифровая система она в принципе ничего не усиливает. Хотя полосовой КИХ вроде как и усиливает...? Если не сложно поясните пожалуйста как правильно все можно обставить это так называемое цифровое "усиление". Если можно, что такое формат 1.15 ?
TSerg
Все очень просто: усиление присуще только аналоговым системам.
Термин "усиление", которым оперируют в ЦОС (т.е. на уровне дискретного сигнала) - на самом деле, это масштабирование, поскольку при этом не порождается новых значений на выходе в промежутке между исходными значениями на входе.
Да, можно говорить об интерполяции и пере-дискретизации, но это искусственные приемы, которые только предполагают, что так оно будет в промежутке между дискретами.

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

Простейший рекурсивный ФНЧ первого порядка описывается разностным уравнением:

Y[i] = a * Y[i-1] + b * X[i] (1)

Как правило, принимается a + b = 1. В этом случае, коэффициент усиления (передачи) на нулевой частоте K(0) = 1.

Предположим, мы выбрали ( по тем или иным соображениям и это известно, как выбирать):
a = 0.1
b = 0.9

Предположим, что у нас сетка 16р, включая знак.
В этом случае, масштабный множитель для перевода из десятичной системы в целочисленную равен 2^15-1 = 32767

Тогда:
a = 0.1 * 32767 = 3276.7 = 3277
b = 0.9 * 32767 = 29490.3 = 29490
В целочисленной сумме a + b = 32767, что эквивалентно К(0) = 1 (коэффициент передачи на нулевой частоте)

Алгоритм вычисления реакции фильтра:
Y[i] = 3277 * Y[i-1] + 29490 * X[i]

Можно ли назвать числа 3277 и 29490 коэффициентами усиления по конкретной переменной? Назвать-то можно, только это уже кодирование и к математике оно имеет относительное отношение.

Предположим входной сигнал имеет дискретность 12р, включая знак. Т.е. максимальные входные числа: (+/-) 2047
Можно ли сказать, что в результате умножения 2047 на 3277 мы получили усиление в почти 7 миллионов раз?
Такое утверждение - чушь собачья.
Это просто результат умножения кодов.

Теперь, насчет усиления в (1)

Что нам мешает написать:

Y[i] = K * (a * Y[i-1] + b * X[i] (1)), где K - типа коэффициент усиления?
Ничто не мешает, как не мешает это и реализовать.
Все, что потребуется ( если говорим о целочисленных вычислениях) - это перейти к большей длине сетки, дабы не потерять значимые разряды или не влететь в переполнение.

Будет ли это считаться коэффициентом усиления?
Абстрактно, по математике и до перевода в цифру - да, можно так сказать.
После перехода к дискретам - конечно же нет.
Это всего лишь коэффициент масштабирования.
V_G
Цитата(Verizon @ Feb 13 2016, 21:36) *
Если можно, что такое формат 1.15 ?

Продолжая учебник,
можно сказать, что понятное вам 16-разрядное целое число имеет формат 16.0, т.е. все разряды располагаются слева от разделителя целой и дробной части и имеют веса 1,2,4,8 и т.д. Формат 1.15 - это когда 1 разряд в целой части, а остальные 15 - в дробной. Веса разрядов справа от точки будут соответственно 1/2, 1/4, 1/8 и т.д. Точно также в десятичной системе веса цифр в целой части равны положительным степеням десятки, а в дробной - отрицательным.
И все это - форматы с фиксированной точкой.
TSerg
Дополню.
В "наше" время, да и сейчас этим пользуюсь, мы использовали формат с фиксированной точкой 0.Х
Что это означает? Это означает, что числа не превышали по модулю 1.0
Пример (bin/dec формат):
0.1 == 0.5
0.11 == 0.75 (0.5 + 0.25)
0.111 == 0.875 (0.5 + 0.25 + 0.125)
и т.д.
Смысл понятен, надеюсь. ( см. пост #24)

Преимущество перед целочисленкой - никогда не будет переполнения, поскольку:
- результаты сложения контролируются на уровне первоначальной математики;
- результаты умножения, к примеру 0.5*0.5 = 0.25 - всегда меньше 1

P.S.
В формате bin: пример 0.1, где ноль означает знак, а при знаке 1 - числа представляются в дополнительном коде.
Пример для сетки 8р
+ 0.5 (dec) == 0.1000000 (bin)
- 0.5 (dec) == 1.0111111 + 1 == 1.1000000 (bin)
V_G
1.15 знаковый по модулю не превышает 1. Вообще в знаковых форматах старший разряд имеет отрицательный вес (-32768 в формате 16.0 и -1 в формате 1.15)
TSerg
Ну.. Тогда мы "изобретали" все впервой и не до стандартов было, их просто не было.

>Формат 1.15 - это когда 1 разряд в целой части, а остальные 15 - в дробной.

Мы целой частью не пользовались, числа были принципиально меньше 1.0 - я это специально уточняю.
Старший разряд, есс-но - знаковый.
Verizon
Цитата(TSerg @ Feb 13 2016, 14:33) *
Теперь, насчет усиления в (1)

Что нам мешает написать:

Y[i] = K * (a * Y[i-1] + b * X[i] (1)), где K - типа коэффициент усиления?
Ничто не мешает, как не мешает это и реализовать.
Все, что потребуется ( если говорим о целочисленных вычислениях) - это перейти к большей длине сетки, дабы не потерять значимые разряды или не влететь в переполнение.

Будет ли это считаться коэффициентом усиления?
Абстрактно, по математике и до перевода в цифру - да, можно так сказать.
После перехода к дискретам - конечно же нет.
Это всего лишь коэффициент масштабирования.

Спасибо. Доходчиво.
Если рассуждать на уровне коэффициентов фильтра: можно же просто поделить все коэффициенты на наименьшее значение. Тем более, что они все симметричны. И что тогда? Очевидно фильтр останется прежним. Но если пересчитать так называемый "коэффициент" то он может измениться в сотню раз. Что получается. Один и тот же фильтр имеет разные коэффициенты усиления? Очевидно, что так рассуждать нельзя. Скорее всего к фильтру можно применять фразу масштабирование. Будут-ли такие рассуждения тоже корректны?

Цитата
Продолжая учебник,
можно сказать, что понятное вам 16-разрядное целое число имеет формат 16.0, т.е. все разряды располагаются слева от разделителя целой и дробной части и имеют веса 1,2,4,8 и т.д. Формат 1.15 - это когда 1 разряд в целой части, а остальные 15 - в дробной. Веса разрядов справа от точки будут соответственно 1/2, 1/4, 1/8 и т.д. Точно также в десятичной системе веса цифр в целой части равны положительным степеням десятки, а в дробной - отрицательным.
И все это - форматы с фиксированной точкой.

Спасибо. Понятно.
TSerg
Цитата(Verizon @ Feb 13 2016, 18:35) *
Спасибо. Доходчиво.
Если рассуждать на уровне коэффициентов фильтра: можно же просто поделить все коэффициенты на наименьшее значение.


Вы просто не путайте математику ЦОС и ее реализацию на абстрактных, тем более - конкретных платформах + "свои" алгоритмы на каждой из них.

P.S.
Вы, "нормальные" книжки/учебники по ЦОС (DSP) читать не пробовали?
Позвольте, но это же увлекательнейшее занятие!

Гольденберг, Блейхут, Рорабаух, Голд, Рейдер, Рабинер, ...etc
Verizon
Цитата(TSerg @ Feb 13 2016, 17:42) *
Вы просто не путайте математику ЦОС и ее реализацию на абстрактных, тем более - конкретных платформах + "свои" алгоритмы на каждой из них.

P.S.
Вы, "нормальные" книжки/учебники по ЦОС (DSP) читать не пробовали?
Позвольте, но это же увлекательнейшее занятие!

Гольденберг, Блейхут, Рорабаух, Голд, Рейдер, Рабинер, ...etc

Да. Понятно. Не то.
Книжки читаю. Наскоками. Возня с железом занимает много времени. Там тоже свои приколы с которыми нужно возиться...
TSerg
Цитата(Verizon @ Feb 13 2016, 19:40) *
Да. Понятно. Не то.
Книжки читаю. Наскоками. Возня с железом занимает много времени. Там тоже свои приколы с которыми нужно возиться...


Прикол в том, что надо "возиться" не с железом, а получить системное образование по DSP ( самостоятельно или как ).
Если Вы чистый железячник и кодировщик, то вопросы по всяким коэффициентам "усиления" не должны были Вас волновать.
Это вопрос к проектировщику ЦОС.
Verizon
Цитата(TSerg @ Feb 13 2016, 20:29) *
Прикол в том, что надо "возиться" не с железом, а получить системное образование по DSP ( самостоятельно или как ).
Если Вы чистый железячник и кодировщик, то вопросы по всяким коэффициентам "усиления" не должны были Вас волновать.
Это вопрос к проектировщику ЦОС.

Я тоже так считаю. Но работа ставит свои условия...
Corner
Коэффициент передачи КИХ фильтра это Фурье от коэффициентов.
АЧХ корень из суммы квадратов действительной и мнимой частей, а ФЧХ арктангенс от их отношения.
Вот уже третья страница ответов. И один стеб над ТСом.
Verizon
Цитата(Corner @ Feb 14 2016, 09:02) *
Коэффициент передачи КИХ фильтра это Фурье от коэффициентов. Действительная часть АЧХ, мнимая ФЧХ. Не парьте человеку мозг.

А можна популярней по этому поводу. Где можно почитать.
_Anatoliy
Цитата(Corner @ Feb 14 2016, 10:02) *
Коэффициент передачи КИХ фильтра это Фурье от коэффициентов. Действительная часть АЧХ, мнимая ФЧХ. Не парьте человеку мозг.

А мне мама говорила что за АЧХ отвечает модуль комплексного числа sqrt(a^2+b^2),а за ФЧХ аргумент atan(b/a).Не парьте человеку мозг©.
Corner
Цитата(_Anatoliy @ Feb 14 2016, 15:35) *
А мне мама говорила что за АЧХ отвечает модуль комплексного числа sqrt(a^2+b^2),а за ФЧХ аргумент atan(b/a).Не парьте человеку мозг©.

А чего сразу не ответили? Приходится вас провоцировать на переход от стеба к внятным ответам. Любите попинать того кто слабее?
ViKo
Если человек выбрал и рассчитал неким образом фильтр с требуемой АЧХ, то эта АЧХ и дает ответ на то, какой коэффициент усиления на какой частоте получается. И если среди коэффициентов импульсной характеристики фильтра фигурируют числа вроде 2577, то где-то сбоку в скобках должен быть написан результирующий коэффициент передачи в полосе пропускания.
Verizon
Цитата(ViKo @ Feb 14 2016, 16:56) *
Если человек выбрал и рассчитал неким образом фильтр с требуемой АЧХ, то эта АЧХ и дает ответ на то, какой коэффициент усиления на какой частоте получается. И если среди коэффициентов импульсной характеристики фильтра фигурируют числа вроде 2577, то где-то сбоку в скобках должен быть написан результирующий коэффициент передачи в полосе пропускания.

Итак: вот коэффициенты полосового фильтра
Код
const int BL = 51;
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
};

Это коэффициенты того же фильтра только в представлении single precision float
Код
const int BL = 51;
const real32_T B[51] = {
  1.918891103e-017, 0.003540127072,-1.534936528e-017,-0.006518422626,-4.021064338e-018,
    0.01079472061,-1.573901201e-017, -0.01648111269,2.065347567e-017,  0.02354936302,
  -2.506165681e-017, -0.03180202469,2.834668881e-017,  0.04086523131,-3.332726239e-017,
   -0.05020761862,3.42012515e-017,  0.05918549001,-1.684618334e-017, -0.06710969657,
  3.634848995e-017,  0.07332533598,              0, -0.07729265094,-7.835030939e-017,
    0.07865639776,-7.835030939e-017, -0.07729265094,              0,  0.07332533598,
  3.634848995e-017, -0.06710969657,-1.684618334e-017,  0.05918549001,3.42012515e-017,
   -0.05020761862,-3.332726239e-017,  0.04086523131,2.834668881e-017, -0.03180202469,
  -2.506165681e-017,  0.02354936302,2.065347567e-017, -0.01648111269,-1.573901201e-017,
    0.01079472061,-4.021064338e-018,-0.006518422626,-1.534936528e-017, 0.003540127072,
  1.918891103e-017
};

Ослабление вне полосы -40dB. Если в первом случае так называемый "коэффициент передачи" посчитанный по коэффициентам это сумасшедшее число, то во втором случае это число меньше 1. Вывод: понятие "коэффициент передачи" для цифрового фильтра это мо меньшей мере некорректность. Цифровой фильтр (в частности полосовой) он всего лишь пропускает хорошо через себя некоторые частоты в некоторой полосе и давит другие вне полосы. И ВСЕ. Согласен с TSerg что "коэффициент усиления" в цифровой системе это некорректно.
ViKo
ВСЕ, так ВСЕ.
Аминь!

P.S. Если X умножить на Y, значит ли это, что мы усилили X в Y раз?
V_G
Цитата(ViKo @ Feb 15 2016, 02:14) *
P.S. Если X умножить на Y, значит ли это, что мы усилили X в Y раз?

Там даже не умножают. Там просто договариваются, где стоит (или плавает) разделитель целой и дробной части числа.
ViKo
Цитата(V_G @ Feb 15 2016, 03:45) *
Там даже не умножают. Там просто договариваются, где стоит (или плавает) разделитель целой и дробной части числа.

А договорившись, таки умножают? biggrin.gif Я про выборки и коэффициенты.
А усилить в 0.25 раз - считается усилением?
TSerg
Цитата(Verizon @ Feb 14 2016, 14:35) *
А можна популярней по этому поводу. Где можно почитать.


Открыть любой учебник по ЦФ и найти выражение для комплексного коэффициента передачи:
Нажмите для просмотра прикрепленного файла

Цитата(Verizon @ Feb 14 2016, 19:08) *
Вывод: понятие "коэффициент передачи" для цифрового фильтра это мо меньшей мере некорректность.


Да уж, "аминь, так аминь".
Как раз термин "коэффициент передачи" является корректным к любому трансформирующему сигнал элементу, в т.ч. и цифровому.
V_G
Цитата(ViKo @ Feb 15 2016, 14:28) *
А усилить в 0.25 раз - считается усилением?

Очень точное попадание: усилить в 0.25 раз - как раз передвинуть точку на 2 разряда влево.
В ЦСП ADSP-21XX масштабирование массивов данных происходит именно в блоке сдвигателя.
ViKo
Цитата(V_G @ Feb 15 2016, 11:38) *
Очень точное попадание: усилить в 0.25 раз - как раз передвинуть точку на 2 разряда влево.

Я знаю. rolleyes.gif Одно дело - практическая реализация, а другое - теоретический принцип.
Verizon
Цитата(TSerg @ Feb 15 2016, 09:57) *
Как раз термин "коэффициент передачи" является корректным к любому трансформирующему сигнал элементу, в т.ч. и цифровому.

Все так. Путаница в терминах. Тема про так называемый "коэффициент усиления", который при разном представлении коэффициентов может быть сильно разный. Сомнения только по поводу термина "коэффициент усиления".
Кстати, а коэффициент передачи ЦФ может быть больше 1?
TSerg
Давайте все же вернемся к основам.
Аналоговые (по другому - непрерывные) системы оперируют непрерывными сигналами и процессами и, в любой произвольный момент времени, значение сигнала точно соответствует значению процесса.
Не излишне будет напомнить, что в этом случае мы пользуемся всей шкалой вещественных чисел для операций над значениями сигнала.
Теория дискретных систем оперирует с понятиями временного и/или амплитудного квантования процесса.

Если мы рассматриваем теорию дискретных систем с использованием только временного квантования, то здесь термин "усиление" еще уместен, поскольку мы еще остаемся в рамках непрерывных амплитудных значений.
Расчеты дискретных систем (цифровых фильтров, в частности), выполняемые с учетом дискретного квантования по времени, вполне себе оперируют понятием "усиление".
Другое дело, что частнотно- и фазо-преобразующие цепи все же принято проектировать, оставаясь в рамках единичной окружности, т.к. с максимальным коэффициентом = 1.
Это упрощает унификацию и систематизацию таких цепей и расчеты.
Добавить скалярный коэффициент больший или меньший 1 ( типа - "коэфф. усиления" или gain ) - нет никаких проблем на этом этапе.

Для дискретных линейных систем применяется термин передаточная или системная функция, для нелинейных - вводятся еще функции той или иной нелинейности.

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

Причем совершенно не важно, в каком формате ( float, fix, целые числе), в какой разрядности и на какой разрядности платформы и какими алгоритмами мы работаем.
Как уже говорилось мной выше, восстановление значений сигнала в промежутке между временными и амплитудными дискретами возможно, но это - вероятные значения, а не реальные.

Добавление некоторого множителя на этом этапе (< 1 или > 1), который является просто масштабным коэффициентом, может быть оправдано, конечно же:
согласование данных между разными каналами, уменьшение/увеличение вычислительного динамического диапазона, исключение переполнения и пр.


Цитата(Corner @ Feb 14 2016, 10:02) *
Вот уже третья страница ответов. И один стеб над ТСом.


Вы ошибаетесь- нет никакого стеба.
Снизойдите до уровня ТС и поясните на пальцах, но Вам же влом?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.