feat: Change estimate offset logic.
This commit is contained in:
@@ -56,6 +56,7 @@ MeasurementInfo Recon::loadMeasurementInfos(Parser* aParser)
|
||||
result.rootMeasUniqueID = metaData.getMeasurementID();
|
||||
result.dacDelay = metaData.getDacDelay();
|
||||
result.filterByPass = metaData.getFilterByPass();
|
||||
result.ceMeasuredDacDelay = metaData.getCEMeasuredDacDelay();
|
||||
if(result.Bandpassundersampling)
|
||||
{
|
||||
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.offsetFilterDisabled = reconParams::offsetFilterDisabled;
|
||||
|
||||
result.offsetTransducer = reconParams::offsetTransducer;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace Recon
|
||||
unsigned int expectedAScanLength;
|
||||
std::string rootMeasUniqueID;
|
||||
float dacDelay;
|
||||
float ceMeasuredDacDelay;
|
||||
float filterByPass;
|
||||
Aurora::Matrix matchedFilter;
|
||||
};
|
||||
@@ -40,6 +41,7 @@ namespace Recon
|
||||
bool ceAvailable;
|
||||
float offsetFilterEnabled;
|
||||
float offsetFilterDisabled;
|
||||
float offsetTransducer;
|
||||
};
|
||||
|
||||
struct TempInfo
|
||||
|
||||
@@ -74,6 +74,10 @@ namespace Recon
|
||||
{
|
||||
reconParams::offsetFilterDisabled = ce.at("offsetFilterDisabled").get<float>();
|
||||
}
|
||||
if(ce.contains("offsetTransducer"))
|
||||
{
|
||||
reconParams::offsetTransducer = ce.at("offsetTransducer").get<float>();
|
||||
}
|
||||
}
|
||||
|
||||
if(measurementInfo.contains("temp"))
|
||||
@@ -630,6 +634,7 @@ namespace Recon
|
||||
reconParams::removeOutliersFromCEMeasured = true;
|
||||
reconParams::offsetFilterEnabled = 6.9e-6;
|
||||
reconParams::offsetFilterDisabled = 1.2e-6;
|
||||
reconParams::offsetTransducer = 1.0e-6;
|
||||
//reconParams.measurementInfo.temp
|
||||
reconParams::useTASTempComp = true;
|
||||
reconParams::correctTASTemp = 1;
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace Recon
|
||||
EXTERN_C bool removeOutliersFromCEMeasured;
|
||||
EXTERN_C float offsetFilterEnabled;
|
||||
EXTERN_C float offsetFilterDisabled;
|
||||
EXTERN_C float offsetTransducer;
|
||||
//reconParams.measurementInfo.temp
|
||||
EXTERN_C bool useTASTempComp;
|
||||
EXTERN_C bool correctTASTemp;
|
||||
|
||||
@@ -12,84 +12,33 @@
|
||||
using namespace Recon;
|
||||
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;
|
||||
Matrix ce = aCe.ceRef;
|
||||
float ceOffSet = aCe.ceRefOffSet;
|
||||
Matrix ceMeasured;
|
||||
if(aCe.measuredCEAvailable)
|
||||
float dacDelay = aExpInfo.dacDelay / reflectParams::aScanReconstructionFrequency;
|
||||
float ceMeasuredDacDelay = aExpInfo.ceMeasuredDacDelay / reflectParams::aScanReconstructionFrequency;
|
||||
float transducerDelay = aCe.offsetTransducer;
|
||||
float configDelay = reflectParams::offsetElectronic;
|
||||
float offset;
|
||||
if(aCe.measuredCEUsed && aCe.measuredCEAvailable)
|
||||
{
|
||||
if(aCe.measuredCEUsed)
|
||||
{
|
||||
ceMeasured = real(ifft(aMatchedFilter));
|
||||
}
|
||||
else
|
||||
{
|
||||
ceMeasured = real(ifft(reviseMatchedFilter(aCe.ce, true)));
|
||||
}
|
||||
offset = dacDelay - ceMeasuredDacDelay + transducerDelay + configDelay;
|
||||
}
|
||||
|
||||
offset = offset + reflectParams::offsetElectronic;
|
||||
if(!aCe.measuredCEUsed)
|
||||
else
|
||||
{
|
||||
if(aCe.measuredCEAvailable && aCe.ceAvailable)
|
||||
float electronicDelay = 0;
|
||||
switch ((int)aExpInfo.filterByPass)
|
||||
{
|
||||
size_t column = ceMeasured.getDimSize(1);
|
||||
size_t ceRows = ce.getDimSize(0);
|
||||
float* offsetCEMeasuredData = Aurora::malloc(column);
|
||||
for(int i=0; i<column; ++i)
|
||||
{
|
||||
Matrix corrCE = xcorr(ceMeasured($,i).toMatrix(), ce);
|
||||
long row,column;
|
||||
max(corrCE, FunctionDirection::All,row,column);
|
||||
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;
|
||||
}
|
||||
case 0:
|
||||
electronicDelay = aCe.offsetFilterEnabled;
|
||||
break;
|
||||
case 1:
|
||||
electronicDelay = aCe.offsetFilterDisabled;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
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;
|
||||
}
|
||||
@@ -3,9 +3,10 @@
|
||||
|
||||
#include "common/getMeasurementMetaData.h"
|
||||
|
||||
class Parser;
|
||||
namespace Recon
|
||||
{
|
||||
float estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe, const Aurora::Matrix& aMatchedFilter);
|
||||
float estimateOffset(const MeasurementInfo aExpInfo, const CEInfo& aCe);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -173,7 +173,7 @@ int Recon::startReconstructions( const std::string& aDataPath, const std::string
|
||||
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
||||
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
||||
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
||||
preComputes.offset = estimateOffset(expInfo, ce, preComputes.matchedFilter);
|
||||
preComputes.offset = estimateOffset(expInfo, ce);
|
||||
|
||||
expInfo.matchedFilter = preComputes.matchedFilter;
|
||||
expInfoRef.matchedFilter = preComputes.matchedFilterRef;
|
||||
@@ -240,7 +240,7 @@ int Recon::startReconstructions( const std::string& aDataPath, const std::string
|
||||
preComputes.measuredCEUsed = ce.measuredCEUsed;
|
||||
preComputes.measuredCE_TASIndices = ce.tasIndices;
|
||||
preComputes.measuredCE_receiverIndices = ce.receiverIndices;
|
||||
preComputes.offset = estimateOffset(expInfo, ce, preComputes.matchedFilter);
|
||||
preComputes.offset = estimateOffset(expInfo, ce);
|
||||
|
||||
reflectParams::gpuSelectionList = reconParams::gpuSelectionList;
|
||||
RECON_INFO("Start reflectionRecostruction.");
|
||||
|
||||
Reference in New Issue
Block a user