feat: Change estimate offset logic.
This commit is contained in:
@@ -56,6 +56,7 @@ MeasurementInfo Recon::loadMeasurementInfos(Parser* aParser)
|
|||||||
result.rootMeasUniqueID = metaData.getMeasurementID();
|
result.rootMeasUniqueID = metaData.getMeasurementID();
|
||||||
result.dacDelay = metaData.getDacDelay();
|
result.dacDelay = metaData.getDacDelay();
|
||||||
result.filterByPass = metaData.getFilterByPass();
|
result.filterByPass = metaData.getFilterByPass();
|
||||||
|
result.ceMeasuredDacDelay = metaData.getCEMeasuredDacDelay();
|
||||||
if(result.Bandpassundersampling)
|
if(result.Bandpassundersampling)
|
||||||
{
|
{
|
||||||
result.expectedAScanLength = reflectParams::aScanReconstructionFrequency / result.sampleRate * result.expectedAScanLength;
|
result.expectedAScanLength = reflectParams::aScanReconstructionFrequency / result.sampleRate * result.expectedAScanLength;
|
||||||
@@ -238,6 +239,6 @@ CEInfo Recon::getCEInfo(Parser* aParser, const MeasurementInfo aInfo)
|
|||||||
}
|
}
|
||||||
result.offsetFilterEnabled = reconParams::offsetFilterEnabled;
|
result.offsetFilterEnabled = reconParams::offsetFilterEnabled;
|
||||||
result.offsetFilterDisabled = reconParams::offsetFilterDisabled;
|
result.offsetFilterDisabled = reconParams::offsetFilterDisabled;
|
||||||
|
result.offsetTransducer = reconParams::offsetTransducer;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ namespace Recon
|
|||||||
unsigned int expectedAScanLength;
|
unsigned int expectedAScanLength;
|
||||||
std::string rootMeasUniqueID;
|
std::string rootMeasUniqueID;
|
||||||
float dacDelay;
|
float dacDelay;
|
||||||
|
float ceMeasuredDacDelay;
|
||||||
float filterByPass;
|
float filterByPass;
|
||||||
Aurora::Matrix matchedFilter;
|
Aurora::Matrix matchedFilter;
|
||||||
};
|
};
|
||||||
@@ -40,6 +41,7 @@ namespace Recon
|
|||||||
bool ceAvailable;
|
bool ceAvailable;
|
||||||
float offsetFilterEnabled;
|
float offsetFilterEnabled;
|
||||||
float offsetFilterDisabled;
|
float offsetFilterDisabled;
|
||||||
|
float offsetTransducer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TempInfo
|
struct TempInfo
|
||||||
|
|||||||
@@ -74,6 +74,10 @@ namespace Recon
|
|||||||
{
|
{
|
||||||
reconParams::offsetFilterDisabled = ce.at("offsetFilterDisabled").get<float>();
|
reconParams::offsetFilterDisabled = ce.at("offsetFilterDisabled").get<float>();
|
||||||
}
|
}
|
||||||
|
if(ce.contains("offsetTransducer"))
|
||||||
|
{
|
||||||
|
reconParams::offsetTransducer = ce.at("offsetTransducer").get<float>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(measurementInfo.contains("temp"))
|
if(measurementInfo.contains("temp"))
|
||||||
@@ -630,6 +634,7 @@ namespace Recon
|
|||||||
reconParams::removeOutliersFromCEMeasured = true;
|
reconParams::removeOutliersFromCEMeasured = true;
|
||||||
reconParams::offsetFilterEnabled = 6.9e-6;
|
reconParams::offsetFilterEnabled = 6.9e-6;
|
||||||
reconParams::offsetFilterDisabled = 1.2e-6;
|
reconParams::offsetFilterDisabled = 1.2e-6;
|
||||||
|
reconParams::offsetTransducer = 1.0e-6;
|
||||||
//reconParams.measurementInfo.temp
|
//reconParams.measurementInfo.temp
|
||||||
reconParams::useTASTempComp = true;
|
reconParams::useTASTempComp = true;
|
||||||
reconParams::correctTASTemp = 1;
|
reconParams::correctTASTemp = 1;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace Recon
|
|||||||
EXTERN_C bool removeOutliersFromCEMeasured;
|
EXTERN_C bool removeOutliersFromCEMeasured;
|
||||||
EXTERN_C float offsetFilterEnabled;
|
EXTERN_C float offsetFilterEnabled;
|
||||||
EXTERN_C float offsetFilterDisabled;
|
EXTERN_C float offsetFilterDisabled;
|
||||||
|
EXTERN_C float offsetTransducer;
|
||||||
//reconParams.measurementInfo.temp
|
//reconParams.measurementInfo.temp
|
||||||
EXTERN_C bool useTASTempComp;
|
EXTERN_C bool useTASTempComp;
|
||||||
EXTERN_C bool correctTASTemp;
|
EXTERN_C bool correctTASTemp;
|
||||||
|
|||||||
@@ -12,84 +12,33 @@
|
|||||||
using namespace Recon;
|
using namespace Recon;
|
||||||
using namespace Aurora;
|
using namespace Aurora;
|
||||||
|
|
||||||
float Recon::estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe, const Aurora::Matrix& aMatchedFilter)
|
float Recon::estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe)
|
||||||
{
|
{
|
||||||
float offset = 0;
|
float dacDelay = aExpInfo.dacDelay / reflectParams::aScanReconstructionFrequency;
|
||||||
Matrix ce = aCe.ceRef;
|
float ceMeasuredDacDelay = aExpInfo.ceMeasuredDacDelay / reflectParams::aScanReconstructionFrequency;
|
||||||
float ceOffSet = aCe.ceRefOffSet;
|
float transducerDelay = aCe.offsetTransducer;
|
||||||
Matrix ceMeasured;
|
float configDelay = reflectParams::offsetElectronic;
|
||||||
if(aCe.measuredCEAvailable)
|
float offset;
|
||||||
|
if(aCe.measuredCEUsed && aCe.measuredCEAvailable)
|
||||||
{
|
{
|
||||||
if(aCe.measuredCEUsed)
|
offset = dacDelay - ceMeasuredDacDelay + transducerDelay + configDelay;
|
||||||
{
|
|
||||||
ceMeasured = real(ifft(aMatchedFilter));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ceMeasured = real(ifft(reviseMatchedFilter(aCe.ce, true)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
offset = offset + reflectParams::offsetElectronic;
|
|
||||||
if(!aCe.measuredCEUsed)
|
|
||||||
{
|
{
|
||||||
if(aCe.measuredCEAvailable && aCe.ceAvailable)
|
float electronicDelay = 0;
|
||||||
|
switch ((int)aExpInfo.filterByPass)
|
||||||
{
|
{
|
||||||
size_t column = ceMeasured.getDimSize(1);
|
case 0:
|
||||||
size_t ceRows = ce.getDimSize(0);
|
electronicDelay = aCe.offsetFilterEnabled;
|
||||||
float* offsetCEMeasuredData = Aurora::malloc(column);
|
break;
|
||||||
for(int i=0; i<column; ++i)
|
case 1:
|
||||||
{
|
electronicDelay = aCe.offsetFilterDisabled;
|
||||||
Matrix corrCE = xcorr(ceMeasured($,i).toMatrix(), ce);
|
break;
|
||||||
long row,column;
|
default:
|
||||||
max(corrCE, FunctionDirection::All,row,column);
|
break;
|
||||||
offsetCEMeasuredData[i] = row + 1;
|
|
||||||
offsetCEMeasuredData[i] = offsetCEMeasuredData[i] - ceRows;
|
|
||||||
}
|
|
||||||
Matrix offsetCEMeasured = Matrix::New(offsetCEMeasuredData, column);
|
|
||||||
offset = offset + median(offsetCEMeasured)[0] / reflectParams::aScanReconstructionFrequency;
|
|
||||||
// 2代
|
|
||||||
// if strcmpi(info.Hardware,'USCT3Dv2')
|
|
||||||
// offset = offset - CEOffset;
|
|
||||||
// CEOffset = 0;
|
|
||||||
// end
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float dacDelay = aExpInfo.dacDelay;
|
|
||||||
float filterDisabled = aExpInfo.filterByPass;
|
|
||||||
float dacDelayInS = dacDelay / 10000000;
|
|
||||||
if(filterDisabled == 1)
|
|
||||||
{
|
|
||||||
offset += aCe.offsetFilterDisabled + dacDelayInS;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
offset += aCe.offsetFilterEnabled + dacDelayInS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
offset = dacDelay + electronicDelay + transducerDelay + configDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
//只对三代处理,Digitalfilterdelay为0;
|
|
||||||
// if (strcmp(info.Hardware,'USCT3Dv2')==1 && info.Bandpassundersampling==1) %%%3.3MHz Filter 208 Tabs
|
|
||||||
// Digitalfilterdelay=-(0.8e-6);
|
|
||||||
// %seconds
|
|
||||||
// elseif(strcmp(info.Hardware,'USCT3Dv2')==1) %%%%10 MHz 32 Tabs
|
|
||||||
// Digitalfilterdelay=-(4.67e-6 + 0.8e-6);
|
|
||||||
// %seconds
|
|
||||||
// elseif(strcmp(info.Hardware,'USCT3Dv3')==1)
|
|
||||||
float digitalfilterdelay = 0;
|
|
||||||
// else
|
|
||||||
// Digitalfilterdelay = 0;
|
|
||||||
// end
|
|
||||||
|
|
||||||
if (!aCe.measuredCEUsed)
|
|
||||||
{
|
|
||||||
offset += digitalfilterdelay;
|
|
||||||
offset += ceOffSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
offset -= aExpInfo.EOffset;
|
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,10 @@
|
|||||||
|
|
||||||
#include "common/getMeasurementMetaData.h"
|
#include "common/getMeasurementMetaData.h"
|
||||||
|
|
||||||
|
class Parser;
|
||||||
namespace Recon
|
namespace Recon
|
||||||
{
|
{
|
||||||
float estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe, const Aurora::Matrix& aMatchedFilter);
|
float estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -173,7 +173,7 @@ int Recon::startReconstructions( const std::string& aDataPath, const std::string
|
|||||||
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
||||||
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
||||||
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
||||||
preComputes.offset = estimateOffset(expInfo, ce, preComputes.matchedFilter);
|
preComputes.offset = estimateOffset(expInfo, ce);
|
||||||
|
|
||||||
expInfo.matchedFilter = preComputes.matchedFilter;
|
expInfo.matchedFilter = preComputes.matchedFilter;
|
||||||
expInfoRef.matchedFilter = preComputes.matchedFilterRef;
|
expInfoRef.matchedFilter = preComputes.matchedFilterRef;
|
||||||
@@ -240,7 +240,7 @@ int Recon::startReconstructions( const std::string& aDataPath, const std::string
|
|||||||
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
||||||
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
||||||
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
||||||
preComputes.offset = estimateOffset(expInfo, ce, preComputes.matchedFilter);
|
preComputes.offset = estimateOffset(expInfo, ce);
|
||||||
|
|
||||||
reflectParams::gpuSelectionList = reconParams::gpuSelectionList;
|
reflectParams::gpuSelectionList = reconParams::gpuSelectionList;
|
||||||
RECON_INFO("Start reflectionRecostruction.");
|
RECON_INFO("Start reflectionRecostruction.");
|
||||||
|
|||||||
Reference in New Issue
Block a user