View Raw SPL
/* generate pulse train from pulse edges */
gpulse(s)
{
local s1, s1, idx, p;
/* find pulse edges */
s1 = find(s != 0);
if (length(s1) > 0)
{
if (length(s1) > 1)
{
/* start and stop pulses */
s2 = decimate(s1, 2, 2);
s1 = decimate(s1, 2, 1);
}
else
{
/* one pulse, extend to end */
s2 = {length(s)};
}
/* generate pulse start and lengths */
idx = colextract(1..length(s), s1, s2 - s1 + 1);
p = zeros(length(s), 1);
/* set pulse */
p[idx] = 1;
}
else
{
/* no pulse edges */
p = zeros(length(s), 1);
}
/* deltax, xoffset and units */
p.deltax = s.deltax;
p.xoffset = s.xoffset;
p.hunits = s.hunits;
p.vunits = s.vunits;
return(p);
}