UNPKG

frequencyjs

Version:
56 lines (50 loc) 1.54 kB
/** * (Advanced) Signal processing */ var cauchy = require("./convolution/cauchy.js"); var specConvolution = require("./convolution/spectrum.js"); var _ = require("lodash"); var Signal = require("./signal.js"); var defaultOptions = { method: "cauchy", type: "non-circular", spectrum: { method: "dft" // sampling is not relevant as it gets transformed back again with the same // sampling rate } } module.exports = { /** the convolution function assumes two discrete signals * that have the same spacing */ convolve: function(signal1, signal2, options){ options = options || {}; options = _.defaults(options, defaultOptions); // ensure signal2 is not longer than signal2 if(signal1.length < signal2.length){ var tmp = signal1; signal1 = signal2; signal2 = tmp; } if(options.method == "cauchy"){ return cauchy(signal1,signal2,options); } else { return specConvolution(signal1, signal2,options); } }, /** determines if two signals can be considered equal. */ equal: function(signal1, signal2, options){ options = options || {}; options.epsilon = options.epsilon || 1E-08; var sig1 = Signal(signal1); var sig2 = Signal(signal2); if(signal1.length != signal2.length) return false; var diffSQ = _.reduce(_.range(signal1.length), function(d,idx){ var diff = (sig1[idx].value-sig2[idx].value); return d + diff * diff; },0); return diffSQ/signal1.length < options.epsilon; } }