Download presentation

Presentation is loading. Please wait.

Published byEthen Shotton Modified about 1 year ago

1
Non-recursive Comb Filter a z -m K K Ka t m samples impulse response f f = SR/m f 180 o

2
Recursive Comb Filter z -m K b < 1 LP K Kb t m samples impulse response Kb 2 Kb 3 Kb 4 f f = SR/m f/2 b =.001 delay = m/SR

3
All-pass Comb Filter z -m b -b b t impulse response b2b2 b3b3 b4b4 f recursive and non recursive parts cancel each other

4
f f non-recursive recursive +1 recursive -1 a a

5
decay density Manfred Schroeder Reverberator

6
Block diagram of the sampled data system simulated on the digital computer Block diagram of a single channel (monophonic) reverberator Allpass recursive comb (decay) (density)

7
Schroeder Reverberator c c c c AA 29.7 msec decay density sets reverb time

8
f f f f + + = Summation of recursive comb filters should approximate a flat response

9
Problems f a 1) 2) t periodic Response is not flat Impulse response has periodicities that produce pitch percepts

10
Frequency in Hz (linear) z-plane Power in dB Air & wall absorption filter Usually the low-pass filter inserted into the recursive comb filter is a first-order filter. Here is a second- order filter that is more accurate. Low-frequency loss

11
Comparison of simulated and actual rooms simulated real

12
Early Reflections delay bufferreverb input output t input early reflections reverb a

13
Kendall & Martens 1984

14
Spatial Reverberation

15
Wet/Dry Mix Dry Wet Reverb L R

16
Implementing Delay Buffers - Queue in out inout

17
Delay Buffer outPos inPos delay outPos = inPos - delay; buffer[inPos] = in; out = buffer[outPos]

18
ij in out buffer(i) = in; out = buffer(j); if(++i >=buffer.length) i = 0; if(++j >=buffer.length) j = 0;

19
ij in out buffer buffer length is larger than needed delay is i - j

20
i i n -sized buffers implemented with masking i = (i + 1) & 511; bitwise and

21
modulated delay ij in out buffer delay (i - j) is dynamic given int delay: j = i - delay; while (j >= buffer.length) j -= buffer.length; while (j < 0) j += buffer.length; check bounds!

22
Fractional Delay i in buffer out? instDelay as int.fract outPos = i - instDelay; j = (int) outPos; jP1 = j + 1; fract = outPos - j; check bounds ~ ~ ~ ~ How could we use the fractional delay?

23
Linear Interpolation Big Problem z -1 x(n) y(n) Causes amplitude modulation of high frequencies t buffer(j) buffer(jP1) fract out = buffer(jP1)*(1.0-fract) + buffer(j)*fract;

24
Big Problem? Averaging two samples is filtering (1st-order FIR Low-pass) fract = 0 fract = 0.5 SR/2 a f 1.0

25
Allpass Interpolation z -1 x(n)y(n) z -1 1-fract Good for delay modulation that causes relatively small pitch changes

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google