Reaktor - schroeder allpas

Options
gentleclockdivider
gentleclockdivider Member Posts: 168 Helper
edited March 27 in Reaktor

This is a schroeder allpas taken from a max msp tutorial

For those unfamiliar with max , the tapin~tapeout~object is basically a delay , where tapin~ is equivalent to reaktor dely audio input , and tapeout~ reaktor's delay audio output.

In the max msp implementation you can see that the negative feedback coeeficient(red quare) is mutliplying the tapout ( reaktor delay out ) =feedback comb

THe positive feedforward comb = green

And this is the reaktor implementaion

BUt here is the adsr tutorial , which actually reverses the feedforward and feedback comb

where g=feedback coeef

Which would be like this

SO is the adsr tutorial wrong when it comes to schroeder allpas ??

Tagged:
«134

Comments

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    Options

    Hmm , but then this diagram , the negative coefficient '-g' is fter the adder , where the diagram in the first post it's reversed .


  • Z Gabr
    Z Gabr Member Posts: 52 Helper
    Options

    And this is the reaktor implementaion

    This is reminiscent of a diffuser delay circuit

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    Options

    Well it's a schroeder allpas in series

  • colB
    colB Member Posts: 831 Guru
    edited March 20
    Options

    iirc, the 'Schroeder Allpass' that everyone uses - the one in your first pic - is a refinement of Schroeder's original (maybe by gardner? can't remember offhand).

    EDIT:

    Although this is not relevant to your initial post, sorry :)

    ADSR tutorials are great, but they are not always 100% correct, or best practice. Go to academia if you want that!

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    Options

    I build some schroeder reverb in reaktor and it's sounds ..hm well interesting

    3 allpass in series going into 4 parallel combs

    THere are some online papers about combfilters into all pass , which makes it confusing

    I thought the original was ap into comb

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    Options

    I am till confused which one is behaving as a schroeder allpas becasue the results are different depending where I put the explicit unit delay .

    On the schroeder allpass it doesn't show but since it's digital it has to be somehwere .

    First example shows without a manually inserted z-1 , reaktor places it in front of the delay module .

    Seconde example , the z-1 is placed before the feedback

    input audio =1 unit sample


  • colB
    colB Member Posts: 831 Guru
    Options

    You don't need a unit delay because there is already a delay line in there. Unit delay is only necessary where not having one would require a significant revision to the laws of physics.

    This might be problematic in Primary (dunno?), but in Core it just works, assuming the delay has been correctly built with the solid parameter deactivated in the properties pane.

    If you need a unit delay in Primary, make the main delay one sample shorter, and stick the unit delay immediately after it, then pretend the output of the unit delay is the output of the main delay line

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    edited March 26
    Options

    I am well aware that I don't need to put a unit delay in there .

    I was stating that WHEN I do , the result is different becasue of the phase cancelation (feedforward-feedback gain coeff.) occurs depending on where the unit delay is inserted .

    I also realised that the schroeder allpas is just a diffuse delay line ( already mentioned earlier in the thread by Z gabr )

    It's a bit confusing jumping back and forth between reaktor and pure data .

    reaktor diffuse delay = allpass in pure data ( delay line with feedback coeff , and feedforward coeff ) , and ofcourse reaktor diffuse delay is an allpass when delay=0

    Now , depending on what the feedforward coeff is multiplying ( see my verry first post about the 2 possible schroeder allpass iplementations ) is equivalent to the negative or positive gain coeff.in primary diffuse delay

  • colB
    colB Member Posts: 831 Guru
    Options

    "I am well aware that I don't need to put a unit delay in there"

    why are you using one then?

  • gentleclockdivider
    gentleclockdivider Member Posts: 168 Helper
    edited March 28
    Options


    Because then you can decide WHERE to put it in the feedback loop when creating the schroeder allpas .
    I have already explained that 4 posts back

    There is a difference between the upper ( automaticially inserted by reaktor beefore the delay ) and lower structure (manually inserted after the delay )
    Both receive an impulse file , yet the output is different because of the placement of the unit delay , unipolar versus bipolar output
    And here's the file

  • colB
    colB Member Posts: 831 Guru
    Options

    The point I'm making is that in core you absolutely do not need one because there is not implicit one. This is due to there being a delay line.

    I'm not sure about Primary, but if Primary does generate an implicit z (which would be quite strange, and should be considered a bug in the context), then the only place to put an explicit one is directly after the delay line.

  • errorsmith
    errorsmith Member Posts: 27 Helper
    edited March 29
    Options

    you need to treat the unit delay as part of the delay. if the delay for the feedback path is different to the delay for the feedforward path it's not an allpass anymore.

  • colB
    colB Member Posts: 831 Guru
    Options

    I see that pesky z in there. It really shouldn't be necessary, and wouldn't exist in core (you should really be using core for low level DSP like this IMO)… anyway, here is what I would consider to be a more correct version:

    In your version, the delay time in the feedforward path is 22, but the delay time in the feedback path is 22+1/SR. In the lower edited version, the feedforward and feedback paths have the same delay time.

    For a completely accurate response, You need to adjust the delay time by subtracting 1/SR to account for that unit delay.

    Same thing in core. No need for a z^-1 unit delay. Core knows that the delay line means it will just work.

  • colB
    colB Member Posts: 831 Guru
    edited March 30
    Options

    hehe, you beat me to it while I was busy trying to promote core

  • errorsmith
    errorsmith Member Posts: 27 Helper
    Options
Back To Top