Signal Processing Libraries for FAUST

Signal Processing Libraries for FAUST

Signal Processing Libraries for FAUST Julius Smith CCRMA, Stanford University Linux Audio Conference 2012 (LAC-12) April 14, 2012 Julius Smith LAC-12 – 1 / 30 Overview effect.lib filter.lib oscillator.lib Conclusion Overview Julius Smith LAC-12 – 2 / 30 FAUST Signal Processing Libraries Overview oscillator.lib — signal sources effect.lib • filter.lib filter.lib — general-purpose digital filters oscillator.lib • Conclusion effect.lib — digital audio effects • Julius Smith LAC-12 – 3 / 30 Highlights of Additions Since LAC-08 Overview oscillator.lib effect.lib • filter.lib Filter-Based Sinusoid Generators oscillator.lib ◦ Alias-Suppressed Classic Waveform Generators Conclusion ◦ filter.lib • Ladder/Lattice Digital Filters ◦ Audio Filter Banks ◦ effect.lib • Biquad-Based Moog VCFs ◦ Phasing/Flanging/Compression ◦ Artificial Reverberation ◦ Julius Smith LAC-12 – 4 / 30 Overview effect.lib filter.lib oscillator.lib Conclusion effect.lib Julius Smith LAC-12 – 5 / 30 Moog Voltage Controlled Filters (VCF) Overview moog vcf 2b = ideal Moog VCF transfer function factored effect.lib • • Moog VCF into second-order “biquad” sections • phasing/flanging • reverberation Static frequency response is more accurate than filter.lib ◦ moog vcf (which has an unwanted one-sample delay in oscillator.lib its feedback path) Conclusion Coefficient formulas are more complex when one or both ◦ parameters are varied moog vcf 2bn = same but using normalized ladder biquads • Super-robust to time-varying resonant-frequency ◦ changes (no pops!) See FAUST example vcf wah pedals.dsp ◦ Julius Smith LAC-12 – 6 / 30 Moog VCF Moog VCF See FAUST example vcf wah pedals.dsp moog vcf(res,fr) analog-form Moog VCF res = corner-resonance amount [0-1] fr = corner-resonance frequency in Hz moog vcf 2b(res,fr) Moog VCF implemented as two biquads (tf2) moog vcf 2bn(res,fr) two protected, normalized-ladder biquads (tf2np) Julius Smith LAC-12 – 7 / 30 Phasing and Flanging Phasing and Flanging See FAUST example phaser flanger.dsp vibrato2 mono(...) modulated allpass-chain (see effect.lib for usage) phaser2 mono(...) phasing based on 2nd-order allpasses (see effect.lib for phaser2 stereo(...) stereo phaser based on 2nd-order allpass chains flanger mono(...) mono flanger flanger stereo(...) stereo flanger Julius Smith LAC-12 – 8 / 30 Artificial Reverberation (effect.lib) Overview General Feedback Delay Network (FDN) Reverberation effect.lib • • Moog VCF • phasing/flanging See FAUST example reverb designer.dsp • reverberation filter.lib oscillator.lib Zita-Rev1 Reverb (FDN+Schroeder) by Fons Adriaensen Conclusion • (ported to FAUST) See FAUST example zita rev1.dsp Julius Smith LAC-12 – 9 / 30 Overview effect.lib filter.lib oscillator.lib Conclusion filter.lib Julius Smith LAC-12 – 10 / 30 Ladder/Lattice Digital Filters (filter.lib) Overview Ladder and lattice digital filters have superior numerical effect.lib • filter.lib properties • ladder/lattice • normalized ladder Arbitrary Order (thanks to pattern matching in FAUST) • filter banks • oscillator.lib Arbitrary (Stable) Poles and Zeros Conclusion • All Four Major Types: • Kelly-Lochbaum Ladder Filter ◦ One-Multiply Lattice Filter ◦ Two-Multiply Lattice Filter ◦ Normalized Ladder Filter ◦ Julius Smith LAC-12 – 11 / 30 Normalized Ladder Digital Filters (filter.lib) Overview Advantages of the Normalized Ladder Filter Structure: effect.lib filter.lib Signal Power Invariant wrt Coefficient Variation • ladder/lattice • • normalized ladder • filter banks Extreme Modulation is Safe oscillator.lib ⇒ Super-Solid Biquad (sweep it as fast as you want!): Conclusion • tf2snp() “transfer function, 2nd-order, s-plane, normalized, protected” See FAUST example vcf wah pedals.dsp • Julius Smith LAC-12 – 12 / 30 Ladder and Lattice Digital Filters Lattice/Ladder Filters iir lat2(bcoeffs,acoeffs) two-multiply lattice digital filter iir kl(bcoeffs,acoeffs) Kelly-Lochbaum ladder digital filter iir lat1(bcoeffs,acoeffs) one-multiply lattice digital filter iir nl(bcoeffs,acoeffs) normalized ladder digital filter tf2np(b0,b1,b2,a1,a2) biquad based on stabilized second-order normalized ladder filter nlf2(f,r) second-order normalized ladder digital filter special API Julius Smith LAC-12 – 13 / 30 Block Diagrams Overview effect.lib import("filter.lib"); filter.lib • ladder/lattice bcoeffs = (1,2,3); • normalized ladder • filter banks acoeffs = (0.1,0.2); oscillator.lib Conclusion process = impulse <: iir(bcoeffs,acoeffs), iir_lat2(bcoeffs,acoeffs), iir_kl(bcoeffs,acoeffs), iir_lat1(bcoeffs,acoeffs) :> _; Julius Smith LAC-12 – 14 / 30 Audio Filter Banks (filter.lib) Overview ∆ effect.lib “Analyzer” = Power-Complementary Band-Division • filter.lib (e.g., for Spectral Display) • ladder/lattice • normalized ladder • filter banks See FAUST example spectral level.dsp oscillator.lib Conclusion ∆ “Filterbank = Allpass-Complementary Band-Division • (Bands Summable Without Notch Formation) See FAUST example graphic eq.dsp Filterbanks in filter.lib are implemented as analyzers in • cascade with delay equalizers that convert the (power-complementary) analyzer to an (allpass-complementary) filter bank Julius Smith LAC-12 – 15 / 30 Overview effect.lib filter.lib oscillator.lib Conclusion oscillator.lib Julius Smith LAC-12 – 16 / 30 oscillator.lib Overview Reference implementations of elementary signal generators: effect.lib filter.lib sinusoids (filter-based) oscillator.lib • • sinusoids sawtooth (bandlimited) • oscb • • oscr • oscs pulse-train = saw minus delayed saw • oscw ◦ • virtual analog square = 50% duty-cycle pulse-train • sawN ◦ • sawtooth examples triangle = (leakily) integrated square • pink noise ◦ Conclusion impulse-train = differentiated saw ◦ (all alias-suppressed) ◦ pink-noise (1/f noise) • Julius Smith LAC-12 – 17 / 30 Sinusoid Generators in oscillator.lib Overview “biquad” two-pole filter section effect.lib oscb filter.lib (impulse response) oscillator.lib oscr 2D vector rotation • sinusoids (second-order normalized ladder) • oscb • oscr provides sine and cosine outputs • oscs oscrs sine output of oscr • oscw • virtual analog oscrc cosine output of oscr • sawN • sawtooth examples oscs state variable osc., cosine output • pink noise (modified coupled form resonator) Conclusion oscw digital waveguide oscillator oscws sine output of oscw oscwc cosine output of oscw Julius Smith LAC-12 – 18 / 30 Block Diagrams Overview Inspect the following test program: effect.lib filter.lib oscillator.lib • sinusoids import("oscillator.lib"); • oscb • oscr • oscs freq = 100; • oscw • virtual analog • sawN process = oscb(freq), • sawtooth examples oscrs(freq), • pink noise Conclusion oscs(freq), oscws(freq); Julius Smith LAC-12 – 19 / 30 Sinusoidal Oscillator oscb Overview oscb (impulsed direct-form biquad) effect.lib filter.lib One multiply and two adds per sample of output oscillator.lib • • sinusoids Amplitude varies strongly with frequency • oscb • • oscr • oscs Numerically poor toward freq=0 (“dc”) • oscw • • virtual analog Nice choice for high, fixed frequencies • sawN • • sawtooth examples • pink noise Conclusion Julius Smith LAC-12 – 20 / 30 Sinusoidal Oscillator oscr Overview oscr (2D vector rotation) effect.lib filter.lib Four multiplies and two adds per sample oscillator.lib • • sinusoids Amplitude is invariant wrt frequency • oscb • • oscr • oscs Good down to dc • oscw • • virtual analog In-phase (cosine) and phase-quadrature (sine) outputs • sawN • • sawtooth examples • pink noise Amplitude drifts over long durations at most frequencies • Conclusion (coefficients are roundings of s = sin(2*PI*freq/SR) 2 2 and c = cos(2*PI*freq/SR), so s + c = 1) 6 Nice for rapidly varying frequencies • Julius Smith LAC-12 – 21 / 30 Sinusoidal Oscillator oscs Overview oscs (digitized “state variable filter”) effect.lib filter.lib “Magic Circle Algorithm” in computer graphics oscillator.lib • • sinusoids Two multiplies and two additions per output sample • oscb • • oscr • oscs Amplitude varies much less with frequency than oscr • oscw • • virtual analog Good down to dc • sawN • • sawtooth examples • pink noise No long-term amplitude drift Conclusion • In-phase and quadrature components available at low • frequencies (exact at dc) Nice lower-cost replacement for oscr when amplitude can • vary slightly with frequency, and exact phase-quadrature outputs are not needed Julius Smith LAC-12 – 22 / 30 Sinusoidal Oscillator oscw Overview oscw (2nd-order digital waveguide oscillator) effect.lib filter.lib One multiply and three additions per sample (fixed frequency) oscillator.lib • • sinusoids Two multiplies and three additions when frequency is changing • oscb • • oscr • oscs Same good properties as oscr, except • oscw • • virtual analog No long-term amplitude drift • sawN ◦ • sawtooth examples Numerical difficulty below 10 Hz or so (not for LFOs) • pink noise ◦ Conclusion One of the two state variables is not normalized (higher ◦ dynamic range) Nice lower-cost replacement for oscr when state-variable • dynamic range can be accommodated (e.g., in VLSI) Julius Smith LAC-12 – 23 / 30 Virtual Analog Waveforms in oscillator.lib Overview imptrain(freq) periodic impulse train effect.lib squarewave(freq) zero-mean square wave filter.lib sawtooth(freq) alias-suppressed sawtooth oscillator.lib sawN(N,freq) order N anti-aliased saw • sinusoids • oscb • oscr sawtooth and sawN based on “Differentiated Polynomial • oscs • • oscw Waveform” (DPW) method for aliasing suppression • virtual analog • sawN sawN uses a differentiated polynomial of order N • sawtooth examples • • pink noise Increase N to reduce aliasing further Conclusion

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    30 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us