I am working at a Karplus-Strong sound synthesis technique where an excitation impulse is subjected to a delay with feedback and a one pole LP filter in the feedback line. The process is simply y[0]=(x+ky)[-n] Where x is the input signal, y is the output signal, n is the delay length in samples in the circular delay buffer and k is the feedback factor from 0 to 1. If no filtering is applied at the feedback line, the resulting frequency will be

sample rate / n.

If I apply a simple one pole LP filter in the feedback line, which is very effective for simulation of plucked strings, of form


where f is the filtering factor from 0 to 1, I get a frequency shift which is in some manner proportional to f (the higher f, the higher the shift downwards in frequency).

My problem is, I have no means to quantify this shift, the underlying math is likely too complex for me. But I would like to discover the exact relationship linking f and n so I can compensate n in function of f in order to avoid detuning (n is not integer but a real number becsuse I am using interpolation to read my samples from the circular buffer). The only thing I discovered is that such function D m=D(n,f) always passes by 0 for f=0 and by 1 for f=0.5 and likely goes to infinity for f=1 but it is neither a suitably scaled hyperbole nor exponential but something else.. Thanks in advance

  • $\begingroup$ This is a linear process so not clear to me how you would get a frequency shift. Are you absolutely sure the frequency shift you are experiencing is due to this filter? $\endgroup$ Feb 12 '20 at 0:21
  • 1
    $\begingroup$ @DanBoschen : the frequency that is shifted is not the input frequency, but the peak of the frequency response envelope in response to white noise or an impulse as the input. $\endgroup$
    – hotpaw2
    Feb 12 '20 at 2:44
  • $\begingroup$ @hotpaw2 Ah I see, thanks, that makes more sense now. $\endgroup$ Feb 12 '20 at 2:54
  • $\begingroup$ @elena I am not quite following your formula and how the resulting frequency would be sample rate /n. Is your process also y[m]= x[m-n] + k y[m-n] where n is the delay in samples as you defined? y[0] only gives the result for one sample, so it is clearer if you can describe every sample in y as y[m] or some other index. Please clarify $\endgroup$ Feb 12 '20 at 12:18
  • $\begingroup$ The process is simply a delay with feedback, how would you describe it ? I think y[t]=x[t-n]+b*y[t-n] is the correct equation, b being the feedback factor. Plus, in the feedback line there is a 1 pole LP filter. It is the so called Karplus Strong process $\endgroup$
    – elena
    Feb 13 '20 at 18:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.