Download presentation
Presentation is loading. Please wait.
Published byEthen Shotton Modified over 9 years 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 37.1 41.1 43.7 5.01.7 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
i0000000100000001 0000000011111111 0000000000000001 i 511 2 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
© 2025 SlidePlayer.com. Inc.
All rights reserved.