/ proof-of-concept / bead-percussion
Sign in
proof-of-concept / bead-percussion
bead-percussion / matlab / examples / plate.m
43 lines · 1.9 KBBlameHistoryRaw
1% A flat, free-edged plate held at its center, struck near the rim: a flat
2% cymbal or gong. Units are SI.
3%
4% The plate's stiffness comes from bending triplets (three beads in a row
5% resist bending, sys.bends), not from tension: the springs carry no load
6% at rest and only resist stretching. Stretching is what makes the plate
7% nonlinear, once the motion is comparable to the plate's effective
8% thickness, about a*sqrt(kb/k) (here 4 mm). The center is clamped by
9% pinning the middle bead and its six neighbours; with a single pinned bead
10% the plate could tilt and spin freely.
12R = 0.2; % radius (m)
13a = 0.012; % bead spacing (m)
14sigma = 8.9; % mass per area (kg/m^2), about 1 mm of bronze
15kb = 7e5; % bending stiffness of each triplet (N/m); sets the pitch
16thick = 0.1; % kb/k: larger is "thicker", nonlinear only at larger motion
18[pos, tri, rim, trip] = bp_hexdisk(R, a);
19E = bp_edges(tri);
21sys.pos = pos;
22sys.mass = sigma * (sqrt(3)/2) * a^2;
23sys.pinned = bp_near(pos, [0 0 0], 1.05 * a); % the mount
24sys.springs = bp_springs(pos, E, kb / thick, 0); % no tension at rest
25sys.bends = [trip, kb * ones(size(trip, 1), 1)];
26sys = bp_decay(sys, [100 2.5; 5000 1.2]);
28% A stick on the edge: a sharp 0.3 ms push on the beads within 2 cm of the
29% rim point. The plate is mildly nonlinear at this force (14% from the
30% small-strike reference by 0.3 s); at 4x it differs by 14% within 10 ms
31% and 93% by 0.3 s. A longer, softer push mostly rocks the plate on its
32% mount.
33hit.t = 0;
34hit.beads = bp_near(pos, [0.18 0 0], 0.02);
35hit.force = [0 0 -150]; % peak force per bead (N)
36hit.duration = 3e-4;
37sys.hits = hit;
39sys.listen = struct('beads', bp_near(pos, [-0.1 0.06 0], 0), 'dir', [0 0 1]);
40sys.duration = 2.5;
42fprintf('%d beads, %d springs, %d bending triplets, %d struck\n', ...
43 size(pos, 1), size(E, 1), size(trip, 1), numel(hit.beads));
↑↓ move↵openescclose