next up previous contents
Nächste Seite: Filterbank Aufwärts: Anwendungsbeispiele Vorherige Seite: Anwendungsbeispiele   Inhalt

Demonstration einfacher Filter

Als erstes eine leicht modifizerte Version von toot10 aus dem Tutorial von R. Boulanger, das die verschiedenen Filtertype auf Rauschen und auf Bandbreitenbegrenzten Puls anwendet.

Bei der Filtrierung kommt es oft zu Amplituden, die völlig verschiedenen von denen des Ausgangssignal sind. Diese entstehen z.B. durch Rückkopplungen oder aber durch massive Abschwächungen, da das Signal nicht genügend Anteile des zu Filternden Teils hat. CSound bietet die Möglichkeit, den verlorenen (oder übersteuernden) Pegel wieder auszugleichen.

Der Unitgenerator rms liefert die Energie des Eingangssignals als gemittelten Wert von $\sqrt{a^2}$ (rms = root mean square) über einer Periode ders Kontrollfrequenz. Der Unitgenerator gain adjustiert den rms-Wert eines Signals auf einen angegebenen Wert, und der Unitgenerator balance kombiniert die beiden, indem er ein Signal erzeugt, das aus einem zweiten Signal besteht, aber den rms-Wert eines Vergleichssignals besitzt.


; toot10.orc

sr = 44100
kr = 4410
ksmps = 10
nchnls = 2

instr 10
   iattack = .01
   irelease = .2
   iwhite = 10000
   idur = p3
   iamp = p4
   isweepstart = p5
   isweepend = p6
   ibandwidth = p7
   ibalance = p8                ; 1 = left, .5 = center, 0 = right
   isignal = p9                 ; 0 = noise, 1 = pulse  
   ifilt   = p10                ; 0 = tone 1 = atone 2 = reson 3 = areson


   kamp         linen   iamp, iattack, idur, irelease
   ksweep       expon   isweepstart, idur, isweepend
        if isignal == 1 goto usepulse
   asig         rand    iwhite
        goto contin
usepulse:
   asig         gbuzz   iwhite,50,200,0,0.95,1
contin:
        if ifilt == 0 goto usetone
        if ifilt == 1 goto useatone
        if ifilt == 2 goto usereson
   afilt        areson  asig, ksweep, ibandwidth,2
                goto output
usetone:
   afilt0       tone    asig, ksweep
   afilt        tone    afilt0, ksweep ; use 12dB Filter
                goto output
useatone:
   afilt0       atone   asig, ksweep
   afilt        atone   afilt0, ksweep
                goto output
usereson:
   afilt        reson   asig, ksweep, ibandwidth,2
output:
   abalance  balance    afilt,asig
   arampsig     =       kamp * abalance
                outs    arampsig * ibalance, arampsig * (1 - ibalance)
endin

; toot10.sco


f 1 0 1025 9 1 1 90

; ins   strt    dur     amp     stsw    ndsw    bdw     bal(0-1) sound filter
i10     0       10      1       10000   20      20      .1        0     0
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        1     0
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        0     1
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        1     1
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        0     2
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        1     2
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        0     3
i10     12      10      .       8       8000    100     .9
f0 24
s
i10     0       10      1       10000   20      20      .1        1     3
i10     12      10      .       8       8000    100     .9
f0 24
s
e



Thomas Neuhaus
2001-01-14