t: Time values at which func is evaluated, specified as a vector.
d: Offset removed from the values of the array t, specified as a real vector, matrix, or array. You can apply an optional gain factor to each delayed evaluation by specifying d as a two-column matrix, with offset defined in column 1 and associated gain in column 2. If you specify d as a vector, the values are interpreted as delays only.
func: Continuous function used to generate a pulse train based on its samples, specified as 'rectpuls', 'gauspuls', 'tripuls', or a function handle. If you use func as a function handle, you can pass the function parameters as follows:
y <- pulstran(t, d, 'gauspuls', 10e3, bw = 0.5).
This creates a pulse train using a 10 kHz Gaussian pulse with 50% bandwidth. Alternatively, func can be a prototype function, specified as a vector. The interval of the function 0 to (length(p) - 1) / fs, and its samples are identically zero outside this interval. By default, linear interpolation is used for generating delays.
fs: Sample rate in Hz, specified as a real scalar.
method: Interpolation method, specified as one of the following options:
"linear" (default): Linear interpolation. The interpolated value at a query point is based on linear interpolation of the values at neighboring grid points in each respective dimension. This is the default interpolation method.
"nearest": Nearest neighbor interpolation. The interpolated value at a query point is the value at the nearest sample grid point.
"cubic": Shape-preserving piecewise cubic interpolation. The interpolated value at a query point is based on a shape-preserving piecewise cubic interpolation of the values at neighboring grid points.
"spline": Spline interpolation using not-a-knot end conditions. The interpolated value at a query point is based on a cubic interpolation of the values at neighboring grid points in each respective dimension.
Interpolation is performed by the function 'interp1' function in the library 'pracma', and any interpolation method accepted by the function 'interp1' can be specified here.
...: Further arguments passed to func.
Returns
Pulse train generated by the function, returned as a vector.
Details
Generate the signal y <- sum(func(t + d, ...)) for each d. If d is a matrix of two columns, the first column is the delay d
and the second column is the amplitude a, and y <- sum(a * func(t + d)) for each d, a. Clearly, func must be a function which accepts a vector of times. Any extra arguments needed for the function must be tagged on the end.
If instead of a function name you supply a pulse shape sampled at frequency fs (default 1 Hz), an interpolated version of the pulse is added at each delay d. The interpolation stays within the the time range of the delayed pulse. The interpolation method defaults to linear, but it can be any interpolation method accepted by the function interp1
Examples
## periodic rectangular pulset <- seq(0,60,1/1e3)d <- cbind(seq(0,60,2), sin(2* pi *0.05* seq(0,60,2)))y <- pulstran(t, d,'rectpuls')plot(t, y, type ="l", xlab ="Time (s)", ylab ="Waveform", main ="Periodic rectangular pulse")## assymetric sawtooth waveformfs <-1e3t <- seq(0,1,1/fs)d <- seq(0,1,1/3)x <- tripuls(t,0.2,-1)y <- pulstran(t, d, x, fs)plot(t, y, type ="l", xlab ="Time (s)", ylab ="Waveform", main ="Asymmetric sawtooth waveform")## Periodic Gaussian waveformfs <-1e7tc <-0.00025t <- seq(-tc, tc,1/fs)x <- gauspuls(t,10e3,0.5)plot(t, x, type="l", xlab ="Time (s)", ylab ="Waveform", main ="Gaussian pulse")ts <- seq(0,0.025,1/50e3)d <- cbind(seq(0,0.025,1/1e3), sin(2* pi *0.1*(0:25)))y <- pulstran(ts, d, x, fs)plot(ts, y, type ="l", xlab ="Time (s)", ylab ="Waveform", main ="Gaussian pulse train")# Custom pulse trainsfnx <-function(x, fn) sin(2* pi * fn * x)* exp(-fn * abs(x))ffs <-1000tp <- seq(0,1,1/ffs)pp <- fnx(tp,30)plot(tp, pp, type ="l",xlab ='Time (s)', ylab ='Waveform', main ="Custom pulse")fs <-2e3t <- seq(0,1.2,1/fs)d <- seq(0,1,1/3)dd <- cbind(d,4^-d)z <- pulstran(t, dd, pp, ffs)plot(t, z, type ="l", xlab ="Time (s)", ylab ="Waveform", main ="Custom pulse train")