------------------------------------------------------------------- FILTRAČNÍ SYNTÉZY ------------------------------------------------------------------- Roman Čmejla, textová verze 5. přednášky ze SMS, 30. října 2017 OBSAH ------------------------------------------------------------- • Filtrační syntézy – buzení šumem – pulzní buzení • Jednoduché číslicové filtry – filtry s jedním pólem a jednou nulou – číslicové filtry v MATLABu • Aplikace jednoduchých číslicových filtrů – filtrace řeči – detektory obálek - „špičkový detektor“ - přelaďování filtru - aplikace s šumem a obálkami • buben • hry • efekty ------------------------------------------------------------------- Filtrační (subtrakční, rozdílová) syntéza ------- ------- -------- | | | | | | | zdroj | ----> | filtr | ---> | signál | | | | | | | ------- ------- -------- • Jedna z nejstarších technik, stále používaná • velmi rozšířená syntéza při konstrukci syntetických varhan v 60tých až 80tých letech. Zdrojové signály: obdélník, trojúhelník, pila, pulzy • Syntetický signál (tóny) je vytvářen odečtením (filtrací, potlačením) spektrálních složek ze zdrojového signálu • Jako zdroj pro filtrační syntézu může být použit jakýkoliv audio signál, nejčastěji se však používá širokopásmový šum, nebo úzké pulzy • Pulzní průběhy bývají charakterizovány šířkou pulzu, která bývá relativně krátká • Pulzní generátory, narozdíl od generátorů šumů, mají periodickou základní frekvenci f0 a široké spektrum podobně jako šum • Spektrum periodických signálů by mělo být pásmově omezené (aliasing). Počet harmonických je určen: N = int(fs / (2 f0)) -- • buzení šumem - syntézy perkusních nástrojů (bílý šum, růžový šum -10dB/dek, také 1/f šum) - tryskové letadlo, parní stroje - vítr, vlny (hnědý šum +10dB/dek,) - produkce souhlásek, např. /s/ (růžový šum) • pulzní buzení - žestě (60. léta Riset) - obdélník (klarinet) - pila (simulace smyčců) - hlasivkový tón (hlas a řeč) • zdroj zvuku - hlasivky • filtr — ústa a hlasové ústrojí • změna tvaru úst mění ”mezní frekvenci” filtru, který potlačuje (odečítá) některé harmonické. • např. samohláska /á/ má většinu z původních harmonických stále přítomnu • samohláska ”ó” má většinu harmonických potlačených (nebo přesněji, redukovaných v amplitudě) -- • klady - velké množství zvuků realizovatelných pomocí jednoduché architektury - malé množství parametrů, snadné programování - syntéza reálných nástrojů i "umělých" zvuků • zápory - ne vždy je zřejmé jak naprogramovat konkrétní zvuk - zvuky zpravidla zní "uměle" ................................................................... Klasifikace systémů Podle charakteru signálu (spojité, číslicové, hybridní) Podle kauzality (kauzální, nekauzální) Podle linearity (lineární, nelineární) Podle stacionarity (časové závislé a nezávislé) LTI systémy (Linear time-invariant) - lineární časově nezávislé systémy Systémy relativně jednoduché pro popis, analýzu a syntézu Číslicové filtry • Číslicové filtry – algoritmy provádějící lineární kombinaci vzorků vstupního a výstupního signálu tak, aby došlo ke zvýraznění, nebo naopak potlačení vybraných složek signálu. • Návrh filtrů – Návrh koeficientů lineární kombinace (= koeficientů filtrů) Popis číslicových LTI systémů • pomocí základních stavebních prvků (násobení, sčítání, zpoždění) • diferenčními rovnicem • pomocí přenosových funkcí (prostřednictvím Z-transformace) • pomocí impulsní odezvy Z-transformace - převádí časový popis číslicových signálů do komplexní roviny, kde lze snáze studovat chování systémů a jejich frekvenční charakteristiky. operátor z^-1 představuje zpoždění o 1 vzorek Přenosová funkce H(z) popisuje chování systému v komplexní rovině Vztah mezi přenosovou funkcí a H(z) a frekvenční charakteristikou H(F): frekv. charakteristiku H(F) získáme dosazením z = e^j2?F do H(z) Funkce ve tvaru zlomku má „nuly“ (z=z1, z=z2,..), kde nabývá nulové hodnoty a „póly“ (z=0), kde nabývá nekonečně velké hodnoty. Jsou-li tyto nuly a póly poblíž jednotkové kružnice, ovlivňují výrazným způsobem přenosové a frekvenční charakteristiky systému. • nuly jsou označeny kolečkem • póly křížkem Jednoduché filtry 1. řádu FIR s jednou nulou • x[n] ... vstupní vzorek • y[n] ... výstupní vzorek • b0, b1 ... koeficienty filtru • Diferenční rovnice • y[n] = b0x[n] + b1x[n-1] • řešení: rekurentní výpočet • p.p. x[-1] = 0 • n = 0 y[0] = b0x[0] • n = 1 y[1] = b0x[1] + b1x[0] • n = 2 y[2] = b0x[2] + b1x[1] • n = 3 y[3] = b0x[3] + b1x[2] • Impulsní charakteristika • x[-1] = 0, x[0] = 1, x[1] = 0, x[2] = 0 • řešení: rekurentní výpočet • n = 0 y[0] = b0x[0] y[0] = b0 • n = 1 y[1] = b0x[1] + b1x[0] y[1] = b1 • n = 2 y[2] = b0x[2] + b1x[1] y[2] = 0 • n = 3 y[3] = b0x[3] + b1x[2] y[3] = 0 • Z-transformace • Y(z) = b0 X(z) + b1z-1X(z) • Přenosová funkce • H(z) = Y(z)/X(z) = b0 + b1 z-1 = b0 + b1 / z = (b0 z + b1) / z • Frekvenční charakteristika Příklad: • b0 = 1 • b1 = -1 • y[n] = x[n] - x[n-1] • H(z) = Y(z)/X(z) = 1 - z-1 = 1 - 1 / z = (z - 1) / z • Nula = ? • Pól = ? • Příklad: (pokračování) • b0 = 1 • b1 = -1 • Nula z = 1 • Pól z = 0 Příklad: horní propust • b0 = 1 • b1 = -1 .. 0 Příklad: dolní propust • b0 = 1 • b1 = 1 .. 0 Jednoduché filtry 1. řádu IIR s jedním pólem Diferenční rovnice: Z – transformace: Přenosová funkce: Frekvenční charakteristika: • Diferenční rovnice • y[n] = b0x[n] - a1y[n-1] • řešení: rekurentní výpočet • p.p. y[-1] = 0 • n = 0 y[0] = b0x[0] • n = 1 y[1] = b0x[1] - a1y[0] • n = 2 y[2] = b0x[2] - a1y[1] • n = 3 y[3] = b0x[3] - a1y[2] • Impulsní charakteristika • x[-1] = 0, x[0] = 1, x[1] = 0, x[2] = 0 • řešení: rekurentní výpočet • n = 0 y[0] = b0x[0] y[0] = b0 • n = 1 y[1] = b0x[1] - a1y[0] y[1] = - a1 b0 • n = 2 y[2] = b0x[2] - a1y[1] y[2] = a1 a1 b0 • n = 3 y[3] = b0x[3] - a1y[2] y[3] = - a1 a1 a1 b0 Příklad: • b0 = 1 • a1 = -1 • Diferenční rovnice • y[n] = b0x[n] - a1y[n-1] • y[n] = x[n] + y[n-1] • Nula z = ? • Pól z = ? Příklad: DP • b0 = 1 • a1 = -0,999...0 • Nula z = 0 • Pól z = 1 Příklad: HP • b0 = 1 • a1 = 0,999...0 IIR filtr s jedním pólem (pohyb pólu po reálné ose) Jednoduché filtry 1. řádu IIR s jedním pólem a nulou Diferenční rovnice: Z – transformace: Přenosová funkce: Frekvenční charakteristika: Příklad: DP • b0 = 1 • b1 = 1 • a1 = -0,9...0 Příklad: HP • b0 = 1 • b1 = -1 • a1 = 0,9...0 Příklad: korektor hloubek • b0 = -1 • b1 = 0,5 • a1 = -0,999...0 Příklad: korektor výšek • b0 = -1 • b1 = 0,5 • a1 = 0,999...0 IIR filtr s jedním pólem a jednou nulou (pohyb nuly a pólu po reálné ose) Příklad: potlačení ss složky • b0 = 1 • b1 = -1 • a1 =- 0,99 Metoda nul a pólů je nejsnazším způsobem návrhu jednoduchých IIR filtrů. Představme si, že frekvence jde okolo jednotkové kružnice. Na reálné ose (úhel 0) je 0 Hz, u úhlu pi/2 (imag.osa) je čtvrtina vzorkovací frekvence, u pi je polovina vzorkovací frekvence, tzv. Nyquistov frekvenci a V úhlu 2pi (celý cyklus) máme vzorkovací frekvenci. Póly musí být vždy uvnitř jednotkové kružnice, nikdy mimo nebo na ní. Nuly mohou být kdekoliv. Můžeme použít jakýkoliv počet pólů a nul, ale musí být komplexně sdružené, pokud neleží na reálné ose. Póly zesilují frekvence, nuly je potlačují. Je-li pól blíže k frekvenci, pak více zesiluje. Blíže k nule je frekvence více potlačena. Nula na jednotkové kružnici zcela potlačí frekvenci "usadí ji". *** Praktické rady *** • Zdvojením všech pólů a nul získáváme učinnější filtr. • Frekvenční charakteristika nového filtru bude mocninou staré. • Dáme-li nulu na pól, neutralizujeme účinky obou. • Pól mimo jednotkovou kružnici způsobí, že filtr se stavá nestabilním. Pól na jednotkové kružnici může učinit z filtru oscilátor. • Velké množství pólů a nul znamená velké zpoždění. • Nuly ovlivňují vstupní koeficienty, póly výstupní. • Póly a nuly musí mít komplexně sdružené páry, neboť jinak bychom měli filtr s komplexními koeficienty a následně komplexní výstupní signál. Jednoduché číslicové filtry v MATLABu a0 y[n] + a1 y[n - 1] + ... = b0 x[n] + b1 x[n - 1] ... >> y=filter(b,a,x); >> freqz(b,a) >> H=freqz(b,a,N); >> [H,w]=freqz(b,a,N,fs); >> [H,w]=freqz(b,a,N,fs,’whole’); >> plot(w,20*log10(abs(H))) >> plot(w,angle(H)) >> impz(b,a) >> impz(b,a,N) >> h=impz(b,a,N) >> x=[1 zeros(1,99)]; >> h=filter(b,a,x); >> zplane(b,a) >> [n,p,k]=tf2zp(b,a) >> [b,a]=zp2tf(n,p,k) ................................................................... Aplikace jednoduchých číslicových filtrů – číslicové filtry v MATLABu – filtrace řeči – diferenciátor a integrátor – detektory obálek - „špičkový detektor“ - přelaďování filtru - aplikace s šumem a obálkami • buben • hry • efekty