diff --git a/applications/lofar2/model/pfb_os/dsp_study_erko.txt b/applications/lofar2/model/pfb_os/dsp_study_erko.txt index 8ca04c9845db0c6a1bbe2a2f6d4ad99991e01141..8764090c5f10f2efcb576ae4118041dce674f418 100644 --- a/applications/lofar2/model/pfb_os/dsp_study_erko.txt +++ b/applications/lofar2/model/pfb_os/dsp_study_erko.txt @@ -21,14 +21,24 @@ # # References: # -# * [LYONS] Understanding Digital Signal Processing, 3rd edition -# * [PROAKIS] Digital Signal Processing, 3rd edition -# * [HARRIS] Multirate Signal Processing for Communication Systems -# * [CROCHIERE] Multirate Signal Processing -# * [JOS1] Mathematics of the Discrete Fourier Transform -# * [JOS2] Introduction to Digital Filters -# * [JOS3] Physical Audio Signal Processing -# * [JOS4] Spectral Audio Signal Processing +# * [LYONS] Understanding Digital Signal Processing, 3rd edition 2011 +# * [PROAKIS] Digital Signal Processing, 3rd edition 1996 +# * [HARRIS] Multirate Signal Processing for Communication Systems, 2004, +# * [STREAMLINING] Streamlining DSP, 2007, 2nd edition 2012 +# * [CROCHIERE] Multirate Signal Processing, 1983 +# * [VAIDYANATHAN] Multirate Systems and Filterbanks, 1993 +# * [JOS1] Mathematics of the Discrete Fourier Transform, 2008 +# * [JOS2] Introduction to Digital Filters, 2007 +# * [JOS3] Physical Audio Signal Processing, 2010 +# * [JOS4] Spectral Audio Signal Processing, 2011 +# +# * [WIKI] https://en.wikipedia.org/wiki/Bilinear_transform +# * [CHIPMUNK] https://github.com/chipmuenk : Python Frequency Design Analysis and DSP +# * [WHDLWHIZ] https://vhdlwhiz.com/articles/ : FIR filter design using DSP blocks +# * [BIQUAD] +# . https://www.w3.org/TR/audio-eq-cookbook/ +# . https://webaudio.github.io/Audio-EQ-Cookbook/Audio-EQ-Cookbook.txt +# . Configure the Coefficients for Digital Biquad Filters in TLV320AIC3xxx Family (pdf) # 1) Linear Time Invariant (LTI) system [LYONS 1.6] @@ -154,7 +164,7 @@ . fircls, fircls1 = constrained ls with pass, stop ripple - The Remez or Parks-McClellan algorithm (scipy.signal.remez(), MATLAB firpm) - . MATLAB filters specify order n, so yield n + 1 coefs + . MATLAB FIR filters specify order n, so yield n + 1 coefs . LS and Remez can do bandpass (= flat), differentiator, hilbert . LS and Remez for large Ntaps (> 1000) can fail, but can be achieved using Fourier interpolation a filter with less coefs. @@ -217,7 +227,7 @@ - Ntaps = func(fs, fpass, fstop, pb ripple, sb ripple) [HARRIS 3.3, LYONS 5.10.5]: ~= fs / df * Atten(dB) / 22, df = abs(fstop - fpass) - - Choose transition region specification in order 4 pi / Ntaps, and not + - Choose transition region specification in order of 4 pi / Ntaps, and not too wide, because then the transition band is not smooth [JOS4 4.5.2]. . Equiripple vs 1/f ripple [HARRIS 3.3.1], rate of decay depends on order of the discontinuity in time domain [JOS4 B.18]: @@ -344,12 +354,26 @@ xa = IDFT(DFT(xr) * 2U) = xr + j ht. With xr = d(n - Ntaps // 2), this yields ht = imag(xa). . Half band [13.1, 13.37] - . HT design using two path, all pass IIR [HARRIS 10.7, STREAM 9] + . An Efficient Analytic Signal Generator [STREAMLINING 38]. Use -45 and +45 + degrees phase rotation of a complex bandpass filter that is 0 for f < 0 + and has rect window with cosine-taper (~= Tukey window, ~= raised cosine) + for f > 0. This makes that the real branch filter and the imag branch + filter have time - reversed coefficients, which implies that their + magnitude responses are identical and the filters can share coefficients. + However the filters are no longer symmetrical, due to the phase rotation, + so they do not have linear phase anymore, but within the band they have + almost linear phase. + The filter has taper a at f_low and f_high, so it can be defined for any + bandpass. This is useful to combine the analytic signal creation with a + specific BPF. + . HT design using two path, all pass IIR [HARRIS 10.7, STREAMLINING 9] 5) Infinite Impulse Response (IIR) filters and z-transform - IIR filters are called recursive and FIR filters are called nonrecursive, - however FIR filters can also be recursive + however FIR filters can also be recursive [LYONS 6.6.1] +- IIR filter order is largest of nof zeros or nof poles, so largest of len(b) + - 1 or len(a) - 1. - Difference equation: . Sign of ak coefficients, [LYONS 6.1 uses +ak], [JOS2 5.1, PROAKIS 7.1 use -ak] in y[n]. Using -ak in difference equation is preferred, because then @@ -406,7 +430,7 @@ . scipy.signal.freqz plots frequency response along unit circle z = exp(j w) defines ak for k > 1 as negative -- biquad (= 2nd-order section = sos): +- biquad (= second-order section = sos): Y(z) b0 + b1 z^-1 + b1 z^-2 (z - z0)(z - z1) H(z) = ---- = ---------------------- = K ---------------- @@ -419,7 +443,7 @@ overflow, rounding [LYONS 6.7]. . Transposed Direct-Form II is preferred, but with Direct-Form I the z^-1 delays can also be shared between biquad stages [LYONS 6.8.1]. - . Use biquads (sos). + . Use biquads = second-order sections (sos). . Do biquad with poles closest to unit circle first, combined with zeros that are closest to those poles. Order biquads in either decreasing or increasing pole distance fron the unit circle [LYONS 6.8.1] @@ -434,7 +458,8 @@ . scipy.signal.residuez(b, a, fs) . Bilinear transform IIR design method, maps s-plane to z-plane, this warps the analogue frequencies axis to range 0 - fs to avoid aliasing, but does - introduce nonlinear distortion [LYONS 6.11]. + introduce nonlinear distortion [LYONS 6.11]. This is first order + approximation of z = exp(sT) --> s = 1/T ln(z): 1 - z^-1 s = 2 / Ts -------- @@ -449,15 +474,21 @@ . Optimized IIR design methods, iteratively adjust coefficients to achieve a specified arbitrary frequency response (f_pass, f_stop, r_pass_dB, r_stop_dB bands). + . band types: lowpass, highpass, bandpass, bandstop . scipy.signal.iirdesign(), can do all of: - . scipy.signal.cheby2(), ripple in stop band - . scipy.signal.cheby1(), ripple in pass band . scipy.signal.butter(), maximally flat in pass band, decay in stop band + . scipy.signal.cheby1(), ripple in pass band + . scipy.signal.cheby2(), ripple in stop band . scipy.signal.ellip(N, rp, rs, Wn): Elliptic (Cauer) digital and analog filter design. As rp approaches 0, the elliptical filter becomes a Chebyshev type II filter (cheby2). As rs approaches 0, it becomes a Chebyshev type I filter (cheby1). As both approach 0, it becomes a Butterworth filter (butter). + . Cannot do bessel (= maximal flat group delay), because bilinear + transform preserves the amplitude response but not the group delay. + . scipy.signal.iirfilter(), can design IIR filter for given order. + . For single biquad bandpass alternatively use signal.iirpeak() + For single biquad bandstop alternatively use signal.iirnotch() 6) Discrete Fourier Transform (DFT) - The N roots of unity [JOS1 3.12, 5.1, PROAKIS 5.1.3, LYONS 4.3]. Note JOS