Add reviseMatchedFilter to Common
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user