Add reviseMatchedFilter to Common

This commit is contained in:
kradchen
2023-05-17 15:52:18 +08:00
parent 0c408ba3be
commit cbdd94d511
2 changed files with 24 additions and 12 deletions

View File

@@ -56,34 +56,31 @@ Aurora::Matrix Recon::preprocessCE(Aurora::Matrix &aCE, double ceSampleFrequency
return aCE; return aCE;
} }
Aurora::Matrix Recon::createMatchedFilter(const Aurora::Matrix &aCE, Aurora::Matrix Recon::reviseMatchedFilter(const Aurora::Matrix &aMFTime,
bool measuredCEused, bool findDefects, bool aRemoveOutliersFromCEMeasured)
bool aRemoveOutliersFromCEMeasured, std::string aHardwareVersion)
{ {
Aurora::Matrix mFTime = Aurora::Matrix::copyFromRawData(aCE.getData(), 4000, 2304);
if (aRemoveOutliersFromCEMeasured) if (aRemoveOutliersFromCEMeasured)
{ {
auto normSTD = Aurora::std(Aurora::abs(mFTime)); auto normSTD = Aurora::std(Aurora::abs(aMFTime));
Aurora::nantoval(normSTD, 0.0); Aurora::nantoval(normSTD, 0.0);
auto sortSTD = Aurora::sort(normSTD); 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; t = t <= 0 ? 1.0 : t;
auto absFTime = abs(mFTime); auto absFTime = abs(aMFTime);
auto maxAbsFTime = max(absFTime); auto maxAbsFTime = max(absFTime);
auto maxFlag = maxAbsFTime < (0.1 * max(maxAbsFTime)); auto maxFlag = maxAbsFTime < (0.1 * max(maxAbsFTime));
auto lessFlag = normSTD < sortSTD(0, t).toMatrix(); auto lessFlag = normSTD < sortSTD(0, t).toMatrix();
long maxCol, maxRow; long maxCol, maxRow;
max(normSTD, Aurora::Column, maxRow, maxCol); 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])) if ((bool)(lessFlag.getData()[j]) || (bool)(maxFlag.getData()[j]))
{ {
mFTime(Aurora::$, j) = mFTime(Aurora::$, maxCol); aMFTime(Aurora::$, j) = aMFTime(Aurora::$, maxCol);
} }
} }
} }
auto matchedFilter = fft(aMFTime);
auto matchedFilter = fft(mFTime);
auto sumDiff = Aurora::zeros(1, matchedFilter.getDimSize(1)); auto sumDiff = Aurora::zeros(1, matchedFilter.getDimSize(1));
long minCol = 0, row; long minCol = 0, row;
{ {
@@ -108,7 +105,20 @@ Aurora::Matrix Recon::createMatchedFilter(const Aurora::Matrix &aCE,
matchedFilter(Aurora::$, l) = matchedFilter(Aurora::$, minCol); 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) if (measuredCEused)
{ {
auto mFTime2 = Aurora::real(Aurora::ifft(aHardwareVersion == "USCT3Dv3" ? -matchedFilter : matchedFilter)); auto mFTime2 = Aurora::real(Aurora::ifft(aHardwareVersion == "USCT3Dv3" ? -matchedFilter : matchedFilter));

View File

@@ -7,6 +7,8 @@ namespace Recon
Aurora::Matrix adaptFrequency(Aurora::Matrix &aCE,double ceSampleFrequency, double requiredFrequency); Aurora::Matrix adaptFrequency(Aurora::Matrix &aCE,double ceSampleFrequency, double requiredFrequency);
// Aurora::Matrix preprocessMeasuredCE(Aurora::Matrix &aCEMeasured,int aBandpassundersampling,int aNumberSamples); // Aurora::Matrix preprocessMeasuredCE(Aurora::Matrix &aCEMeasured,int aBandpassundersampling,int aNumberSamples);
Aurora::Matrix preprocessCE(Aurora::Matrix &aCE,double ceSampleFrequency, double requiredFrequency, double expectedLength); 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, Aurora::Matrix createMatchedFilter(const Aurora::Matrix &aCE,
bool measuredCEused, bool findDefects, bool removeOutliersFromCEMeasured, std::string hardwareVersion); bool measuredCEused, bool findDefects, bool removeOutliersFromCEMeasured, std::string hardwareVersion);
} }