DSPRelated.com
Free Books

Single-Reed Theory

Figure 9.40: Schematic diagram of mouth cavity, reed aperture, and bore.
\includegraphics[scale=0.9]{eps/fReedSchematic}

A simplified diagram of the clarinet mouthpiece is shown in Fig. 9.40. The pressure in the mouth is assumed to be a constant value $ p_m$, and the bore pressure $ p_b$ is defined located at the mouthpiece. Any pressure drop $ p_{\Delta}= p_m-p_b$ across the mouthpiece causes a flow $ u_m$ into the mouthpiece through the reed-aperture impedance $ R_m(p_{\Delta})$ which changes as a function of $ p_{\Delta}$ since the reed position is affected by $ p_{\Delta}$. To a first approximation, the clarinet reed can be regarded as a spring flap regulated Bernoulli flow (§B.7.5), [249]). This model has been verified well experimentally until the reed is about to close, at which point viscosity effects begin to appear [102]. It has also been verified that the mass of the reed can be neglected to first order,10.18 so that $ R_m(p_{\Delta})$ is a positive real number for all values of $ p_{\Delta}$. Possibly the most important neglected phenomenon in this model is sound generation due to turbulence of the flow, especially near reed closure. Practical synthesis models have always included a noise component of some sort which is modulated by the reed [431], despite a lack of firm basis in acoustic measurements to date.

The fundamental equation governing the action of the reed is continuity of volume velocity, i.e.,

$\displaystyle u_b+u_m= 0$ (10.35)

where

$\displaystyle u_m(p_{\Delta}) \isdef \frac{p_{\Delta}}{R_m(p_{\Delta})}$ (10.36)

and

$\displaystyle u_b\isdef u_b^{+}+ u_b^{-}= \frac{p_b^{+}-p_b^{-}}{R_b}$ (10.37)

is the volume velocity corresponding to the incoming pressure wave $ p_b^{+}$ and outgoing pressure wave $ p_b^{-}$. (The physical pressure in the bore at the mouthpiece is of course $ p_b=p_b^{+}+p_b^{-}$.) The wave impedance of the bore air-column is denoted $ R_b$ (computable as the air density times sound speed $ c$ divided by cross-sectional area).

In operation, the mouth pressure $ p_m$ and incoming traveling bore pressure $ p_b^{+}$ are given, and the reed computation must produce an outgoing bore pressure $ p_b^{-}$ which satisfies (9.35), i.e., such that

0 $\displaystyle =$ $\displaystyle u_m+u_b= \frac{p_{\Delta}}{R_m(p_{\Delta})} + \frac{p_b^{+}-p_b^{-}}{R_b},$ (10.38)
$\displaystyle p_{\Delta}$ $\displaystyle \isdef$ $\displaystyle p_m-p_b= p_m- (p_b^{+}+p_b^{-})$  

Solving for $ p_b^{-}$ is not immediate because of the dependence of $ R_m$ on $ p_{\Delta}$ which, in turn, depends on $ p_b^{-}$. A graphical solution technique was proposed [151,244,308] which, in effect, consists of finding the intersection of the two terms of the equation as they are plotted individually on the same graph, varying $ p_b^{-}$. This is analogous to finding the operating point of a transistor by intersecting its operating curve with the ``load line'' determined by the load resistance.

It is helpful to normalize (9.38) as follows: Define $ G(p_{\Delta}) = R_b
u_m(p_{\Delta}) = R_bp_{\Delta}/R_m(p_{\Delta})$, and note that $ p_b^{+}-p_b^{-}=2p_b^{+}-p_m-(p_b^{+}+p_b^{-}-p_m)\isdeftext p_{\Delta}-p_{\Delta}^{+}$, where $ p_{\Delta}^{+}\isdeftext
p_m-2p_b^{+}$. Then (9.38) can be multiplied through by $ R_b$ and written as $ 0=G(p_{\Delta})+p_{\Delta}-p_{\Delta}^{+}$, or

$\displaystyle G(p_{\Delta}) = p_{\Delta}^{+}-p_{\Delta},\qquad p_{\Delta}^{+}\isdef p_m- 2p_b^{+}$ (10.39)

The solution is obtained by plotting $ G(x)$ and $ p_{\Delta}^{+}-x$ on the same graph, finding the point of intersection at $ (x,y)$ coordinates $ (p_{\Delta},G(p_{\Delta}))$, and computing finally the outgoing pressure wave sample as

$\displaystyle p_b^{-}= p_m- p_b^{+}- p_{\Delta}(p_{\Delta}^{+})$ (10.40)

An example of the qualitative appearance of $ G(x)$ overlaying $ p_{\Delta}^{+}-x$ is shown in Fig. 9.41.

Figure 9.41: Normalized reed impedance $ G(p_{\Delta }) = R_bu_m(p_{\Delta })$ overlaid with the ``bore load line'' $ p_{\Delta }^{+}-p_{\Delta }= R_bu_b$.
\includegraphics[width=\twidth]{eps/fReedRelations}

Scattering-Theoretic Formulation

Equation (9.38) can be solved for $ p_b^{-}$ to obtain

$\displaystyle p_b^{-}$ $\displaystyle =$ $\displaystyle \frac{1-r}{1+r}p_b^{+}+ \frac{r}{1+r}p_m$ (10.41)
  $\displaystyle =$ $\displaystyle \rho p_b^{+}+ \frac{1-\rho}{2} p_m$ (10.42)
  $\displaystyle =$ $\displaystyle \frac{p_m}{2} - \rho \frac{p_{\Delta}^{+}}{2}$ (10.43)

where
$\displaystyle \rho(p_{\Delta}) \isdef \frac{1-r(p_{\Delta})}{1+r(p_{\Delta})}, \qquad r(p_{\Delta})\isdef \frac{R_b}{R_m(p_{\Delta})}$     (10.44)

We interpret $ \rho(p_{\Delta})$ as a signal-dependent reflection coefficient.

Since the mouthpiece of a clarinet is nearly closed, $ R_m\gg R_b$ which implies $ r\approx 0$ and $ \rho\approx1$. In the limit as $ R_m$ goes to infinity relative to $ R_b$, (9.42) reduces to the simple form of a rigidly capped acoustic tube, i.e., $ p_b^{-}= p_b^{+}$. If it were possible to open the reed wide enough to achieve matched impedance, $ R_m=R_b$, then we would have $ r=1$ and $ \rho=0$, in which case $ p_b^{-}= p_m/2$, with no reflection of $ p_b^{+}$, as expected. If the mouthpiece is removed altogether to give $ R_m=0$ (regarding it now as a tube section of infinite radius), then $ r=\infty$, $ \rho=-1$, and $ p_b^{-}=
-p_b^{+}+ p_m$.


Computational Methods

Since finding the intersection of $ G(x)$ and $ p_{\Delta}^{+}-x$ requires an expensive iterative algorithm with variable convergence times, it is not well suited for real-time operation. In this section, fast algorithms based on precomputed nonlinearities are described.

Let $ h$ denote half-pressure $ p/2$, i.e., $ h_m\isdeftext p_m/2$ and $ h_{\Delta}^{+}\isdeftext p_{\Delta}^{+}/2$. Then (9.43) becomes

$\displaystyle p_b^{-}= h_m- \rho(p_{\Delta})\cdot h_{\Delta}^{+}$ (10.45)

Subtracting this equation from $ p_b^{+}$ gives
$\displaystyle p_b^{+}+ \rho h_{\Delta}^{+}- h_m$ $\displaystyle =$ $\displaystyle p_b^{+}- p_b^{-}= p_{\Delta}- p_{\Delta}^{+}$  
$\displaystyle \,\,\Rightarrow\,\,
\rho h_{\Delta}^{+}$ $\displaystyle =$ $\displaystyle \underbrace{h_m- p_b^{+}}_{h_{\Delta}^{+}} + p_{\Delta}- 2h_{\Delta}^{+}= p_{\Delta}-h_{\Delta}^{+}$  
$\displaystyle \,\,\Rightarrow\,\,
\rho$ $\displaystyle =$ $\displaystyle \frac{p_{\Delta}}{h_{\Delta}^{+}}-1$ (10.46)

The last expression above can be used to precompute $ \rho$ as a function of $ h_{\Delta}^{+}\isdef h_m- p_b^{+}= p_m/2 -p_b^{+}$. Denoting this newly defined function as
$\displaystyle \hat\rho (h_{\Delta}^{+}) = \rho(p_{\Delta}(h_{\Delta}^{+}))$     (10.47)

(9.45) becomes

$\displaystyle p_b^{-}= h_m- \hat\rho (h_{\Delta}^{+})\cdot h_{\Delta}^{+}$ (10.48)

This is the form chosen for implementation in Fig. 9.39 [431]. The control variable is mouth half-pressure $ h_m$, and $ h_{\Delta}^{+}=h_m-p_b^{+}$ is computed from the incoming bore pressure using only a single subtraction. The table is indexed by $ h_{\Delta}^{+}$, and the result of the lookup is then multiplied by $ h_{\Delta}^{+}$. Finally, the result of the multiplication is subtracted from $ h_m$. The cost of the reed simulation is only two subtractions, one multiplication, and one table lookup per sample.

Because the table contains a coefficient rather than a signal value, it can be more heavily quantized both in address space and word length than a direct lookup of a signal value such as $ p_{\Delta}(p_{\Delta}^{+})$ or the like. A direct signal lookup, though requiring much higher resolution, would eliminate the multiplication associated with the scattering coefficient. For example, if $ p_b^{+}$ and $ p_b^{-}$ are 16-bit signal samples, the table would contain on the order of 64K 16-bit $ p_{\Delta}^\ast $ samples. Clearly, some compression of this table would be desirable. Since $ p_{\Delta}^\ast (p_{\Delta}^{+}/2)$ is smoothly varying, significant compression is in fact possible. However, because the table is directly in the signal path, comparatively little compression can be done while maintaining full audio quality (such as 16-bit accuracy).

Figure 9.42: Simple, qualitatively chosen reed table for the digital waveguide clarinet.
\includegraphics[width=4in]{eps/fReedTable}

In the field of computer music, it is customary to use simple piecewise linear functions for functions other than signals at the audio sampling rate, e.g., for amplitude envelopes, FM-index functions, and so on [382,380]. Along these lines, good initial results were obtained [431] using the simplified qualitatively chosen reed table

$\displaystyle \hat\rho (h_{\Delta}^{+}) = \left\{ \begin{array}{ll} 1-m(h_{\Del...
...ent_mark>2515 1, & h_{\Delta}^c\leq h_{\Delta}^{+}\leq 1 \\ \end{array} \right.$ (10.49)

depicted in Fig. 9.42 for $ m=1/(h_{\Delta}^c+1)$. The corner point $ h_{\Delta}^c$ is the smallest pressure difference giving reed closure.10.19 Embouchure and reed stiffness correspond to the choice of offset $ h_{\Delta}^c$ and slope $ m$. Brighter tones are obtained by increasing the curvature of the function as the reed begins to open; for example, one can use $ \hat\rho ^k(h_{\Delta}^{+})$ for increasing $ k\geq1$.

Another variation is to replace the table-lookup contents by a piecewise polynomial approximation. While less general, good results have been obtained in practice [89,91,92]. For example, one of the SynthBuilder [353] clarinet patches employs this technique using a cubic polynomial.

An intermediate approach between table lookups and polynomial approximations is to use interpolated table lookups. Typically, linear interpolation is used, but higher order polynomial interpolation can also be considered (see Chapter 4).


Clarinet Synthesis Implementation Details

To finish off the clarinet example, the remaining details of the SynthBuilder clarinet patch Clarinet2.sb are described.

The input mouth pressure is summed with a small amount of white noise, corresponding to turbulence. For example, 0.1% is generally used as a minimum, and larger amounts are appropriate during the attack of a note. Ideally, the turbulence level should be computed automatically as a function of pressure drop $ p_{\Delta}$ and reed opening geometry [141,530]. It should also be lowpass filtered as predicted by theory.

Referring to Fig. 9.39, the reflection filter is a simple one-pole with transfer function

$\displaystyle H(z) = \frac{1+a_1(t)}{1+a_1(t) z^{-1}}$ (10.50)

where $ a_1(t) = v(t) - 0.642$, $ v(t) = A_v\sin(2\pi f_v t)$, $ A_v$ is vibrato amplitude (e.g., $ 0.03$), and $ f_v$ is vibrato frequency (e.g., $ 5$ Hz). Further loop filtering occurs as a result of using simple linear interpolation of the delay line. (There is only one delay line in the actual implementation since the lower delay line of Fig. 9.39 can be commuted with the reflection filter and combined with the upper delay line, ignoring the path to the output filter since a pure delay of less than a period in the final output sound is inconsequential.) There is no transmission filter or tone-hole modeling.

Legato note transitions are managed using two delay line taps and cross-fading from one to the other during a transition [208,441,405]. In general, legato problems arise when the bore length is changed suddenly while sounding, corresponding to a new fingering. The reason is that really the model itself should be changed during a fingering change from that of a statically terminated bore to that of a bore with a new scattering junction appearing where each ``finger'' is lifting, and with disappearing scattering junctions where tone holes are being covered. In addition, if a hole is covered abruptly (especially when there are large mechanical caps, as in the saxophone), there will also be new signal energy injected in both directions on the bore in superposition with the signal scattering. As a result of this ideal picture, is difficult to get high quality legato performance using only a single delay line.

A reduced-cost, approximate solution for obtaining good sounding note transitions in a single delay-line model was proposed in [208]. In this technique, the bore delay line is ``branched'' during the transition, i.e., a second feedback loop is formed at the new loop delay, thus forming two delay lines sharing the same memory, one corresponding to the old pitch and the other corresponding to the new pitch. A cross-fade from the old-pitch delay to the new-pitch delay sounds good if the cross-fade time and duration are carefully chosen. Another way to look at this algorithm is in terms of ``read pointers'' and ``write pointers.'' A normal delay line consists of a single write pointer followed by a single read pointer, delayed by one period. During a legato transition, we simply cross-fade from a read-pointer at the old-pitch delay to a read-pointer at the new-pitch delay. In this type of implementation, the write-pointer always traverses the full delay memory corresponding to the minimum supported pitch in order that read-pointers may be instantiated at any pitch-period delay at any time. Conceptually, this simplified model of note transitions can be derived from the more rigorous model by replacing the tone-hole scattering junction by a single reflection coefficient.

STK software implementing a model as in Fig.9.39 can be found in the file Clarinet.cpp.


Next Section:
Tonehole Modeling
Previous Section:
A View of Single-Reed Oscillation