Влияние количественного квантования на эффективность цифрового фильтра
В предыдущей статье этой серии обсуждались некоторые базовые структуры для реализации фильтров с конечным импульсным откликом (FIR). В этой статье будет проверяться, что подходящая структура может уменьшить чувствительность ответа фильтра к квантованию коэффициента.
Для данного набора спецификаций фильтра мы обычно получаем функцию системы фильтров $$ H (z) $$, считая, что коэффициенты фильтра могут быть представлены с бесконечной точностью. Однако при реализации фильтра в реальном мире мы должны использовать конечное число бит для представления каждого коэффициента $$ H (z) $$. Это квантование коэффициента может каким-то образом изменить местоположение полюсов фильтра и нулей.
В результате, после внедрения фильтра, мы можем заметить, что частотная характеристика фильтра сильно отличается от частотной характеристики исходного дизайна. Ошибка в положениях полюсов и нулей зависит от нескольких факторов. В этой статье мы обсудим некоторые из этих факторов и покажем, как мы можем создавать фильтры, которые проявляют меньшую чувствительность к квантованию коэффициентов.
Прежде чем продолжить наше обсуждение, давайте рассмотрим пример квантования коэффициентов.
Пример 1
Передаточная функция фильтра Infinite Impulse Response (IIR) определяется следующим образом:
$$ Н (г) = \ гидроразрыва { sum_ {к = 0} ^ {М-1} B_ {к} г ^ {- к}} { sum_ {к = 0} ^ {N-1} {а_ к} г ^ {- k}} $$
Мы можем использовать функцию эллипса MATLAB для проектирования эллиптического фильтра. Например, (b, a) = эллип (7, 0, 5, 50, 0, 3) дает эллиптический фильтр нижних частот седьмого порядка с пульсацией 0, 5 дБ в полосе пропускания и ослаблением 50 дБ в полосе задерживания. Край полосы пропускания фильтра будет иметь нормализованную частоту $$ 0, 3 \ pi $$. Коэффициенты этого фильтра приведены в следующей таблице. Эти коэффициенты будем рассматривать как неквантованные.
К | b k (неквантованный) | a k (неквантованный) |
0 | +0, 012218357882143 | +1, 000000000000000 |
1 | -0, 009700754662078 | -4, 288900601525732 |
2 | +0, 024350450826845 | +9, 216957436091198 |
3 | +0, 002532504848041 | -12, 195350561406707 |
4 | +0, 002532504848041 | +10, 633166152311462 |
5 | +0, 024350450826845 | -6, 062798190498858 |
6 | -0, 009700754662078 | +2, 098067018562072 |
7 | +0, 012218357882143 | -0, 342340135743532 |
Величина частотной характеристики этого фильтра показана на рисунке 1.

Рисунок 1. Величина частотной характеристики неквантованного фильтра
На рисунке 2 показаны полюсы (синие кресты) и нули (красные точки) передаточной функции. Поскольку полюса находятся внутри единичного круга, фильтр стабилен.

Рисунок 2. Полюсы и нули неквантовой функции системы
Мы будем квантовать коэффициенты, используя один бит для знака и девять бит для величины коэффициентов. Так как все коэффициенты $$ b_k $$ меньше $$ 2 ^ {- 5} = 0.03125 $$, мы можем рассмотреть коэффициент масштабирования $$ 2 ^ {(number; of; bits + 5)} = 2 ^ {(9 + 5)} = 16384 $$ для этих коэффициентов и получить более точное представление. Количественные коэффициенты $$ b_k $$ приведены в таблице 2. Например, чтобы вычислить квантованное значение $$ b_1 $$, мы сначала применим коэффициент масштабирования и получим:
$$ b_ {1} times 2 ^ {(9 + 5)} = 0.012218357882143 \ times 2 ^ {(9 + 5)} = 200.1856 $$
Теперь мы можем округлить результат до $ $ 200 $$. Для реализации коэффициентов будет использовано двоичное представление $$ 200 $$, которое равно $$ 011001000 $$. Однако мы должны иметь в виду, что нам нужно интерпретировать результаты с коэффициентом масштабирования $$ 2 ^ {- (9 + 5)} $$. Тогда десятичный эквивалент квантованного коэффициента можно получить, умножив $$ 200 $$ на $$ 2 ^ {- (9 + 5)} $$, который дает $$ 0.0122 $$.
В этом конкретном примере с коэффициентом масштабирования меньше $$ 2 ^ {(9 + 5)} $$ несколько битов двоичного представления коэффициентов $$ b_k $$ были бы равны нулю для всех коэффициентов, и мы потеряли бы точность. Например, предположим, что мы выделяем девять бит для представления дробного значения коэффициентов $$ b_k $$. Следовательно, мы должны применить масштабный коэффициент $$ 2 ^ {9} $$, который дает:
$$ b_ {1} times 2 ^ 9 = 0.012218357882143 \ times 2 ^ 9 = 6.2558 $$
Очевидно, что в этом случае коэффициент пересчета $$ 2 ^ {- 9} $$ должен учитываться при интерпретации результата вычислений. Rounding $$ 6.2558 $$ и преобразуя его в двоичное представление, мы получаем $$ 00000110 $$. Мы заметили, что, хотя мы используем девять бит для представления этого числа, большинство из них равны нулю. Читатель может проверить, что с этим коэффициентом масштабирования несколько бит будут равны нулю даже для наибольшего $$ b_k $$, то есть $$ 0.024350450826845 $$.
Для квантования коэффициентов $$ a_k $$ отметим, что величина целочисленной части этих коэффициентов меньше $$ 16 $$. Следовательно, мы можем выделить четыре бита для целочисленной части и пять бит для дробной части. В результате коэффициент масштабирования коэффициентов $$ a_k $$ будет $$ 2 ^ 5 $$. Например, с $$ a_2 = 9.216957436091198 $$ у нас есть:
$$ a_ {2} times 2 ^ 5 = 9.216957436091198 \ times 2 ^ 5 = 294.9426 \ approx 295 $$
Следовательно, квантованное десятичное значение для коэффициента будет $$ 9.2188 $$. Аналогично, мы можем найти квантованные значения других коэффициентов $$ a_k $$, как показано в таблице 2 ниже.
К | b k (квантованный) | a k (квантованный) |
0 | 0, 0122 | 1, 0000 |
1 | -0, 0097 | -4, 2813 |
2 | 0, 0244 | 9, 2188 |
3 | 0, 0025 | -12, 1875 |
4 | 0, 0025 | 10, 6250 |
5 | 0, 0244 | -6, 0625 |
6 | -0, 0097 | 2, 0938 |
7 | 0, 0122 | -0, 3438 |
На рисунке 3 сравнивается частотная характеристика квантованного фильтра (кривая красного) с частотной характеристикой неквантованной системы (кривая в синем). Мы заметили, что квантование коэффициентов отрицательно повлияло на частотную характеристику.

Рисунок 3. Частотная характеристика квантованного фильтра (в красном) по сравнению с неквантованной системой (синим цветом)
Полюсы (синие кресты) и нули (красные точки) квантованного фильтра показаны на рисунке 4. Как показано на этом рисунке, два полюса выведены из единичного круга, а квантованный фильтр нестабилен. Этот пример показывает, что после проектирования фильтра нам необходимо изучить эффект квантования коэффициента. Если квантованный фильтр не соответствует целевым спецификациям, нам необходимо перепроектировать фильтр. В остальной части статьи мы увидим, что реализация фильтра высокого порядка в виде каскада секций второго порядка может значительно снизить чувствительность к квантованию коэффициентов.

Рисунок 4. Полюсы и нули квантованного фильтра
Анализ чувствительности к коэффициенту квантования
Чтобы проверить чувствительность полюсов и нулей фильтра к квантованию коэффициентов, рассмотрим многочлен $$ D (z) $$ с корнями $$ N $$:
$$ Д (г) = 1 + \ sum_ {к = 0} ^ {N} а_ {к} г ^ {- к} $$
Уравнение 1
Уравнение 1 может представлять системную функцию фильтра конечной импульсной реакции (FIR) или как числитель, так и знаменатель фильтра IIR. Анализ чувствительности корней $$ D (z) $$ к квантованию коэффициентов позволяет нам лучше понять, как корни и полюса цифрового фильтра будут перемещаться в условиях конечной точности.
Мы можем записать $$ D (z) $$ в терминах его факторов как:
$$ Д (г) = 1 + \ sum_ {к = 0} ^ {N} а_ {к} г ^ {- к} = \ prod_ {к = 1} ^ {N} (1-р- {к} г ^ {- 1}) $$
Где $$ p_k $$ обозначает корни многочлена. С конечным числом бит для представления каждого коэффициента мы ожидаем, что $$ a_k $$ изменится на $$ a_k + \ Delta a_k $$, где $$ \ Delta a_k $$ - ошибка, возникшая в результате использования представления с конечной точностью. Следовательно, мы ожидаем, что корни полинома будут меняться от $$ p_k $$ до $$ p_k + \ Delta p_k $$. Ошибка в корневом расположении, $$ \ Delta p_i $$, может быть найдена как:
$$ \ Delta p_ {i} = - \ sum_ {k = 1} ^ {N} frac {p_ {i} ^ {Nk}} { prod_ {l = 1, l \ neq i} ^ {N} (p_ {i} -p_ {l})} Delta a_ {k} $$
Уравнение 2
Чтобы увидеть доказательство уравнения 2, обратитесь к разделу 9.5 этой книги. Уравнение 2 имеет два важных значения, которые будут обсуждаться далее.
Избегайте кластеров поляков и нулей
Во-первых, ошибка в корне $$ i $$ th, $$ \ Delta p_i $$, равна ошибке в коэффициенте $$ k $$ th, умноженной на следующий коэффициент:
$$ F_ {k} = \ frac {p_ {i} ^ {Nk}} { prod_ {l = 1, l \ neq i} ^ {N} (p_ {i} -p_ {l})} $$
Уравнение 3
Этот фактор может быть очень большим, когда многочлен имеет другие корни, близкие к полюсу $$ i $$ th, т. Е. $$ p_ {i} -p_ {l} $$ мал. Другими словами, когда у нас есть кластер корней, ошибка в корневых местах будет намного выше для заданной $$ \ Delta a_k $$. Поскольку узкополосный фильтр имеет в основном плотно сгруппированные корни, мы ожидаем, что частотная характеристика этих фильтров будет очень чувствительна к квантованию коэффициентов.
Избегайте секций фильтров высокого порядка
Переписывая уравнение 2 как уравнение 4 ниже, заметим, что каждый коэффициент многочлена вносит некоторую ошибку в местоположение конкретного полюса:
$$ \ Delta p_ {i} = - \ sum_ {k = 1} ^ {N} F_ {k} Delta a_ {k} $$
Уравнение 4
Это означает, что по мере увеличения числа корней многочлена чувствительность к ошибке квантования будет возрастать. Это связано с тем, что каждый корень $$ D (z) $$ в уравнении 1 зависит от значения всех коэффициентов $$ a_ {k} $$. Для многочлена степени $$ N $$ существуют коэффициенты $$ N $$, которые необходимо квантовать. И, очевидно, каждый из этих квантованных коэффициентов будет вносить определенный погрешность в общую ошибку.
Резюмируя, мы должны избегать кластеров полюсов и нулей и использовать секции фильтра низкого порядка. Эти две цели могут быть достигнуты за счет использования однополюсных секций для создания фильтра высокого порядка. Однако фильтр имеет, как правило, сложные полюсы и нули, а использование однополюсных секций требует комплексной арифметики, что увеличивает вычислительную сложность. Следующей лучшей альтернативой является использование разделов второго порядка. В этом случае мы можем связать комплексно-сопряженные корни и избежать сложной арифметики. Поскольку поиск каскадной формы фильтра высокого порядка включает утомительную математику, мы можем использовать функцию MATLAB tf2sos, которая обозначает функцию передачи в секцию второго порядка, чтобы получить каскадную форму заданной передаточной функции.
Пример 2
Мы будем использовать функцию tf2sos для преобразования передаточной функции в примере 1 в каскадную форму. Затем мы будем квантовать коэффициенты этих секций второго порядка и сравнить частотную характеристику полученной структуры с характеристикой неквантовой системы.
Следующие строки кода определяют передаточную функцию в примере 1 и преобразуют ее в разделы второго порядка:
N = (0, 012218357882143 -0, 009700754662078 0, 024350450826845 0, 002532504848041 0, 002532504848041 0, 024350450826845 -0, 009700754662078 0, 012218357882143); % Эта строка определяет числитель H (z)
D = (1.000000000000000 -4.288900601525731 9.216957436091192 -12.195350561406695 10.633166152311450 -6.062798190498850 2.098067018562069 -0.342340135743531); % Это определяет знаменатель H (z)
(sos, G) = tf2sos (N, D)% преобразует передаточную функцию, определенную N и D, в каскад секций второго порядка
Результатом будет:
sos =
1, 0000000000 | 1, 0000000000 | 0, 0000000000 | 1, 0000000000 | -0, 6790830001 | 0, 0000000000 |
1, 0000000000 | 0, 0102799961 | 1, 0000000000 | 1, 0000000000 | -1, 2818759037 | 0, 6209275764 |
1, 0000000000 | -0, 8106030432 | 1, 0000000000 | 1, 0000000000 | -1, 1804902667 | 0, 8437961219 |
1, 0000000000 | -0, 9936260871 | 1, 0000000000 | 1, 0000000000 | -1, 1474514311 | 0, 9621803579 |
а также:
$$ G = $$ 0, 0122183579.
Каждая строка sos выше дает передаточную функцию одного из секций второго порядка. Первые три числа каждой строки представляют собой числитель соответствующего раздела второго порядка, а вторые три числа дают свой знаменатель. Например, секция второго порядка, полученная из второго ряда:
$$ H_ {2} (г) = \ гидроразрыва {1, 0000000000 + 0.0102799961z ^ {- 1} + 1.0000000000z ^ {- 2}} {1.0000000000-1.2818759037z ^ {- 1} + 0.6209275764z ^ {- 2}} $$
Мы будем квантовать коэффициенты, используя один бит для знака и девять бит для величины коэффициентов. Нам нужно выбрать подходящий масштабный коэффициент. Так как коэффициенты секций второго порядка меньше 2, мы будем использовать один бит для целочисленной части и восемь бит для дробной части, т. Е. Коэффициент масштабирования будет $$ 2 ^ 8 $$. Следовательно, мы получаем передаточную функцию первого сечения как:
$$ H_ {1} (г) = \ гидроразрыва {1, 00000000 + 1.00000000z ^ {- 1}} {1.00000000-0.67968750z ^ {- 1}} $$
Квантованная передаточная функция других секций второго порядка будет:
$$ H_ {2} (z) = \ frac {1.00000000+ 0.01171875z ^ {- 1} + 1.00000000z ^ {- 2}} {1.00000000-1.28125000z ^ {- 1} + 0.62109375z ^ {- 2}} $$
$$ H_ {3} (г) = \ гидроразрыва {1.00000000-0.81250000z ^ {- 1} + 1.00000000z ^ {- 2}} {1.00000000-1.17968750z ^ {- 1} + 0.84375000z ^ {- 2}} $$
$$ H_ {4} (г) = \ гидроразрыва {1.00000000-0.99218750z ^ {- 1} + 1.00000000z ^ {- 2}} {1.00000000-1.14843750z ^ {- 1} + 0.96093750z ^ {- 2}} $$
На рисунке 5 сравнивается частотная характеристика $$ H (z) = GH_ {1} (z) H_ {2} (z) H_ {3} (z) H_ {4} (z) $$ (которая показана красным цветом) с параметром неквантованного фильтра (показано синим цветом). Как вы можете видеть, эти два графика едва различимы друг от друга.

Рисунок 5. Частотная характеристика каскадной структуры (красной) по сравнению с неквантованной системой (синим цветом)
Читатель может легко использовать функцию MATLAB roots (), чтобы проверить, что полюсы квантованной структуры каскада находятся внутри единичного круга, и система стабильна. Этот пример показывает, что реализация фильтра высокого порядка в качестве каскада секций второго порядка может значительно снизить чувствительность к квантованию коэффициентов.
Резюме
- При внедрении цифрового фильтра в реальном мире мы должны использовать конечное число бит для представления каждого коэффициента $$ H (z) $$.
- Частотная характеристика квантованного фильтра может сильно отличаться от частотной характеристики исходного дизайна.
- Реализация фильтра высокого порядка в качестве каскада секций второго порядка может значительно снизить чувствительность к квантованию коэффициентов.
Вспомогательная информация
- FIR Filter Design by Windowing: концепции и прямоугольное окно
- Нежелательные эффекты функции окна в конструкции КИХ-фильтра
- Бартлетт против прямоугольного окна
- От параметров фильтра до оконных параметров в конструкции FIR Filter
- Проектирование FIR-фильтров с использованием метода выборки частоты
- Структуры для реализации конечных импульсных фильтров