Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // use standard linear interpolation
- function compressArrayData2(data as Array<Numeric>, dataSize as Number, newSize as Number) as Array<Numeric> {
- //if (newSize >= data.size()) {
- if (newSize >= dataSize) {
- return data;
- }
- // bucketSize > 1. e.g. if data.size() is 480 and newSize is 240, bucket size is 2
- //var bucketSize = data.size() * 1.0 / newSize;
- var bucketSize = dataSize * 1.0 / newSize;
- var outputArray = new Array<Numeric>[newSize];
- var positionInInput = 0.0;
- // linear interpolation
- for (var i = 0; i < newSize; i++) {
- if (positionInInput == positionInInput.toNumber()) {
- // use exact data point
- outputArray[i] = data[positionInInput.toNumber()];
- } else {
- // interpolate
- var x = positionInInput;
- var x0 = positionInInput.toNumber();
- var x1 = Math.round(positionInInput + 0.5).toNumber();
- var y0 = data[x0];
- var y1 = data[x1];
- outputArray[i] = y0 * ((x1 - x).toFloat() / (x1 - x0)) + y1 * ((x - x0).toFloat() / (x1 - x0));
- }
- positionInInput += bucketSize;
- }
- return outputArray;
- }
Advertisement
Add Comment
Please, Sign In to add comment