Guest User

compress-linear-interpolation-ciq

a guest
Aug 6th, 2025
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // use standard linear interpolation
  2. function compressArrayData2(data as Array<Numeric>, dataSize as Number, newSize as Number)  as Array<Numeric> {
  3.     //if (newSize >= data.size()) {
  4.     if (newSize >= dataSize) {
  5.         return data;
  6.     }
  7.  
  8.     // bucketSize > 1. e.g. if data.size() is 480 and newSize is 240, bucket size is 2
  9.     //var bucketSize = data.size() * 1.0 / newSize;
  10.     var bucketSize = dataSize * 1.0 / newSize;
  11.     var outputArray = new Array<Numeric>[newSize];
  12.  
  13.     var positionInInput = 0.0;
  14.     // linear interpolation
  15.     for (var i = 0; i < newSize; i++) {
  16.         if (positionInInput == positionInInput.toNumber()) {
  17.             // use exact data point
  18.             outputArray[i] = data[positionInInput.toNumber()];
  19.         }  else {
  20.             // interpolate
  21.             var x = positionInInput;
  22.             var x0 = positionInInput.toNumber();
  23.             var x1 = Math.round(positionInInput + 0.5).toNumber();
  24.             var y0 = data[x0];
  25.             var y1 = data[x1];
  26.  
  27.             outputArray[i] = y0 * ((x1 - x).toFloat() / (x1 - x0)) + y1 * ((x - x0).toFloat() / (x1 - x0));
  28.         }
  29.         positionInInput += bucketSize;
  30.     }
  31.     return outputArray;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment