diff --git a/src/common/ceMatchedFilterHandling.cpp b/src/common/ceMatchedFilterHandling.cpp index cb3e36f..b479f63 100644 --- a/src/common/ceMatchedFilterHandling.cpp +++ b/src/common/ceMatchedFilterHandling.cpp @@ -56,34 +56,31 @@ Aurora::Matrix Recon::preprocessCE(Aurora::Matrix &aCE, double ceSampleFrequency return aCE; } -Aurora::Matrix Recon::createMatchedFilter(const Aurora::Matrix &aCE, - bool measuredCEused, bool findDefects, - bool aRemoveOutliersFromCEMeasured, std::string aHardwareVersion) +Aurora::Matrix Recon::reviseMatchedFilter(const Aurora::Matrix &aMFTime, + bool aRemoveOutliersFromCEMeasured) { - Aurora::Matrix mFTime = Aurora::Matrix::copyFromRawData(aCE.getData(), 4000, 2304); if (aRemoveOutliersFromCEMeasured) { - auto normSTD = Aurora::std(Aurora::abs(mFTime)); + auto normSTD = Aurora::std(Aurora::abs(aMFTime)); Aurora::nantoval(normSTD, 0.0); auto sortSTD = Aurora::sort(normSTD); - int t = (int)std::round(0.4 * mFTime.getDimSize(1)) - 1; + int t = (int)std::round(0.4 * aMFTime.getDimSize(1)) - 1; t = t <= 0 ? 1.0 : t; - auto absFTime = abs(mFTime); + auto absFTime = abs(aMFTime); auto maxAbsFTime = max(absFTime); auto maxFlag = maxAbsFTime < (0.1 * max(maxAbsFTime)); auto lessFlag = normSTD < sortSTD(0, t).toMatrix(); long maxCol, maxRow; max(normSTD, Aurora::Column, maxRow, maxCol); - for (int j = 0; j < mFTime.getDimSize(1); ++j) + for (int j = 0; j < aMFTime.getDimSize(1); ++j) { if ((bool)(lessFlag.getData()[j]) || (bool)(maxFlag.getData()[j])) { - mFTime(Aurora::$, j) = mFTime(Aurora::$, maxCol); + aMFTime(Aurora::$, j) = aMFTime(Aurora::$, maxCol); } } } - - auto matchedFilter = fft(mFTime); + auto matchedFilter = fft(aMFTime); auto sumDiff = Aurora::zeros(1, matchedFilter.getDimSize(1)); long minCol = 0, row; { @@ -108,7 +105,20 @@ Aurora::Matrix Recon::createMatchedFilter(const Aurora::Matrix &aCE, matchedFilter(Aurora::$, l) = matchedFilter(Aurora::$, minCol); } } - + return matchedFilter; +} +Aurora::Matrix Recon::createMatchedFilter(const Aurora::Matrix &aCE, + bool measuredCEused, bool findDefects, + bool aRemoveOutliersFromCEMeasured, std::string aHardwareVersion) +{ + Aurora::Matrix mFTime = Aurora::Matrix::copyFromRawData(aCE.getData(), 4000, 2304); + Aurora::Matrix matchedFilter; + if (measuredCEused && findDefects){ + matchedFilter = reviseMatchedFilter(mFTime, aRemoveOutliersFromCEMeasured); + } + else{ + matchedFilter = Aurora::fft(mFTime); + } if (measuredCEused) { auto mFTime2 = Aurora::real(Aurora::ifft(aHardwareVersion == "USCT3Dv3" ? -matchedFilter : matchedFilter)); diff --git a/src/common/ceMatchedFilterHandling.h b/src/common/ceMatchedFilterHandling.h index 95c8ee9..2c316c1 100644 --- a/src/common/ceMatchedFilterHandling.h +++ b/src/common/ceMatchedFilterHandling.h @@ -7,6 +7,8 @@ namespace Recon Aurora::Matrix adaptFrequency(Aurora::Matrix &aCE,double ceSampleFrequency, double requiredFrequency); // Aurora::Matrix preprocessMeasuredCE(Aurora::Matrix &aCEMeasured,int aBandpassundersampling,int aNumberSamples); Aurora::Matrix preprocessCE(Aurora::Matrix &aCE,double ceSampleFrequency, double requiredFrequency, double expectedLength); + Aurora::Matrix reviseMatchedFilter(const Aurora::Matrix &aMFTime, + bool aRemoveOutliersFromCEMeasured); Aurora::Matrix createMatchedFilter(const Aurora::Matrix &aCE, bool measuredCEused, bool findDefects, bool removeOutliersFromCEMeasured, std::string hardwareVersion); }