96aec9cTriangle strike simulator: MATLAB model and interactive web appJeremy Magland 1function [y, basis, dinfo] = triangle_render(P)
2% TRIANGLE_RENDER Full render: basis + strikes -> radiate -> output.
3% Convenience composition of the stage functions; the web app calls the
4% stages separately so it can cache intermediates (the eigensolve above all).
6basis = triangle_basis(P);
7fsHi = P.sample_rate * P.oversample;
8[tstr, vstr, jstr, taustr, fstr, sstr, sinfo] = triangle_strikes(P);
9[p, radinfo] = triangle_radiate(P, basis, tstr, vstr, jstr, taustr, fstr, sstr, fsHi);
10[y, peakPa] = triangle_output(P, p, P.oversample);
12dinfo.strikeCount = sinfo.count;
13dinfo.meanV = sinfo.meanV;
14dinfo.maxV = sinfo.maxV;
15dinfo.meanTauUs = sinfo.meanTauUs;
16dinfo.peakForceN = sinfo.peakForceN;
17dinfo.durationS = sinfo.durationS;
18dinfo.modesIn = sum(basis.family == 0);
19dinfo.modesOut = sum(basis.family == 1);
20dinfo.f1 = basis.f(1);
21dinfo.peakPa = peakPa;
22dinfo.peakSplDb = 20 * log10(peakPa / 20e-6 + 1e-30);
23dinfo.directPeakPa = radinfo.directPeakPa;
24dinfo.listenerInside = radinfo.listenerInside;
25dinfo.listenerDistM = radinfo.listenerDistM;
26dinfo.sinfo = sinfo;
27end