##
Frequency-Response Matching Using

Digital Filter Design Methods

Given force inputs and velocity outputs, the *frequency response*of an ideal mass was given in Eq.(7.1.2) as

*integrator*and an ideal spring is a

*differentiator*. The modeling problem for masses and springs can thus be posed as a problem in

*digital filter design*given the above desired frequency responses. More generally, the admittance frequency response ``seen'' at the port of a general th-order LTI system is, from Eq.(8.3),

where we assume . Similarly, point-to-point ``trans-admittances'' can be defined as the velocity Laplace transform at one point on the physical object divided by the driving-force Laplace transform at some other point. There is also of course no requirement to always use driving force and observed velocity as the physical variables; velocity-to-force, force-to-force, velocity-to-velocity, force-to-acceleration, etc., can all be used to define transfer functions from one point to another in the system. For simplicity, however, we will prefer admittance transfer functions here.

### Ideal Differentiator (Spring Admittance)

Figure 8.1 shows a graph of the frequency response of the ideal differentiator (spring admittance). In principle, a*digital differentiator*is a filter whose frequency response optimally approximates for between and . Similarly, a

*digital integrator*must match along the unit circle in the plane. The reason an exact match is not possible is that the ideal frequency responses and , when wrapped along the unit circle in the plane, are not ``smooth'' functions any more (see Fig.8.1). As a result, there is no filter with a rational transfer function (

*i.e.*, finite order) that can match the desired frequency response exactly.

### Digital Filter Design Overview

This section (adapted from [428]), summarizes some of the more commonly used methods for digital filter design aimed at matching a*nonparametric*frequency response, such as typically obtained from input/output measurements. This problem should be distinguished from more classical problems with their own specialized methods, such as designing lowpass, highpass, and bandpass filters [343,362], or peak/shelf equalizers [559,449], and other utility filters designed from

*a priori*mathematical specifications. The problem of fitting a digital filter to a prescribed frequency response may be formulated as follows. To simplify, we set . Given a continuous complex function , corresponding to a causal desired frequency response,

^{9.8}find a stable digital filter of the form where

(9.15) | |||

(9.16) |

with given, such that some

*norm*of the error

is minimum with respect to the filter coefficients

*constrained*to be stable, and since is causal (no positive powers of ), stability implies causality. Consequently, the impulse response of the model is zero for . The filter-design problem is then to find a (strictly) stable -pole, -zero digital filter which minimizes some norm of the error in the frequency-response. This is fundamentally

*rational approximation of a complex function of a real (frequency) variable, with constraints on the poles*. While the filter-design problem has been formulated quite naturally, it is difficult to solve in practice. The strict stability assumption yields a compact space of filter coefficients , leading to the conclusion that a best approximation

*exists*over this domain.

^{9.9}Unfortunately, the norm of the error typically is not a

*convex*

^{9.10}function of the filter coefficients on . This means that algorithms based on gradient descent may fail to find an optimum filter due to their premature termination at a suboptimal local minimum of . Fortunately, there is at least one norm whose global minimization may be accomplished in a straightforward fashion without need for initial guesses or ad hoc modifications of the complex (phase-sensitive) IIR filter-design problem--the

*Hankel norm*[155,428,177,36]. Hankel norm methods for digital filter design deliver a spontaneously

*stable*filter of any desired order without imposing coefficient constraints in the algorithm. An alternative to Hankel-norm approximation is to reformulate the problem, replacing Eq.(8.17) with a modified error criterion so that the resulting problem can be solved by

*linear least-squares*or

*convex optimization*techniques. Examples include

*Pseudo-norm*minimization: (Pseudo-norms can be zero for nonzero functions.) For example, Padé approximation falls in this category. In Padé approximation, the first samples of the impulse-response of are matched exactly, and the error in the remaining impulse-response samples is ignored.*Ratio Error*: Minimize subject to . Minimizing the norm of the ratio error yields the class of methods known as*linear prediction*techniques [20,296,297]. Since, by the definition of a norm, we have , it follows that ; therefore,*ratio error methods ignore the phase of the approximation*. It is also evident that ratio error is minimized by making larger than .^{9.11}For this reason, ratio-error methods are considered most appropriate for modeling the*spectral envelope*of . It is well known that these methods are fast and exceedingly robust in practice, and this explains in part why they are used almost exclusively in some data-intensive applications such as speech modeling and other spectral-envelope applications. In some applications, such as adaptive control or forecasting, the fact that linear prediction error is minimized can justify their choice.*Equation error*: Minimize*linear prediction error*is minimized in the sense, and in certain applications this is ideal. (Equation-error methods thus provide a natural extension of ratio-error methods to include zeros.) Using so-called*Steiglitz-McBride iterations*[287,449,288], the equation-error solution iteratively approaches the norm-minimizing solution of Eq.(8.17) for the L2 norm. Examples of minimizing equation error using the matlab function`invfreqz`are given in §8.6.3 and §8.6.4 below. See [449, Appendix I] (based on [428, pp. 48-50]) for a discussion of equation-error IIR filter design and a derivation of a fast equation-error method based on the Fast Fourier Transform (FFT) (used in`invfreqz`).- Conversion to
*real-valued approximation*: For example,*power spectrum matching*, i.e., minimization of , is possible using the Chebyshev or norm [428]. Similarly,*linear-phase*filter design can be carried out with some guarantees, since again the problem reduces to real-valued approximation on the unit circle. The essence of these methods is that the*phase-response*is eliminated from the error measure, as in the norm of the ratio error, in order to convert a complex approximation problem into a real one. Real rational approximation of a continuous curve appears to be solved in principle only under the norm [373,374]. *Decoupling poles and zeros*: An effective example of this approach is Kopec's method [428] which consists of using ratio error to find the poles, computing the error spectrum , inverting it, and fitting poles again (to ). There is a wide variety of methods which first fit poles and then zeros. None of these methods produce optimum filters, however, in any normal sense.

*log-magnitude*frequency-response error. This is due to the way we hear spectral distortions in many circumstances. A technique which accomplishes this objective to the first order in the norm is described in [428]. Sometimes the most important spectral structure is confined to an interval of the frequency domain. A question arises as to how this structure can be accurately modeled while obtaining a cruder fit elsewhere. The usual technique is a weighting function versus frequency. An alternative, however, is to frequency-warp the problem using a first-order

*conformal map*. It turns out a first-order conformal map can be made to approximate very well frequency-resolution scales of human hearing such as the

*Bark scale*or

*ERB scale*[459]. Frequency-warping is especially valuable for providing an effective weighting function connection for filter-design methods, such as the Hankel-norm method, that are intrinsically do not offer choice of a

*weighted*norm for the frequency-response error. There are several methods which produce instead of directly. A

*fast spectral factorization*technique is useful in conjunction with methods of this category [428]. Roughly speaking, a size polynomial factorization is replaced by an FFT and a size system of linear equations.

### Digital Differentiator Design

We saw the ideal digital differentiator frequency response in Fig.8.1, where it was noted that the discontinuity in the response at made an ideal design unrealizable (infinite order). Fortunately, such a design is not even needed in practice, since there is invariably a guard band between the highest supported frequency and half the sampling rate .`invfreqz`(which minimizes equation error) in Octave.

^{9.12}The weight function passed to

`invfreqz`was 1 from 0 to 20 kHz, and zero from 20 kHz to half the sampling rate (24 kHz). Notice how, as a result, the amplitude response follows that of the ideal differentiator until 20 kHz, after which it rolls down to a gain of 0 at 24 kHz, as it must (see Fig.8.1). Higher order fits yield better results. Using poles can further improve the results, but the filter should be checked for stability since

`invfreqz`designs filters in the frequency domain and does not enforce stability.

^{9.13}

### Fitting Filters to Measured Amplitude Responses

The preceding filter-design example digitized an ideal differentiator, which is an example of converting an LTI lumped modeling element into a digital filter while maximally preserving its frequency response over the audio band. Another situation that commonly arises is the need for a digital filter that matches a*measured frequency response*over the audio band.

#### Measured Amplitude Response

Figure 8.3 shows a plot of simulated amplitude-response measurements at 10 frequencies equally spread out between 100 Hz and 3 kHz on a log frequency scale. The ``measurements'' are indicated by circles. Each circle plots, for example, the output amplitude divided by the input amplitude for a sinusoidal input signal at that frequency [449]. These ten data points are then extended to dc and half the sampling rate, interpolated, and resampled to a uniform frequency grid (solid line in Fig.8.3), as needed for FFT processing. The details of these computations are listed in Fig.8.4. We will fit a four-pole, one-zero, digital-filter frequency-response to these data.^{9.14}

NZ = 1; % number of ZEROS in the filter to be designed NP = 4; % number of POLES in the filter to be designed NG = 10; % number of gain measurements fmin = 100; % lowest measurement frequency (Hz) fmax = 3000; % highest measurement frequency (Hz) fs = 10000; % discrete-time sampling rate Nfft = 512; % FFT size to use df = (fmax/fmin)^(1/(NG-1)); % uniform log-freq spacing f = fmin * df .^ (0:NG-1); % measurement frequency axis % Gain measurements (synthetic example = triangular amp response): Gdb = 10*[1:NG/2,NG/2:-1:1]/(NG/2); % between 0 and 10 dB gain % Must decide on a dc value. % Either use what is known to be true or pick something "maximally % smooth". Here we do a simple linear extrapolation: dc_amp = Gdb(1) - f(1)*(Gdb(2)-Gdb(1))/(f(2)-f(1)); % Must also decide on a value at half the sampling rate. % Use either a realistic estimate or something "maximally smooth". % Here we do a simple linear extrapolation. While zeroing it % is appealing, we do not want any zeros on the unit circle here. Gdb_last_slope = (Gdb(NG) - Gdb(NG-1)) / (f(NG) - f(NG-1)); nyq_amp = Gdb(NG) + Gdb_last_slope * (fs/2 - f(NG)); Gdbe = [dc_amp, Gdb, nyq_amp]; fe = [0,f,fs/2]; NGe = NG+2; % Resample to a uniform frequency grid, as required by ifft. % We do this by fitting cubic splines evaluated on the fft grid: Gdbei = spline(fe,Gdbe); % say `help spline' fk = fs*[0:Nfft/2]/Nfft; % fft frequency grid (nonneg freqs) Gdbfk = ppval(Gdbei,fk); % Uniformly resampled amp-resp figure(1); semilogx(fk(2:end-1),Gdbfk(2:end-1),'-k'); grid('on'); axis([fmin/2 fmax*2 -3 11]); hold('on'); semilogx(f,Gdb,'ok'); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); title(['Measured and Extrapolated/Interpolated/Resampled ',... 'Amplitude Response']); |

#### Desired Impulse Response

It is good to check that the desired impulse response is not overly aliased in the time domain. The impulse-response for this example is plotted in Fig.8.5. We see that it appears quite short compared with the inverse FFT used to compute it. The script in Fig.8.6 gives the details of this computation, and also prints out a measure of ``time-limitedness'' defined as the norm of the outermost 20% of the impulse response divided by its total norm--this measure was reported to be % for this example.*noncausal*. In fact, it is zero phase [449]. This is of course expected because the desired frequency response was real (and nonnegative).

Ns = length(Gdbfk); if Ns~=Nfft/2+1, error("confusion"); end Sdb = [Gdbfk,Gdbfk(Ns-1:-1:2)]; % install negative-frequencies S = 10 .^ (Sdb/20); % convert to linear magnitude s = ifft(S); % desired impulse response s = real(s); % any imaginary part is quantization noise tlerr = 100*norm(s(round(0.9*Ns:1.1*Ns)))/norm(s); disp(sprintf(['Time-limitedness check: Outer 20%% of impulse ' ... 'response is %0.2f %% of total rms'],tlerr)); % = 0.02 percent if tlerr>1.0 % arbitrarily set 1% as the upper limit allowed error('Increase Nfft and/or smooth Sdb'); end figure(2); plot(s,'-k'); grid('on'); title('Impulse Response'); xlabel('Time (samples)'); ylabel('Amplitude'); |

#### Converting the Desired Amplitude Response to Minimum Phase

Phase-sensitive filter-design methods such as the equation-error method implemented in`invfreqz`are normally constrained to produce filters with

*causal*impulse responses.

^{9.15}In cases such as this (phase-sensitive filter design when we don't care about phase--or don't

*have*it), it is best to compute the

*minimum phase*corresponding to the desired amplitude response [449]. As detailed in Fig.8.8, the minimum phase is constructed by the

*cepstral method*[449].

^{9.16}The four-pole, one-zero filter fit using

`invfreqz`is shown in Fig.8.7.

c = ifft(Sdb); % compute real cepstrum from log magnitude spectrum % Check aliasing of cepstrum (in theory there is always some): caliaserr = 100*norm(c(round(Ns*0.9:Ns*1.1)))/norm(c); disp(sprintf(['Cepstral time-aliasing check: Outer 20%% of ' ... 'cepstrum holds %0.2f %% of total rms'],caliaserr)); % = 0.09 percent if caliaserr>1.0 % arbitrary limit error('Increase Nfft and/or smooth Sdb to shorten cepstrum'); end % Fold cepstrum to reflect non-min-phase zeros inside unit circle: % If complex: % cf=[c(1),c(2:Ns-1)+conj(c(Nfft:-1:Ns+1)),c(Ns),zeros(1,Nfft-Ns)]; cf = [c(1), c(2:Ns-1)+c(Nfft:-1:Ns+1), c(Ns), zeros(1,Nfft-Ns)]; Cf = fft(cf); % = dB_magnitude + j * minimum_phase Smp = 10 .^ (Cf/20); % minimum-phase spectrum Smpp = Smp(1:Ns); % nonnegative-frequency portion wt = 1 ./ (fk+1); % typical weight fn for audio wk = 2*pi*fk/fs; [B,A] = invfreqz(Smpp,wk,NZ,NP,wt); Hh = freqz(B,A,Ns); figure(3); plot(fk,db([Smpp(:),Hh(:)])); grid('on'); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); title('Magnitude Frequency Response'); % legend('Desired','Filter'); |

### Further Reading on Digital Filter Design

This section provided only a ``surface scratch'' into the large topic of digital filter design based on an arbitrary frequency response. The main goal here was to provide a high-level orientation and to underscore the high value of such an approach for encapsulating linear, time-invariant subsystems in a computationally efficient yet accurate form. Applied examples will appear in later chapters. We close this section with some pointers for further reading in the area of digital filter design. Some good books on digital filter design in general include [343,362,289]. Also take a look at the various references in the`help/type`info for Matlab/Octave functions pertaining to filter design. Methods for FIR filter design (used in conjunction with FFT convolution) are discussed in Book IV [456], and the equation-error method for IIR filter design was introduced in Book II [449]. See [281,282] for related techniques applied to guitar modeling. See [454] for examples of using matlab functions

`invfreqz`and

`invfreqs`to fit filters to measured frequency-response data (specifically the

*wah pedal*design example). Other filter-design tools can be found in the same website area. The overview of methods in §8.6.2 above is elaborated in [428], including further method details, application to violin modeling, and literature pointers regarding the methods addressed. Some of this material was included in [449, Appendix I]. In Octave or Matlab, say

`lookfor filter`to obtain a list of filter-related functions. Matlab has a dedicated filter-design toolbox (say

`doc filterdesign`in Matlab). In many matlab functions (both Octave and Matlab), there are literature citations in the source code. For example,

`type invfreqz`in Octave provides a URL to a Web page (from [449]) describing the FFT method for equation-error filter design.

**Next Section:**

Commuted Synthesis

**Previous Section:**

Modal Expansion