| .. | ||
| challenge.json | ||
| README.md |
string-pluck-v1: plucked damped string, pickup velocity#
This is the hello-world challenge of the collection. The model is a linear damped string with fixed ends, released from rest from its static equilibrium under a finger load of finite width. The deliverable is a two second mono wav file containing the transverse velocity of the string at a fixed pickup point. Every quantity below is defined in the continuum, so the true solution is a specific function of time that does not depend on any discretization. A modal series solution is given in the appendix; it converges to the true solution and can be evaluated to machine precision, so this challenge is mainly a test of the submission and scoring pipeline.
The machine-readable version of this specification is challenge.json.
Model#
Let denote the transverse displacement in meters of the string at position and time . The string satisfies
with fixed ends
and initial conditions
Here is the wave speed, is a frequency-independent loss rate, and is a Kelvin-Voigt viscosity that damps high frequencies faster than low ones.
The initial shape is the static equilibrium of the string under a transverse load of finite width centered at the pluck point , which is how a finger or plectrum deforms the string before release. The load profile is a raised cosine of half-width ,
and solves the static problem on with . Here is the total load expressed as a slope (force divided by tension), and it is fixed by requiring the pluck height . In closed form,
where is the Heaviside step ( for , else ). is the triangle produced by a point load, and is the correction from spreading the load over the contact region; it vanishes outside . Note that is three times continuously differentiable, since is continuously differentiable, and that so the fixed-end conditions hold.
Parameters#
| Symbol | Value | Unit | Meaning |
|---|---|---|---|
| 0.65 | m | string length | |
| 143 | m/s | wave speed (fundamental Hz) | |
| 3 | 1/s | frequency-independent loss rate | |
| 0.004 | m^2/s | Kelvin-Voigt viscosity | |
| 0.002 | m | pluck height | |
| 0.1625 | m | pluck center () | |
| 0.006 | m | half-width of the finger load | |
| 0.54 | m | pickup position |
All values are exact decimal numbers, not rounded measurements.
Output signal#
The audio signal is the transverse velocity of the string at the pickup point,
The deliverable is a wav file with the following properties.
| Property | Value |
|---|---|
| channels | 1 |
| sample rate | 48000 Hz |
| number of samples | 96000 (2.0 s) |
| sample format | 32-bit IEEE float (WAVE_FORMAT_IEEE_FLOAT) |
| sample , for | |
see output.signal_scale in challenge.json (m/s) |
The first sample is at , where . Samples are pointwise values of the continuum signal. No anti-aliasing filter is applied, even though contains frequency content above the Nyquist frequency; that content is heavily damped by the Kelvin-Voigt term and is part of the exact answer. The scale is a fixed constant chosen so that the peak sample magnitude is roughly 0.5. Do not normalize the signal; absolute amplitude is compared.
Error measures#
Let and , , be the samples of a submitted solution and of the reference solution. Two error measures are computed. Both are relative and dimensionless, and both are reported for every solution.
Waveform error (primary):
Spectrogram error. Let be the frame length and the hop. The periodic Hann window is for . Frame of a signal is , for , with no zero padding at either end. Let , , be its discrete Fourier transform, . Then
The spectrogram error ignores phase within a frame and is less sensitive than the waveform error to small frequency errors that accumulate into phase drift over the two seconds.
Reference solution#
There is no externally supplied ground truth. The reference is chosen automatically from the submitted solutions by the procedure described in the collection README, unless reference_solution in challenge.json names one explicitly. For this particular challenge the modal series in the appendix gives an essentially exact answer, which is expected to be selected.
Optional field export#
A submission may additionally provide the displacement field for visualization. This is not scored. The file is HDF5 with three datasets: x, float64, shape (201,), the positions in meters; t, float64, shape (4001,), the times in seconds; and u, float32, shape (4001, 201), with u[j, i] in meters. Root attributes challenge_id, solution_id, quantity ("transverse displacement") and units ("m") are recommended. The grid is stated under fields in challenge.json. A file of this size is about 3 MB uncompressed and can live in the solution repository; gzip compression inside the file is welcome.
Appendix: modal series solution#
This appendix is provided for convenience and verification; it is not part of the challenge definition, and a submission may use any method.
Expanding with , each coefficient satisfies
with and . Integrating by parts twice, using and the fixed ends,
With the parameters above, for every integer , since is not an integer. For every mode that matters (the modes are underdamped up to roughly ), and in that case, with ,
The pickup velocity is then
Since and carries an extra factor of , the terms decay like before damping is taken into account, and for the exponential factor makes the series converge rapidly. In practice a few hundred modes give the signal to single precision for all ; at the exact value is .