feat: Remove redudent TransDetection lib
This commit is contained in:
@@ -12,7 +12,10 @@
|
||||
|
||||
#include "common/getMeasurementMetaData.h"
|
||||
#include "config/config.h"
|
||||
#include "calculateBankDetectAndHilbertTransformation.hpp"
|
||||
|
||||
//remove detectTofAndAttMex function, use detectTofAndAtt function instead of
|
||||
//保留函数和函数申明备忘,以防以后再次使用,以下头文件从动态库中映入了detectTofAndAttMex的核心函数
|
||||
// #include "calculateBankDetectAndHilbertTransformation.hpp"
|
||||
|
||||
using namespace Aurora;
|
||||
namespace Recon {
|
||||
@@ -318,101 +321,103 @@ namespace Recon {
|
||||
return result;
|
||||
}
|
||||
|
||||
DetectResult detectTofAndAttMex(
|
||||
const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock,
|
||||
const Aurora::Matrix &distBlock, const Aurora::Matrix &distRefBlock,
|
||||
const Aurora::Matrix &sosWaterBlock,
|
||||
const Aurora::Matrix &sosWaterRefBlock,
|
||||
int resampleFactor,int nthreads, float expectedSOSWater,
|
||||
int useTimeWindowing, int aScanReconstructionFrequency,int detectionWindowATT,
|
||||
float offsetElectronic, int detectionWindowSOS, float minSpeedOfSound,
|
||||
float maxSpeedOfSound, bool gaussWindow)
|
||||
{
|
||||
//remove detectTofAndAttMex function, use detectTofAndAtt function instead of
|
||||
//保留函数和函数申明备忘,以防以后再次使用
|
||||
// DetectResult detectTofAndAttMex(
|
||||
// const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock,
|
||||
// const Aurora::Matrix &distBlock, const Aurora::Matrix &distRefBlock,
|
||||
// const Aurora::Matrix &sosWaterBlock,
|
||||
// const Aurora::Matrix &sosWaterRefBlock,
|
||||
// int resampleFactor,int nthreads, float expectedSOSWater,
|
||||
// int useTimeWindowing, int aScanReconstructionFrequency,int detectionWindowATT,
|
||||
// float offsetElectronic, int detectionWindowSOS, float minSpeedOfSound,
|
||||
// float maxSpeedOfSound, bool gaussWindow)
|
||||
// {
|
||||
|
||||
auto sizeAscan = size(AscanBlock);
|
||||
// auto sizeAscan = size(AscanBlock);
|
||||
|
||||
auto sampleRate = aScanReconstructionFrequency;
|
||||
float offsetElectronicSamples = offsetElectronic * sampleRate;
|
||||
Matrix diffStartSearch;
|
||||
TimeWindowResult timeResult1;
|
||||
timeResult1.AscanBlockProcessed = AscanBlock;
|
||||
TimeWindowResult timeResult2;
|
||||
timeResult2.AscanBlockProcessed = AscanRefBlock;
|
||||
if (useTimeWindowing == 1) {
|
||||
timeResult1 = applyTimeWindowing(
|
||||
AscanBlock, sampleRate, distBlock, sosWaterBlock,
|
||||
expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
timeResult2 = applyTimeWindowing(
|
||||
AscanRefBlock, sampleRate, distRefBlock, sosWaterRefBlock,
|
||||
expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
// auto sampleRate = aScanReconstructionFrequency;
|
||||
// float offsetElectronicSamples = offsetElectronic * sampleRate;
|
||||
// Matrix diffStartSearch;
|
||||
// TimeWindowResult timeResult1;
|
||||
// timeResult1.AscanBlockProcessed = AscanBlock;
|
||||
// TimeWindowResult timeResult2;
|
||||
// timeResult2.AscanBlockProcessed = AscanRefBlock;
|
||||
// if (useTimeWindowing == 1) {
|
||||
// timeResult1 = applyTimeWindowing(
|
||||
// AscanBlock, sampleRate, distBlock, sosWaterBlock,
|
||||
// expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
// minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
// timeResult2 = applyTimeWindowing(
|
||||
// AscanRefBlock, sampleRate, distRefBlock, sosWaterRefBlock,
|
||||
// expectedSOSWater, offsetElectronicSamples, detectionWindowSOS,
|
||||
// minSpeedOfSound, maxSpeedOfSound, gaussWindow);
|
||||
|
||||
diffStartSearch = timeResult1.startSearch - timeResult2.startSearch;
|
||||
}
|
||||
auto _AscanBlock = timeResult1.AscanBlockProcessed;
|
||||
auto _AscanRefBlock = timeResult2.AscanBlockProcessed;
|
||||
// diffStartSearch = timeResult1.startSearch - timeResult2.startSearch;
|
||||
// }
|
||||
// auto _AscanBlock = timeResult1.AscanBlockProcessed;
|
||||
// auto _AscanRefBlock = timeResult2.AscanBlockProcessed;
|
||||
|
||||
int M =std::min(AscanBlock.getDimSize(0),AscanRefBlock.getDimSize(0));
|
||||
// int M =std::min(AscanBlock.getDimSize(0),AscanRefBlock.getDimSize(0));
|
||||
|
||||
Matrix resDetect;
|
||||
float * resEnvelopeD = nullptr;
|
||||
float * resEnvelopeRefD = nullptr;
|
||||
// Matrix resDetect;
|
||||
// float * resEnvelopeD = nullptr;
|
||||
// float * resEnvelopeRefD = nullptr;
|
||||
|
||||
size_t N = _AscanBlock.getDimSize(1);
|
||||
size_t totalSize = N*M;
|
||||
Matrix _AscanBlock_trim = _AscanBlock.getDimSize(0)!=M?_AscanBlock.block(0, 0, M-1):_AscanBlock;
|
||||
Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock;
|
||||
resDetect = Aurora::zeros(1,N);
|
||||
resEnvelopeD = Aurora::malloc(totalSize);
|
||||
resEnvelopeRefD = Aurora::malloc(totalSize);
|
||||
calculateBankDetectAndHilbertTransformation(
|
||||
_AscanBlock_trim.getData(), _AscanRefBlock_trim.getData(), N, M, resampleFactor, nthreads,
|
||||
resDetect.getData(), resEnvelopeD, resEnvelopeRefD);
|
||||
auto resEnvelope =Matrix::New(resEnvelopeD,M,N);
|
||||
auto resEnvelopeRef =Matrix::New(resEnvelopeRefD,M,N);
|
||||
//floor(size(AscanBlock, 1)*inits.resampleFactor / 2 - 1),
|
||||
int end_1 = std::floor(_AscanBlock.getDimSize(0)*resampleFactor/2-1);
|
||||
//-ceil(size(AscanBlock, 1)*inits.resampleFactor / 2)
|
||||
int begin_2 = -std::ceil(_AscanBlock.getDimSize(0)*resampleFactor/2);
|
||||
int *lags2 = new int[_AscanBlock.getDimSize(0)];
|
||||
for (size_t i = 0; i <= end_1; i++)
|
||||
{
|
||||
lags2[i] = i;
|
||||
lags2[i+end_1+1] = begin_2+i;
|
||||
}
|
||||
auto resDetectLags = zeros(1,_AscanBlock.getDimSize(1));
|
||||
for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
||||
{
|
||||
resDetectLags[i] = lags2[(int)resDetect[i]];
|
||||
}
|
||||
delete [] lags2;
|
||||
resDetectLags =resDetectLags/resampleFactor;
|
||||
if (useTimeWindowing == 1) {
|
||||
resDetectLags = resDetectLags - diffStartSearch;
|
||||
}
|
||||
auto tofRel = (resDetectLags / sampleRate);
|
||||
auto tofAbs = tofRel + (distBlock / sosWaterBlock);
|
||||
auto sosValue = distBlock / tofAbs;
|
||||
auto tof2 = (distRefBlock / sosWaterRefBlock) * sampleRate + offsetElectronicSamples;
|
||||
auto startPos = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
auto endPos = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
#pragma omp parallel for
|
||||
for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
||||
{
|
||||
startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,(float)1.0));
|
||||
endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
||||
startPosRef[i] = std::floor(std::max( tof2[i],(float)1.0));
|
||||
endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT));
|
||||
}
|
||||
DetectResult result;
|
||||
result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef);
|
||||
result.tof = tofRel;
|
||||
result.sosValue = sosValue;
|
||||
return result;
|
||||
}
|
||||
// size_t N = _AscanBlock.getDimSize(1);
|
||||
// size_t totalSize = N*M;
|
||||
// Matrix _AscanBlock_trim = _AscanBlock.getDimSize(0)!=M?_AscanBlock.block(0, 0, M-1):_AscanBlock;
|
||||
// Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock;
|
||||
// resDetect = Aurora::zeros(1,N);
|
||||
// resEnvelopeD = Aurora::malloc(totalSize);
|
||||
// resEnvelopeRefD = Aurora::malloc(totalSize);
|
||||
// calculateBankDetectAndHilbertTransformation(
|
||||
// _AscanBlock_trim.getData(), _AscanRefBlock_trim.getData(), N, M, resampleFactor, nthreads,
|
||||
// resDetect.getData(), resEnvelopeD, resEnvelopeRefD);
|
||||
// auto resEnvelope =Matrix::New(resEnvelopeD,M,N);
|
||||
// auto resEnvelopeRef =Matrix::New(resEnvelopeRefD,M,N);
|
||||
// //floor(size(AscanBlock, 1)*inits.resampleFactor / 2 - 1),
|
||||
// int end_1 = std::floor(_AscanBlock.getDimSize(0)*resampleFactor/2-1);
|
||||
// //-ceil(size(AscanBlock, 1)*inits.resampleFactor / 2)
|
||||
// int begin_2 = -std::ceil(_AscanBlock.getDimSize(0)*resampleFactor/2);
|
||||
// int *lags2 = new int[_AscanBlock.getDimSize(0)];
|
||||
// for (size_t i = 0; i <= end_1; i++)
|
||||
// {
|
||||
// lags2[i] = i;
|
||||
// lags2[i+end_1+1] = begin_2+i;
|
||||
// }
|
||||
// auto resDetectLags = zeros(1,_AscanBlock.getDimSize(1));
|
||||
// for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
||||
// {
|
||||
// resDetectLags[i] = lags2[(int)resDetect[i]];
|
||||
// }
|
||||
// delete [] lags2;
|
||||
// resDetectLags =resDetectLags/resampleFactor;
|
||||
// if (useTimeWindowing == 1) {
|
||||
// resDetectLags = resDetectLags - diffStartSearch;
|
||||
// }
|
||||
// auto tofRel = (resDetectLags / sampleRate);
|
||||
// auto tofAbs = tofRel + (distBlock / sosWaterBlock);
|
||||
// auto sosValue = distBlock / tofAbs;
|
||||
// auto tof2 = (distRefBlock / sosWaterRefBlock) * sampleRate + offsetElectronicSamples;
|
||||
// auto startPos = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
// auto endPos = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
// auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
// auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1);
|
||||
// #pragma omp parallel for
|
||||
// for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++)
|
||||
// {
|
||||
// startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,(float)1.0));
|
||||
// endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT));
|
||||
// startPosRef[i] = std::floor(std::max( tof2[i],(float)1.0));
|
||||
// endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT));
|
||||
// }
|
||||
// DetectResult result;
|
||||
// result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef);
|
||||
// result.tof = tofRel;
|
||||
// result.sosValue = sosValue;
|
||||
// return result;
|
||||
// }
|
||||
|
||||
DetectResult transmissionDetection(const Aurora::Matrix &AscanBlock,
|
||||
const Aurora::Matrix &AscanRefBlock,
|
||||
@@ -424,16 +429,18 @@ namespace Recon {
|
||||
auto _sosWaterBlock = temperatureToSoundSpeed(sosWaterBlock, "marczak");
|
||||
auto _sosWaterRefBlock = temperatureToSoundSpeed(sosWaterRefBlock, "marczak");
|
||||
switch (Recon::transParams::version) {
|
||||
case 1: {
|
||||
return detectTofAndAttMex(
|
||||
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
||||
_sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
||||
expectedSOSWater, Recon::transParams::useTimeWindowing,
|
||||
Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
||||
Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
||||
Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow);
|
||||
}
|
||||
case 2:
|
||||
//remove detectTofAndAttMex function, use detectTofAndAtt function instead of
|
||||
//保留函数和函数申明备忘,以防以后再次使用
|
||||
// case 1: {
|
||||
// return detectTofAndAttMex(
|
||||
// AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
||||
// _sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads,
|
||||
// expectedSOSWater, Recon::transParams::useTimeWindowing,
|
||||
// Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT,
|
||||
// Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound,
|
||||
// Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow);
|
||||
// }
|
||||
// case 2:
|
||||
default:
|
||||
return detectTofAndAtt(
|
||||
AscanBlock, AscanRefBlock, distBlock, distRefBlock,
|
||||
|
||||
@@ -63,15 +63,17 @@ detectTofAndAtt(
|
||||
int detectionWindowATT, float offsetElectronic, int detectionWindowSOS,
|
||||
float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow);
|
||||
|
||||
DetectResult
|
||||
detectTofAndAttMex(
|
||||
const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock,
|
||||
const Aurora::Matrix &distBlock, const Aurora::Matrix &distBlockRef,
|
||||
const Aurora::Matrix &sosWaterBlock, const Aurora::Matrix &sosWaterRefBlock,
|
||||
int resampleFactor, int nthreads, float expectedSOSWater,
|
||||
int useTimeWindowing, int aScanReconstructionFrequency,
|
||||
int detectionWindowATT, float offsetElectronic, int detectionWindowSOS,
|
||||
float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow);
|
||||
//remove detectTofAndAttMex function, use detectTofAndAtt function instead of
|
||||
//保留函数和函数申明备忘,以防以后再次使用
|
||||
// DetectResult
|
||||
// detectTofAndAttMex(
|
||||
// const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock,
|
||||
// const Aurora::Matrix &distBlock, const Aurora::Matrix &distBlockRef,
|
||||
// const Aurora::Matrix &sosWaterBlock, const Aurora::Matrix &sosWaterRefBlock,
|
||||
// int resampleFactor, int nthreads, float expectedSOSWater,
|
||||
// int useTimeWindowing, int aScanReconstructionFrequency,
|
||||
// int detectionWindowATT, float offsetElectronic, int detectionWindowSOS,
|
||||
// float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow);
|
||||
|
||||
DetectResult
|
||||
transmissionDetection(
|
||||
|
||||
Reference in New Issue
Block a user