Time-Varying Delay-Line Reads
If denotes the input to a time-varying delay, the output can be written as
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:
Comparing Eq.(5.6) to Eq.(5.2), we find that the time-varying delay most naturally simulates Doppler shift caused by a 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),
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
Note that when the read- and write-pointers are driven directly from a model of physical propagation-path geometry, they are always separated by predictable minimum and maximum delay intervals. This implies it is unnecessary to worry about the read-pointer 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