### Time-Varying Delay-Line Reads

If denotes the input to a time-varying delay, the output can be written as*bandlimited interpolation*(see §4.4) or other techniques for implementation of

*fractional delay*[267,383]. Let's analyze the frequency shift caused by a time-varying delay by setting to a complex sinusoid at frequency :

where denotes the output frequency, and denotes the time derivative of the delay . Thus,

*the delay growth-rate*, , equals the

*relative frequency downshift*:

*moving listener*, with

That is, the delay growth-rate, , should be set to the speed of the listener

*away*from the source, normalized by sound speed . Simulating

*source*motion is also possible, but the relation between delay change and desired frequency shift is more complex,

*viz.*, from Eq.(5.2) and Eq.(5.6),

*input*instead of its output. The time-varying delay line was described in §5.1. As discussed there, to implement a

*continuously*varying delay, we add a ``delay growth parameter''

`g`to the

`delayline`function in Fig.5.1, and change the line

rptr += 1; // pointer updateto

rptr += 1 - g; // pointer updateWhen

`g`is 0, we have a fixed delay line, corresponding to in Eq.(5.6). When , the delay grows samples per sample, which we may also interpret as seconds per second,

*i.e.*, . By Eq.(5.7), we see that we need

*passing*the write-pointers or vice versa. In generic

*frequency shifters*[275], or in a Doppler simulator not driven by a changing geometry, a pointer cross-fade scheme may be necessary when the read- and write-pointers get too close to each other.

**Next Section:**

Multiple Read Pointers

**Previous Section:**

Doppler Simulation via Delay Lines