Квантуване на коефициентите
Филтърът от тема 5 е изчислен с коефициенти като 0,53127841… В процесора те се закръглят до B бита. Тогава полюсите и нулите се местят – и АЧХ вече не е тази, която проектирахме. Полюс близо до окръжността може дори да излезе навън – филтърът става неустойчив. Колкото по-тесен и стръмен е филтърът, толкова по-чувствителен е.
B = 8 бита за коефициентите
✓ Квантуваният е устойчив (max |p| = 0,898022)
ЛАЧХ: точни срещу закръглени
точни коефициенти закръглени
ПНД: закръглените (цветни) срещу точните (сиви)
✓ Устойчива – всички полюси са вътре в кръга (max |p| = 0,898)
Входът: звукът, както е записан
входът x(n)
Изходът: звукът през закръгления филтър
изходът y(n)
10 бита – почти същото. 8 бита – ЛП „провисва“ с ≈ 5 dB. 6 бита – полюс излиза от окръжността: пусни думата – изходът расте без край. Включи каскадата: при 6 бита полюсите почти не мърдат.
Каскадна срещу директна форма
Най-силното средство е подредбата. В директната форма всеки полюс зависи от всички коефициенти – малка грешка в един мести всички. В каскадата от биквади (звена от 2-ри ред) всяка двойка полюси зависи само от два свои коефициента. Затова БИХ филтрите почти винаги се правят като каскада.
B = 10 бита за коефициентите
N/2 = 4 → ред 8
⚠ Квантуваният филтър е НЕУСТОЙЧИВ (max |p| = 1,43713)
Елиптичен ЛФ около 2000 Hz
идеален закръглен
ПНД: закръглените срещу точните
⚠ Неустойчива – полюс е излязъл от кръга (max |p| = 1,44)
Входът: звукът, както е записан
входът x(n)
Изходът расте без край – филтърът е неустойчив
изходът y(n)
⚠ Неустойчив: изходът расте без край. При пускане силата е намалена, за да не гръмне.
Директна форма, 10 бита: полюсите са навън, изходът избухва. Включи каскадата – свирката изпиуква точно когато минава през лентата (≈ 320 ms). Директната форма става устойчива чак при 20 бита; каскадата – още от 8.
При КИХ закръглянето добавя малка грешка към АЧХ (най-много (M + 1)·2⁻ᴮ/2), но не може да го направи неустойчив (няма полюси), и линейната ФЧХ остава – симетрията на коефициентите се запазва. Пример: M = 40, B = 12 → грешка ≤ 0,005, ЛЗ не пада сигурно под ≈ −46 dB.
Препълване и мащабиране
Филтърът може да усилва: при y(n) = x(n) + 0,975·y(n − 1) някои честоти излизат до 1/(1 − |a|) пъти по-силни. Тогава вътрешните суми не се побират в регистъра и при допълнителен код се увиват. Решението е мащабиране: входът се умножава по K = 1/G, където G е норма на импулсната характеристика до мястото на препълване.
l₁-нормата (сумата от |h|) гарантира, че никога няма препълване, но намалява сигнала повече. l₂-нормата (корен от енергията) е по-икономична – рядко може да препълни. Сега: K = 1/G = 1.
Входът: звукът, както е записан
входът x(n)
Изходът: звукът в 16-битовия регистър
изходът y(n)
Без мащабиране сумите се увиват – изходът е пращящ шум. С l₂ почти чисто; с l₁ винаги чисто. Мести a към 0,5 – усилването пада до 2 и мащабирането почти не трябва.
КИХ: 0,3; −0,1; 0,4; 0,25
h(n)
l₁: G = Σ|h(n)| = 1,05 → K = 1/G = 0,952
l₂: G = √Σh²(n) = 0,5679 → K = 1,76
Шумово усилване: Σh²(n) = 0,3225 (−4,91 dB)
БИХ: h(n) = aⁿ
h(n)
l₁: G = Σ|h(n)| = 40 → K = 1/G = 0,025
l₂: G = √Σh²(n) = 4,5 → K = 0,222
Шумово усилване: Σh²(n) = 20,25 (13,1 dB)
КИХ: G = 0,3 + 0,1 + 0,4 + 0,25 = 1,05 → K = 0,952. БИХ с a = 0,975: G = 40 – полюс до окръжността означава огромно усилване.
Гранични цикли
Граничен цикъл е трептене на устойчив рекурсивен филтър, което не спира при нулев вход (тема 6). Има два вида:
| С ниско ниво (грануларни) | С високо ниво (от препълване) | |
|---|---|---|
| причина | закръглянето в обратната връзка | увиване при препълване |
| амплитуда | няколко δ – мъртвата зона | почти целият обхват |
| лек | повече битове; полюси по-далеч от окръжността | насищане; мащабиране с l₁ |
a = 0,8125
4 дробни бита (δ = 1/16)
начално y(0) = 0,5
Мъртва зона ±0,167 → засяда на 0,125
безкрайна точност закръгление до δ = 1/16
c₁ = 0,875
c₂ = −0,875
y(n) = c₁·y(n−1) + c₂·y(n−2), без вход, y(−2) = −0,75, y(−1) = 0,75 · идеалният е устойчив
⚠ Граничен цикъл с високо ниво (амплитуда 0,73)
без препълване допълнителен код (превъртане)
Ляво: y(n) = Q[0,8125·y(n − 1)] засяда на 0,125 – в мъртвата зона (0,0625/0,375 ≈ 0,167). Дясно: с увиване трепти безкрай; смени на насищане – цикълът изчезва.
Шум от закръглените произведения
Произведение на две B-битови числа има 2B бита и се закръгля обратно – всеки умножител добавя малко бял шум. Той обаче минава през остатъка от филтъра и се усилва толкова, колкото е енергията Σg² на импулсната характеристика след умножителя. При y(n) = x(n) + a·y(n − 1) шумът се усилва 5,26 пъти.
Тук думата минава през това звено с 8-битови произведения, а ти слушаш само шума (усилен 30 пъти).
Шумовата ИХ g(n) = aⁿ
h(n)
l₁: G = Σ|h(n)| = 10 → K = 1/G = 0,1
l₂: G = √Σh²(n) = 2,294 → K = 0,436
Шумово усилване: Σh²(n) = 5,263 (7,21 dB)
Входът: звукът, както е записан
входът x(n)
Изходът: звукът само шумът
изходът y(n)
a = 0,9: шумово усилване 5,26 (7,2 dB). Дръпни a₁ към −0,99 – усилването става ≈ 50 и шумът се чува ясно; при −0,5 е само 1,33. Всеки бит повече го прави 2 пъти по-тих.
Самопроверка
1. Защо БИХ филтрите се реализират като каскада от биквади?
Полюсите на всяко звено зависят само от 2 коефициента – малка чувствителност. На фигура 2: ред 8 в директна форма е неустойчив до 20 бита, в каскада – устойчив от 8.
2. Може ли закръглянето на коефициентите да направи КИХ неустойчив?
Не – КИХ няма полюси (освен в z = 0); само АЧХ се влошава.
3. l₁ или l₂ – кое гарантира, че няма препълване?
l₁ (сумата от |h|) – тя е най-лошият случай. l₂ е по-икономична, но рядко може да препълни.
4. Защо звеното „засяда“ на 0,125 при a = 0,8125 и δ = 1/16?
0,8125·0,125 = 0,1016, закръглено до стъпка 0,0625 → пак 0,125. Мъртвата зона е 0,0625/(2·0,1875) ≈ 0,167 > 0,125.