Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent - Departement Muziek en Drama


Naar vorig hoofstuk: Digitale klankbewerking: pitch shift en time-stretch

Naar inhoudstafel: <Index Kursus>

1152:

Digitale Filters

Ook filters met de meest diverse topologien kunnen langs algoritmische weg zuiver digitaal worden geimplementeerd. Hiermee betreden we echter het terrein van de hogere en diskrete wiskunde. We zullen ons hier dan ook moeten beperken tot het weergeven van enkele fundamentele filteralgoritmen en daarbij afzien van het achterliggende wiskundig en analytisch apparaat.

Wie hierover toch verder wil studeren, beveel ik aan enkele van de basisteksten terzake vermeld in de bibliografie van deze syllabus te raadplegen. Een bijzonder goed artikel -uit het Amerikaanse elektronika blad 'Circuit Cellar'- voegen we hier (in de klaskursus, niet op internet...) -als voorsmaakje- in elk geval toe.

1. Elementair ruisfilter

Wanneer we in 'real-world' toepassingen te maken krijgen met signalen afkomstig van een ADC konverter, dan zullen we vaker dan niet konstateren dat deze signalen nogal wat ruis kunnen bevatten. Een in de elektronische techniek vaak voorkomend 'in line' digitaal ruisfilter kan erg eenvoudig worden geimplementeerd alsvolgt:

Declare Function ADC(k%): ' dit is de funktie waarmee we de ADC uitlezen

Declare Sub DAC (b%) ' dit is de procedure voor de uitsturing van de DAC

' sample: neem 256 samples:

Starttime= TIMER

i=1

DO

Samp(i)= ADC(0) * 0.25 + Samp(i-1)*0.75

LOOP UNTIL i< 256

Sampletime= TIMER - Starttime

Period= Sampletime/ 256

' weergave van het 'ruisvrije' sample:

FOR i=1 TO 64

t= TIMER + Period

DAC DAC_adres, Samp(i)

DO: LOOP UNTIL TIMER>= t

NEXT i

2. 1e orde LPF

De algoritmen voor de implementatie van eerste orde low-pass filters zien eruit alsvolgt:

Ts = tijdsinterval tussen de individuele samples, dus Ts = 1/fs (fs=samplingrate als frekwentie)

Tc = RC tijd voor de -3dB afsnijfrekwentie van het gewenste filter

A! = EXP(1)^ - (Ts/Tc) 'berekening van de eerste filterparameter

B!= 1!- A! 'berekening van de tweede filterparameter

FOR i= 1 to UBOUND(Samp)

Samp(i)=(A!*Samp(i-1) + B! *Samp(i)) ' formule voor 1e orde LPF topologie

NEXT i

De exponent Ts/Tc moeten we begrijpen als de verhouding tussing sampling frekwentie en afsnijfrekwentie. Daarbij moet wel de konditie worden gesteld dat de afsnijfrekwentie veel lager moet zijn dan de sampling frekwentie!

Merk op dat deze funktie perfekt geschikt is voor gebruik in real time! We hoeven immers ons sample niet eerst in een array op te slaan, maar kunnen volstaan met 1 enkele geheugenplaats voor de vorige waarde.

3. 1e orde HPF

Hiervoor vervangen we de filterparameters en de formule voor de topologie door de nu van toepassing zijnde waarden. In het algoritme moet slechts het teken worden omgewisseld:

Noteer dat A!+B! = 1 een voorwaarde is waaraan de filtercoefficienten moeten voldoen. Voorts moet ook B! > A!.

FOR i= 1 to UBOUND(Samp)

Samp(i) = B! *Samp(i)) - (A!*Samp(i-1) ' formule voor 1e orde HPF topologie

NEXT i

4. Hogere orde LPF en HPF filters: veralgemening

Naarmate de filter-orde toeneemt, groeit ook de komplexiteit van digitale filters. We kunnen bovenstaande aanpak voor 1e orde filters veralgemenen door introduktie van een array met filterfaktoren of coefficienten. Wanneer deze coefficienten positief zijn krijgen we een low pass filter, indien ze negatief zijn, een high pass filter. Positieve en negatieve faktoren kunnen ook in kombinatie worden gebruikt voor het bereiken van de meest diverse filterkarakteristieken. Geschikte waarden zijn in tabelvorm weer te vinden in de technische literatuur terzake.

DIM Coef(0 TO aantalfaktoren -1) ' dit array bevat de konstante filterkoefficienten

DIM Samp(0 TO aantalsamples - 1) ' dit array bevat ons gesampeld signaal

FOR i = 0 TO UBOUND(Samp)

Samp(i) = Samp(i) * Coef(0)

FOR n = 1TO UBOUND(Coef)

Samp(i) = Samp(i) + (Samp(i-n) * Coef(n) )

NEXT n

NEXT i 

Opmerking: wie zou menen dat digitale filters het absolute nec plus ultra zouden betekenen inzake kwalitatieve filtertechnieken, vergist zich terdege! Alle problemen waarmee analoge filters behept zijn (vervorming, overshoot, komponententolleranties, stabiliteitsproblemen...) doen zich net zo goed voor bij hun digitale evenknieen. In vele gevallen zijn de gevolgen zelfs nog heel wat erger: de komputer loopt vast en alles valt stil... Wie de formules goed bestudeert zal -na enig numeriek geexperimenteer- gauw tot het besluit komen dat kleine afrondingsfouten in de laatste digits van de filterkonstanten, grote gevolgen hebben voor de output van het filter. Door het doorlopend vermenigvuldigen in het algoritme zelf, worden ook deze fouten alsmaar verder vermenigvuldigd en dus ook vergroot! Ook overflow en zero-divide errors zijn aan het algoritme niet vreemd. Deze problemen vergroten bovendien naarmate we de filterorde vergroten.


Naar inhoudstafel: <Index Kursus>

Naar: Digitale klankbewerking: pitch shift en time-stretch

Naar <Digitale Mixers>

Naar homepage dr.Godfried-Willem Raes