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:
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