#include "common.h" #include #include "Function.h" #include "Function1D.h" #include "Function2D.h" #include "Function3D.h" #include "Matrix.h" namespace Recon { Aurora::Matrix reconstructBandpasssubsampling(Aurora::Matrix aMatrix, double aAScanReconstructionFreq, double aSampleRate) { double downsamplingfactor = aAScanReconstructionFreq / aSampleRate; double minimalExpectedAScanLength = 48; int expectedAScanlengthDS = (int)std::ceil(minimalExpectedAScanLength/downsamplingfactor); double expectedAScanLength = std::max(expectedAScanlengthDS*downsamplingfactor, aMatrix.getDimSize(0)*downsamplingfactor); expectedAScanlengthDS = std::ceil(expectedAScanLength/downsamplingfactor); double s1 = aAScanReconstructionFreq; double f1Stride = s1 / (expectedAScanLength - 1); double * f1Data = Aurora::malloc(expectedAScanLength); auto f1 = Aurora::Matrix::New(f1Data,expectedAScanLength,1,1); for (int i = 0; i (aSampleRate/2)) *(f1 <= aSampleRate); auto idx_r = (f1 > (aAScanReconstructionFreq-aSampleRate)) * (f1 <= (aAScanReconstructionFreq-aSampleRate/2)); if (Aurora::sum(idx_l).getScalar() == 0.0 || Aurora::sum(idx_r).getScalar() == 0.0){ std::cerr<<"downsampled data, you have to set AScanReconstructionFreq higher"<length) needs to be fixed by padding"<